Python中使用PyHook监听鼠标和键盘事件实例

合集下载

python实现键盘控制鼠标移动

python实现键盘控制鼠标移动

python实现键盘控制⿏标移动玩QQ桌球游戏时,有时候⽤⿏标控制⿏标指针的微⼩移动⽐较费劲⼉,所以想写个程序,可以⽤键盘的上下左右键来控制⿏标的移动,每次只移动⼀个像素。

本脚本依赖pywin32、pyHook和pymouse这两个库,请⾃⾏安装。

代码中的pythoncom是pywin32库的⼀部分,运⾏脚本后,即可通过键盘的上下左右键控制⿏标移动了。

# -*- coding:utf-8 -*-# 左37 上38 右39 下40import pythoncomimport pyHookfrom pymouse import PyMousedef onKeyboardEvent(event):# 获取所按下按键的idkeyID = event.KeyID# 获取当前⿏标的坐标mouse = PyMouse()x, y = mouse.position()x = int(x)y = int(y)# 设定x和y的偏移量deltaX = 0deltaY = 0if keyID == 37:deltaX = -1elif keyID == 38:deltaY = -1elif keyID == 39:deltaX = 1elif keyID == 40:deltaY = 1else:return True# 移动⿏标mouse.move(x + deltaX, y + deltaY)return Truedef main():# 启动键盘事件的监听hm = pyHook.HookManager()hm.KeyDown = onKeyboardEventhm.HookKeyboard()pythoncom.PumpMessages()if __name__ == '__main__':main()以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

python监听、操作键盘鼠标库pynput详细教程

python监听、操作键盘鼠标库pynput详细教程

python监听、操作键盘⿏标库pynput详细教程§ 0.0.0 前⾔监听、操作⿏标、键盘是实现⾃动化的捷径,⽐如我⽤到了模拟键盘操作。

pynput是监听、操控⿏标和键盘的跨平台第三⽅python库。

你可以通过pip insnall pynput来安装。

安装时会⾃动下载依赖库。

接下来我会按“⿏标按键”“监听⿏标”“控制⿏标”,“键盘按键”“监听键盘”“控制键盘”的顺序介绍它的⽤法。

以下为正⽂。

§1.0.0 ⿏标按键⿏标的按键在pynput.mouse.Button中,有lift、right、middle还有unknown四种。

每⼀个按键都有两个有意义的属性:name和value。

name是该按键的名称,⽐如 == 'left';value是记录上⼀次点击位置的元组。

§1.1.0 监听⿏标有两种⽅法,⼀种是函数式、⾮阻塞型,另⼀种是语句式、阻塞型。

先说第⼀种,这种是常见的教程所说的⽅法。

§1.1.1 pynput.mouse.Listener以下是官⽹的说明⽰例:import pynput, timedef on_move(x, y):print('Pointer moved to {0}'.format((x, y)))def on_click(x, y, button, pressed):print('{0} at {1}'.format('Pressed' if pressed else 'Released',(x, y)))if not pressed:# Stop listenerreturn Falsedef on_scroll(x, y, dx, dy):print('Scrolled {0} at {1}'.format('down' if dy < 0 else 'up',(x, y)))# Collect events until releasedwith pynput.mouse.Listener(on_move=on_move,on_click=on_click,on_scroll=on_scroll) as listener:listener.join()运⾏这段代码时,移动⿏标会显⽰其坐标,按下⿏标按键并松开后,程序结束。

Python捕捉和模拟鼠标事件的方法

Python捕捉和模拟鼠标事件的方法

Python捕捉和模拟⿏标事件的⽅法本⽂实例讲述了Python捕捉和模拟⿏标事件的⽅法。

分享给⼤家供⼤家参考。

具体分析如下:这个假期玩了不少galgame,不过有些很⽼的游戏没有⾃动运⾏模式,点击⿏标⼜太伤按键了,于是想把滚动⿏标滚轮映射为点击⿏标。

