按键精灵是一个很好的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. 为什么 Linux 需要 Swapping
  2. 我的第一个MapReduce程序(WordCount)
  3. PHP环境配置文件php.ini详解注释 --转贴
  4. iOS,macOS,darwin,unix 简介
  5. jQuery的三种$()
  6. python 速度 memmap_使用python测量文件的读写速度
  7. mybatis-plus的 mapper.xml 路径配置的坑
  8. 放苹果(信息学奥赛一本通-T1206)
  9. 别人用钱,而我用python爬虫爬取了一年的4K高清壁纸
  10. Java BufferedReader
  11. wpf程序运行时停止工作,事件管理器报错lci_proxyumd32.dll
  12. linux与Windows查看路由
  13. QA:阿里云K8s启动容器后无法访问网络
  14. 数据中心淘汰服务器,浅谈数据中心危机严重的程度
  15. java 内部邮件_java企业内部邮件email收发管理系统s2sh
  16. 权重计算方法一:层次分析法(AHP)
  17. 疲劳检测(Fatigue Detection Algorithm)
  18. c语言父进程创建孙进程,进程的创建与并发的执行-带答案版.doc
  19. 微软office在线文档_如何使用Microsoft Office密码保护文档和PDF
  20. 解决挂过代理之后ip不变

热门文章

  1. PHP摘桃子,幼儿园中班健康活动《摘桃子》
  2. 品茗安全帮助html,品茗安全计算软件操作..docx
  3. Certbot测试和Crontab定时任务
  4. [自习任我行]软件需求报告
  5. 软件需求管理用例方法 pdf_企业内训“软件需求设计建模方法学全程实例剖析”训练方案(2020年)...
  6. 20个免费网站测试工具(转)
  7. 盲盒商城完整运营源码/对接免签支付接口
  8. php excel 获取列数,利用PHPEXCEL读取EXCEL内容,主要是读取EXCEL可用列数 | 学步园...
  9. 目标检测YOLO实战应用案例100讲-基于深度学习的无人机航拍图像目标检测算法研究与应用
  10. JS - 获取选中复选框的值(checkBox)