按键精灵是一个很好的Windows按键模拟器,下面用python简单地实现所需要的功能。

下面提供两种方式,第一种一种是简单模拟。发的是虚拟消息给程序的消息队列,但是有些软件比如360和一些游戏大部分都是直接和硬件通信(为了即时)使用drixt提供的接口,不能点击,使用场景有限。

import win32api
import win32con
import win32gui
from ctypes import *
import timeVK_CODE = {'backspace': 0x08,'tab': 0x09,'clear': 0x0C,'enter': 0x0D,'shift': 0x10,'ctrl': 0x11,'alt': 0x12,'pause': 0x13,'caps_lock': 0x14,'esc': 0x1B,'spacebar': 0x20,'page_up': 0x21,'page_down': 0x22,'end': 0x23,'home': 0x24,'left_arrow': 0x25,'up_arrow': 0x26,'right_arrow': 0x27,'down_arrow': 0x28,'select': 0x29,'print': 0x2A,'execute': 0x2B,'print_screen': 0x2C,'ins': 0x2D,'del': 0x2E,'help': 0x2F,'0': 0x30,'1': 0x31,'2': 0x32,'3': 0x33,'4': 0x34,'5': 0x35,'6': 0x36,'7': 0x37,'8': 0x38,'9': 0x39,'a': 0x41,'b': 0x42,'c': 0x43,'d': 0x44,'e': 0x45,'f': 0x46,'g': 0x47,'h': 0x48,'i': 0x49,'j': 0x4A,'k': 0x4B,'l': 0x4C,'m': 0x4D,'n': 0x4E,'o': 0x4F,'p': 0x50,'q': 0x51,'r': 0x52,'s': 0x53,'t': 0x54,'u': 0x55,'v': 0x56,'w': 0x57,'x': 0x58,'y': 0x59,'z': 0x5A,'numpad_0': 0x60,'numpad_1': 0x61,'numpad_2': 0x62,'numpad_3': 0x63,'numpad_4': 0x64,'numpad_5': 0x65,'numpad_6': 0x66,'numpad_7': 0x67,'numpad_8': 0x68,'numpad_9': 0x69,'multiply_key': 0x6A,'add_key': 0x6B,'separator_key': 0x6C,'subtract_key': 0x6D,'decimal_key': 0x6E,'divide_key': 0x6F,'F1': 0x70,'F2': 0x71,'F3': 0x72,'F4': 0x73,'F5': 0x74,'F6': 0x75,'F7': 0x76,'F8': 0x77,'F9': 0x78,'F10': 0x79,'F11': 0x7A,'F12': 0x7B,'F13': 0x7C,'F14': 0x7D,'F15': 0x7E,'F16': 0x7F,'F17': 0x80,'F18': 0x81,'F19': 0x82,'F20': 0x83,'F21': 0x84,'F22': 0x85,'F23': 0x86,'F24': 0x87,'num_lock': 0x90,'scroll_lock': 0x91,'left_shift': 0xA0,'right_shift ': 0xA1,'left_control': 0xA2,'right_control': 0xA3,'left_menu': 0xA4,'right_menu': 0xA5,'browser_back': 0xA6,'browser_forward': 0xA7,'browser_refresh': 0xA8,'browser_stop': 0xA9,'browser_search': 0xAA,'browser_favorites': 0xAB,'browser_start_and_home': 0xAC,'volume_mute': 0xAD,'volume_Down': 0xAE,'volume_up': 0xAF,'next_track': 0xB0,'previous_track': 0xB1,'stop_media': 0xB2,'play/pause_media': 0xB3,'start_mail': 0xB4,'select_media': 0xB5,'start_application_1': 0xB6,'start_application_2': 0xB7,'attn_key': 0xF6,'crsel_key': 0xF7,'exsel_key': 0xF8,'play_key': 0xFA,'zoom_key': 0xFB,'clear_key': 0xFE,'+': 0xBB,',': 0xBC,'-': 0xBD,'.': 0xBE,'/': 0xBF,'`': 0xC0,';': 0xBA,'[': 0xDB,'\\': 0xDC,']': 0xDD,"'": 0xDE,'`': 0xC0}class POINT(Structure):_fields_ = [("x", c_ulong), ("y", c_ulong)]def get_mouse_point():po = POINT()windll.user32.GetCursorPos(byref(po))return int(po.x), int(po.y)def mouse_click(x=None, y=None):if not x is None and not y is None:mouse_move(x, y)time.sleep(0.05)win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)def mouse_dclick(x=None, y=None):if not x is None and not y is None:mouse_move(x, y)time.sleep(0.05)win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)def mouse_move(x, y):windll.user32.SetCursorPos(x, y)def key_input(str=''):for c in str:win32api.keybd_event(VK_CODE[c], 0, 0, 0)win32api.keybd_event(VK_CODE[c], 0, win32con.KEYEVENTF_KEYUP, 0)time.sleep(0.01)if __name__ == "__main__":mouse_dclick(500, 280)#str1 = 'python'#key_input(str1)#mouse_click(1000, 280)