⽹上搜了⼀下,没发现什么现成的软件,⽽按键精灵⼜太重量级了,于是考虑⼲脆⾃⼰⽤Python写个算了。

这⾥需要把PyHook和PyWin32都装上(建议下exe版,免得安装时各种蛋疼)。

翻了翻教程,发现实现起来很简单:# -*- coding: utf-8 -*-import pythoncom, pyHookdef OnMouseEvent(event):print 'MessageName:',event.MessageNameprint 'Message:',event.Messageprint 'Time:',event.Timeprint 'Window:',event.Windowprint 'WindowName:',event.WindowNameprint 'Position:',event.Positionprint 'Wheel:',event.Wheelprint 'Injected:',event.Injectedprint '---'# 返回 True 可将事件传给其它处理程序,否则停⽌传播事件return True# 创建钩⼦管理对象hm = pyHook.HookManager()# 监听所有⿏标事件hm.MouseAll = OnMouseEvent # 等效于hm.SubscribeMouseAll(OnMouseEvent)# 开始监听⿏标事件hm.HookMouse()# ⼀直监听,直到⼿动退出程序pythoncom.PumpMessages()这个例⼦程序捕捉了所有的⿏标事件,实际上我只需要捕捉向下滚动滚轮的事件即可。

pynput用法

pynput用法

pynput用法pynput是一个Python库,用于控制和监视鼠标和键盘。

它的使用主要涉及以下部分:•Controller类:这个类可以用来控制鼠标和键盘。

例如,你可以创建一个Controller 对象,然后使用这个对象来控制鼠标或键盘。

•Button模块:这个模块包含左键、右键和中键操作。

以下是一些使用pynput的示例:1.获取或设置鼠标位置:python复制代码import pynputfrom pynput.mouse import Controller, Buttonmouse = Controller()# 获取鼠标当前的位置mouse_position = mouse.positionprint("鼠标当前的位置是:{0}".format(mouse_position))# 获取鼠标x轴当前的位置x, y = mouse.positionprint("鼠标x轴当前的位置是:{},鼠标y轴当前的位置是:{}".format(x,y))# 修改鼠标位置mouse_position = (490,500)mouse.position = mouse_positionprint("修改后鼠标位置:{0}".format(mouse_position))2.鼠标执行点击和松开操作:python复制代码import pynput.mouse as mouseimport timeprint("请在2秒内移动到需要点击的位置。

")time.sleep(2)mouse_position=mouse.positionprint("需要点击的位置是:{0}".format(mouse_position))mouse.click(Button.left) #左键点击3.移动鼠标:python复制代码import pynput.mouse as mouse# 移动到绝对坐标(x,y)处mouse.move(x, y)注意:在以上代码中,x和y的值是你想要鼠标移动到的位置。

Python监控键盘输入鼠标操作并将捕获到的信息记录到文件中

Python监控键盘输入鼠标操作并将捕获到的信息记录到文件中

Python监控键盘输入鼠标操作并将捕获到的信息记录到文件中在Python中,可以使用第三方库`pynput`来监控键盘输入和鼠标操作,并将捕获到的信息记录到文件中。

下面是一个1200字以上的示例代码,演示了如何使用`pynput`库来实现键盘和鼠标监听,并将捕获到的信息写入文件中。

```pythonfrom pynput import keyboard, mouse#创建一个日志文件log_file = open("log.txt", "w")#记录键盘输入信息的回调函数def on_keyboard_press(key):try:log_file.write("键盘按下: {0}\n".format(key.char))except AttributeError:log_file.write("特殊键按下: {0}\n".format(key))def on_keyboard_release(key):log_file.write("键盘释放: {0}\n".format(key))#键盘监听器keyboard_listener =keyboard.Listener(on_press=on_keyboard_press,on_release=on_keyboard_release)keyboard_listener.start#记录鼠标操作信息的回调函数def on_mouse_move(x, y):log_file.write("鼠标移动到: ({0}, {1})\n".format(x, y))def on_mouse_click(x, y, button, pressed):if pressed:log_file.write("鼠标点击: ({0}, {1}) [{2}]\n".format(x, y, button))else:log_file.write("鼠标释放: ({0}, {1}) [{2}]\n".format(x, y, button))def on_mouse_scroll(x, y, dx, dy):log_file.write("鼠标滚动: ({0}, {1}) 滚动 ({2},{3})\n".format(x, y, dx, dy))#鼠标监听器mouse_listener = mouse.Listener(on_move=on_mouse_move,on_click=on_mouse_click, on_scroll=on_mouse_scroll)mouse_listener.start#程序运行keyboard_listener.joinmouse_listener.join#关闭日志文件log_file.close```上述代码中,我们首先导入`keyboard`和`mouse`模块,用于创建键盘监听器和鼠标监听器。

Python监听键盘和鼠标事件的示例代码

Python监听键盘和鼠标事件的示例代码

Python监听键盘和⿏标事件的⽰例代码我们可以利⽤windows提供的api函数来实现对系统键盘事件和⿏标事件的监听,主要利⽤的是SetWindowsHookEx函数,这个函数可以允许调⽤者传⼊⼀个钩⼦函数也叫回调函数,当指定的事件发⽣时,你传⼊的函数就会被触发,有些事件是进程级的,有些事件是系统级的,这⾥我们⽤WH_KEYBOARD_LL来监听系统键盘事件,⽤WH_MOUSE_LL来监听⿏标事件,注意不是WH_KEYBOARD,使⽤WH_KEYBOARD是⽆法监听到外部程序的事件的,这个可以在windows官⽅⽂档⾥⾯看到说明,要⽤WH_KEYBOARD来监听系统键盘必须写dll去实现。

因为⽤到了⼀些宏定义在win32con⾥⾯已经有了,所以需要安装⼀下pypiwin32,当然如果你将这些宏定义写在⾃⼰的⽂件中,那么就不⽤安装pypiwin32了。