下面一种使用的是ctypes模块,在大多数场景下都能使用。

import ctypes
import timeSendInput = ctypes.windll.user32.SendInput# C struct redefinitions
PUL = ctypes.POINTER(ctypes.c_ulong)
class KeyBdInput(ctypes.Structure):_fields_ = [("wVk", ctypes.c_ushort),("wScan", ctypes.c_ushort),("dwFlags", ctypes.c_ulong),("time", ctypes.c_ulong),("dwExtraInfo", PUL)]class HardwareInput(ctypes.Structure):_fields_ = [("uMsg", ctypes.c_ulong),("wParamL", ctypes.c_short),("wParamH", ctypes.c_ushort)]class MouseInput(ctypes.Structure):_fields_ = [("dx", ctypes.c_long),("dy", ctypes.c_long),("mouseData", ctypes.c_ulong),("dwFlags", ctypes.c_ulong),("time",ctypes.c_ulong),("dwExtraInfo", PUL)]class Input_I(ctypes.Union):_fields_ = [("ki", KeyBdInput),("mi", MouseInput),("hi", HardwareInput)]class Input(ctypes.Structure):_fields_ = [("type", ctypes.c_ulong),("ii", Input_I)]# Actuals Functionsdef PressKey(hexKeyCode):extra = ctypes.c_ulong(0)ii_ = Input_I()ii_.ki = KeyBdInput( 0, hexKeyCode, 0x0008, 0, ctypes.pointer(extra) )x = Input( ctypes.c_ulong(1), ii_ )ctypes.windll.user32.SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))def ReleaseKey(hexKeyCode):extra = ctypes.c_ulong(0)ii_ = Input_I()ii_.ki = KeyBdInput( 0, hexKeyCode, 0x0008 | 0x0002, 0, ctypes.pointer(extra) )x = Input( ctypes.c_ulong(1), ii_ )ctypes.windll.user32.SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))# directx scan codes http://www.gamespp.com/directx/directInputKeyboardScanCodes.html
while True:while (True):PressKey(0x11)time.sleep(1)ReleaseKey(0x11)time.sleep(1)