安装pypiwin32pip install pypiwin32# coding=utf-8from ctypes import *from ctypes import wintypesimport win32conSetWindowsHookEx=er32.SetWindowsHookExAUnhookWindowsHookEx=er32.UnhookWindowsHookExCallNextHookEx=er32.CallNextHookExGetMessage=er32.GetMessageAGetModuleHandle=windll.kernel32.GetModuleHandleW#保存键盘钩⼦函数句柄keyboard_hd = None#保存⿏标钩⼦函数句柄mouse_hd = Noneclass KBDLLHOOKSTRUCT(Structure):_fields_ = [('vkCode',c_int),('scanCode', c_int),('flags', c_int),('time', c_int),('dwExtraInfo', c_uint),('',c_void_p)]class POINT(Structure):_fields_ = [('x',c_long),('y',c_long)]class MSLLHOOKSTRUCT(Structure):_fields_ = [('pt',POINT),('hwnd',c_int),('wHitTestCode',c_uint),('dwExtraInfo',c_uint),]def wait_for_msg():msg = wintypes.MSG()GetMessage(msg, 0, 0, 0)def keyboard_pro(nCode, wParam, lParam):"""函数功能:键盘钩⼦函数,当有按键按下时此函数被回调"""if nCode == win32con.HC_ACTION:KBDLLHOOKSTRUCT_p = POINTER(KBDLLHOOKSTRUCT)param=cast(lParam,KBDLLHOOKSTRUCT_p)print(param.contents.vkCode)return CallNextHookEx(keyboard_hd, nCode, wParam, lParam)def start_keyboard_hook():"""函数功能:启动键盘监听"""HOOKPROTYPE = CFUNCTYPE(c_int, c_int, c_int, POINTER(c_void_p))pointer = HOOKPROTYPE(keyboard_pro)keyboard_hd = SetWindowsHookEx(win32con.WH_KEYBOARD_LL,pointer,GetModuleHandle(None),0)wait_for_msg()def stop_keyboard_hook():"""函数功能:停⽌键盘监听"""UnhookWindowsHookEx(keyboard_hd)def mouse_pro(nCode, wParam, lParam):"""函数功能:⿏标钩⼦函数,当有⿏标事件,此函数被回调"""if nCode == win32con.HC_ACTION:MSLLHOOKSTRUCT_p = POINTER(MSLLHOOKSTRUCT)param=cast(lParam,MSLLHOOKSTRUCT_p)#⿏标左键点击if wParam == win32con.WM_LBUTTONDOWN:print("左键点击,坐标:x:%d,y:%d" % (param.contents.pt.x,param.contents.pt.y))elif wParam == win32con.WM_LBUTTONUP:print("左键抬起,坐标:x:%d,y:%d" % (param.contents.pt.x, param.contents.pt.y))elif wParam == win32con.WM_MOUSEMOVE:print("⿏标移动,坐标:x:%d,y:%d" % (param.contents.pt.x, param.contents.pt.y))elif wParam == win32con.WM_RBUTTONDOWN:print("右键点击,坐标:x:%d,y:%d" % (param.contents.pt.x, param.contents.pt.y))elif wParam == win32con.WM_RBUTTONUP:print("右键抬起,坐标:x:%d,y:%d" % (param.contents.pt.x, param.contents.pt.y))return CallNextHookEx(mouse_hd, nCode, wParam, lParam)def start_mouse_hook():"""函数功能:启动⿏标监听"""HOOKPROTYPE = CFUNCTYPE(c_int, c_int, c_int, POINTER(c_void_p))pointer = HOOKPROTYPE(mouse_pro)mouse_hd = SetWindowsHookEx(win32con.WH_MOUSE_LL,pointer,GetModuleHandle(None),0)wait_for_msg()def stop_mouse_hook():"""函数功能:停⽌⿏标监听"""UnhookWindowsHookEx(mouse_hd)测试代码:import HookApiif __name__== '__main__':HookApi.start_keyboard_hook()运⾏效果以上就是Python监听键盘和⿏标事件的⽰例代码的详细内容,更多关于Python监听键盘和⿏标事件的资料请关注其它相关⽂章!。

c#使用hook来监控鼠标键盘事件的示例代码

c#使用hook来监控鼠标键盘事件的示例代码

c#使⽤hook来监控⿏标键盘事件的⽰例代码如果这个程序在10⼏年前,QQ刚刚兴起的时候,有了这个代码,就可实现盗号了.当然使⽤钩⼦我们更多的是实现"全局快捷键"的需求.⽐如程序最⼩化隐藏后要"某快捷键"来启动它.钩⼦(hook),通俗的讲,她可以捕获到你的键盘和⿏标的相关操作消息.关于hook的相关代码⽹上⼀搜⼀箩筐,这是整理起来⽐较完善和使⽤最⽅便的.//Declare wrapper managed POINT class.[StructLayout(LayoutKind.Sequential)]public class POINT{public int x;public int y;}//Declare wrapper managed MouseHookStruct class.[StructLayout(LayoutKind.Sequential)]public class MouseHookStruct{public POINT pt;public int hwnd;public int wHitTestCode;public int dwExtraInfo;}//Declare wrapper managed KeyboardHookStruct class.[StructLayout(LayoutKind.Sequential)]public class KeyboardHookStruct{public int vkCode; //Specifies a virtual-key code. The code must be a value in the range 1 to 254.public int scanCode; // Specifies a hardware scan code for the key.public int flags; // Specifies the extended-key flag, event-injected flag, context code, and transition-state flag.public int time; // Specifies the time stamp for this message.public int dwExtraInfo; // Specifies extra information associated with the message.}public class GlobalHook{public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);public delegate int GlobalHookProc(int nCode, Int32 wParam, IntPtr lParam);public GlobalHook(){//Start();}~GlobalHook(){Stop();}public event MouseEventHandler OnMouseActivity;public event KeyEventHandler KeyDown;public event KeyPressEventHandler KeyPress;public event KeyEventHandler KeyUp;/// <summary>/// 定义⿏标钩⼦句柄./// </summary>static int _hMouseHook = 0;/// <summary>/// 定义键盘钩⼦句柄/// </summary>static int _hKeyboardHook = 0;public int HMouseHook{get { return _hMouseHook; }}public int HKeyboardHook{get { return _hKeyboardHook; }}/// <summary>/// ⿏标钩⼦常量(from Microsoft SDK Winuser.h )/// </summary>public const int WH_MOUSE_LL = 14;/// <summary>/// 键盘钩⼦常量(from Microsoft SDK Winuser.h )/// </summary>public const int WH_KEYBOARD_LL = 13;/// <summary>/// 定义⿏标处理过程的委托对象/// </summary>GlobalHookProc MouseHookProcedure;/// <summary>/// 键盘处理过程的委托对象/// </summary>GlobalHookProc KeyboardHookProcedure;//导⼊window 钩⼦扩展⽅法导⼊/// <summary>/// 安装钩⼦⽅法/// </summary>[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]public static extern int SetWindowsHookEx(int idHook, GlobalHookProc lpfn,IntPtr hInstance, int threadId);/// <summary>/// 卸载钩⼦⽅法/// </summary>[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]public static extern bool UnhookWindowsHookEx(int idHook);//Import for CallNextHookEx./// <summary>/// 使⽤这个函数钩信息传递给链中的下⼀个钩⼦过程。

Python键盘鼠标控制

Python键盘鼠标控制

Python键盘鼠标控制键盘控制需要用到keyboard模块(pip install keyboard)按键字符#字符'1''a'...#控制'ctrl''alt''shift''enter''esc''f1'...#方向键'up''down''left''right'#组合按键'ctrl'+'alt'+'a'...常用方法wait()监听按键,如果没设置按键,将会一直监听这句之前的按键;如果设置了按键,那么在按下该按键后就会停止监听,并执行后面的语句,举例:import keyboardprint(0)keyboard.wait('a')#在按下a之前后面的语句都不会执行,下面同理print(1)keyboard.wait('b')print(2)keyboard.wait('c')print(3)keyboard.wait()结果:0123#继续监听#只有按顺序按下abc(中间过程随便按不干扰)才能输出0123,但因为最后一个没设置按键,所以会一直监听下去add_hotkey()设置热键,一般和wait()组合使用,在wait监听下,当按下热键时会执行对应函数,举例:import keyboard #监听键盘def test_a():print('aaa')def test(x):print(x)if __name__ == '__main__':keyboard.add_hotkey('f1', test_a)#按f1输出aaakeyboard.add_hotkey('ctrl+alt', test, args=('b',))#按ctrl+alt输出bkeyboard.wait()#wait里也可以设置按键,说明当按到该键时结束record()记录键盘事件,如果加上until参数,可以设置当按下某按键时结束监听,和wait方法有点像,举例:import keyboardkeyboard.add_hotkey('ctrl', print, args=('aaa',))keyboard.add_hotkey('alt', print, args=('bbb',))recorded = keyboard.record(until='esc')#当按下esc时结束按键监听,并输出所有按键事件print(recorded)结果为:aaaaaabbb[KeyboardEvent(ctrl down), KeyboardEvent(ctrl up), KeyboardEvent(ctrl down),KeyboardEvent(ctrl up), KeyboardEvent(alt down), KeyboardEvent(alt up),KeyboardEvent(esc down)]hook()绑定所有按键事件,当只要有按键按下/松开时就会触发的回调函数,举例:import keyboarddef abc(x):print(x)print("111")keyboard.hook(abc)#按下任何按键时,都会调用abc,其中一定会传一个值,就是键盘事件keyboard.wait()结果:KeyboardEvent(w down)111KeyboardEvent(w up)111KeyboardEvent(space down)111KeyboardEvent(space up)111KeyboardEvent(tab down)111KeyboardEvent(tab up)111KeyboardEvent(ctrl down)111...KeyboardEvent()一个按键事件,里面有3个常用参数:event_type、scan_code、name,分别代表按键类型(down/up)、按键号(每个键都有对应的)和按键名,举例:import keyboarddef abc(x):a = keyboard.KeyboardEvent('down', 28, 'enter')#按键事件a为按下enter键,第二个参数如果不知道每个按键的值就随便写,#如果想知道按键的值可以用hook绑定所有事件后,输出x.scan_code即可if x.event_type == 'down' and == :print("你按下了enter键")#当监听的事件为enter键,且是按下的时候keyboard.hook(abc)# keyboard.hook_key('enter', bcd)# recorded = keyboard.record(until='esc')keyboard.wait()结果:你按下了enter键你按下了enter键更多参考鼠标控制需要用到pyautogui模块(pip install pyautogui)常用方法position()获取鼠标位置,举例:import pyautogui as pag #监听鼠标x1, y1 = pag.position()print(x1, y1)#输出鼠标当前位置实例-结合鼠标键盘截图(按下两次alt+ctrl来确定图片左上角和右上角,然后截图保存)import keyboard #监听键盘import pyautogui as pag #监听鼠标from PIL import ImageGrab #截图、读取图片、保存图片if keyboard.wait(hotkey='ctrl+alt') == None:x1, y1 = pag.position()if keyboard.wait(hotkey='ctrl+alt') == None:x2, y2 = pag.position()image = ImageGrab.grab((x1, y1, x2, y2))image.save("screen.png")click()鼠标点击控制,举例:import pyautoguipyautogui.click(button='right')#点击鼠标右键pyautogui.click(100, 100)#要在指定位置点击左键。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Python中使用PyHook监听鼠标和键盘事件实例
PyHook是一个基于Python的“钩子”库,主要用于监听当前电脑上鼠标和键盘的事件。