Python模拟电脑按键相关推荐

  1. python 模拟键盘 linux,在Linux中使用Python模拟键盘按键,linuxpython

    在Linux中使用Python模拟键盘按键,linuxpython 之前在做自动化测试中需要用Python在linux中模拟Ctrl+V 进行路径粘贴,试了很多种方法,起初用了xerox和pyperc ...

  2. python调用linux软键盘_在Linux中使用Python模拟键盘按键

    之前在做自动化测试中需要用Python在linux中模拟Ctrl+V 进行路径粘贴,试了很多种方法,起初用了xerox和pyperclip这两个python库,但打开对话框后调用粘贴API无法进行粘贴 ...

  3. 在Linux中使用Python模拟键盘按键

    之前在做自动化测试中需要用Python在linux中模拟Ctrl+V 进行路径粘贴,试了很多种方法,起初用了xerox和pyperclip这两个python库,但打开对话框后调用粘贴API无法进行粘贴 ...

  4. python模拟手机按键_Appium+Python-模拟手机按键操作

    一.前言 移动端自动化的话,有时需要模拟手机按键操作,比如手机系统自带的回车.返回等,所以要模拟按键操作得用到 keyevent方法,参数如下: keyevent(keycode, metastate ...

  5. python 模拟电脑黑屏

    python让电脑黑屏 一种非常低级的方法 提前准备:需要安装一个轻量级图片查看软件,并设置为.png格式图片的默认打开方式,这个软件叫Vieas,这个可以自行搜索下载安装. 基于PIL库生成一张屏幕 ...

  6. android 模拟电脑按键精灵,模拟精灵_安卓模拟精灵_和按键精灵一样的软件

    多普鼠标键盘万能模拟精灵程序以指定窗口为操作目标,定位更准确.更快捷,并且不需要编写任何代码,只要会电脑操作的人就可以快速的生成强大的后台操作代码,可以完成任何一个前台用户可以完成的工作,可以应用到任 ...

  7. android 模拟电脑按键精灵,Android 模拟点击 按键精灵 ADB方案

    Android 模拟点击的方案 模拟MotionEvent ADB控制 Instrumentation 通过使用sendevent 这里我们只讨论ADB控制方案,因为这个方案可以点击本APP以外的东西 ...

  8. python 模拟键盘按键错乱,ubuntu中vi编辑器键盘错乱的问题

    OSG+Python 测试平台(1)Fedora19 x86 [cc@localhost ~]$ lspci | grep VGA :) :00.0 VGA compatible controller ...

  9. python模拟按键_python 模拟按键放在模拟器Python初学者的17个技巧

    Python初学者的17个技巧,有需要的朋友可以参考下. W WW.002pc .COM认为此文章对<python 模拟按键放在模拟器Python初学者的17个技巧>说的很在理. 交换变量 ...

最新文章

  1. Python爬虫之urllib模块2
  2. 自建MySQL5.6数据库查询优化
  3. 利用U盘进行软件加密(转)
  4. 深度历险:Redis 内存模型详解
  5. JS中fori和forEach跳出循环的问题
  6. Thread.yield()方法表示交出主动权,join表示等待当前线程,可以指定秒数
  7. 财务软件开发_财务独立对软件开发人员的重要性
  8. mysql keepalived主从_mysql高可用架构之(一)基于自身主从复制&keepalived实现
  9. 乐高解魔方机器人编程百度网盘_砍人快乐 喜剧 / 惊悚 / 恐怖 网盘资源目录搭建...
  10. Android,六款安卓车机大PK
  11. Atitit.常见软件 数据 交换格式 标准
  12. html5翻牌小游戏源码,html5记忆翻牌游戏实现思路及代码
  13. Python - 批量修改文件夹名称
  14. 看完这篇文章,还不知道怎么学单片机,来打我!
  15. UWP: 通过命令行启动 UWP 应用
  16. 如何实现水平垂直居中?
  17. php三层架构 注册登陆,什么是三层架构
  18. 【Data Science from Scratch 学习笔记】第2章 Python速成(上)
  19. TX2开箱,安装JetPack
  20. linux下的IDE--codelite

热门文章

  1. JQ修改css样式小结
  2. 如何得到网易云音乐的高清专辑封面图或者单曲封面图?(测试)
  3. 室内定位方案之化工厂访客定位监测系统,一种室内定位管理方案
  4. 存储调研:Lustre并行文件系统体系结构
  5. 网速测试软件 mac,Internet Speed Test v3.1 Mac电脑网速测试工具
  6. matlab对信号包络的两种画法
  7. 如何在龙芯架构和国产化操作系统平台上运行javacv
  8. Txt格式文件导入Excel单元格
  9. 对NC帐套中的特定公司和特定模块及年度进行抽取
  10. Vue滑块验证码使用