这个库依赖于另一个Python库PyWin32,如同名字所显示的,PyWin32只能运行在Windows平台,所以PyHook也只能运行在Windows平台。

关于PyHook的使用,在它的官方主页上就有一个简单的教程,大体上来说,可以这样使用
?123456789101112131415161718192021222324252627282930 313233343536373839404142434445464748495051525354555 6
# -*- coding: utf-8 -*- # 3import pythoncom 4import pyHook 5def onMouseEvent(event): # 监听鼠标事件print "MessageName:",event.MessageName
print "Message:", event.Message print "Time:",
event.Time print "Window:", event.Window print "WindowName:", event.WindowName print "Position:", event.Position print "Wheel:", event.Wheel print "Injected:", event.Injected print"---" # 返回
True 以便将事件传给其它处理程序# 注意,这儿如果返回False ,则鼠标事件将被全部拦截# 也就是说你的鼠标看起来会僵在那儿,似乎失去响应了return True 23def onKeyboardEvent(event): # 监听键盘事件print "MessageName:", event.MessageName print "Message:", event.Message print "Time:", event.Time print "Window:", event.Window print "WindowName:", event.WindowName print "Ascii:", event.Ascii,
chr(event.Ascii) print "Key:", event.Key print "KeyID:", event.KeyID print "ScanCode:",
event.ScanCode print "Extended:", event.Extended
print "Injected:", event.Injected print "Alt", event.Alt print "Transition", event.Transition print "---" #
同鼠标事件监听函数的返回值return True 42def main(): # 创建一个“钩子”管理对象hm = pyHook.HookManager() # 监听所有键盘事件
hm.KeyDown = onKeyboardEvent # 设置键盘“钩子”hm.HookKeyboard() # 监听所有鼠标事件
hm.MouseAll = onMouseEvent # 设置鼠标“钩子”hm.HookMouse() # 进入循环,如不手动关闭,程序将一直处于监听状态pythoncom.PumpMessages()
56if __name__ == "__main__": main()。

相关文档
最新文档