最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python監(jiān)聽鍵盤和鼠標事件的示例代碼

 更新時間:2020年11月18日 11:35:58   作者:平凡的編程者  
這篇文章主要介紹了Python監(jiān)聽鍵盤和鼠標事件的示例代碼,幫助大家更好的理解和使用python,提高辦公效率,感興趣的朋友可以了解下

我們可以利用windows提供的api函數(shù)來實現(xiàn)對系統(tǒng)鍵盤事件和鼠標事件的監(jiān)聽,主要利用的是SetWindowsHookEx函數(shù),這個函數(shù)可以允許調(diào)用者傳入一個鉤子函數(shù)也叫回調(diào)函數(shù),當指定的事件發(fā)生時,你

傳入的函數(shù)就會被觸發(fā),有些事件是進程級的,有些事件是系統(tǒng)級的,這里我們用WH_KEYBOARD_LL來監(jiān)聽系統(tǒng)鍵盤事件,用WH_MOUSE_LL來監(jiān)聽鼠標事件,注意不是WH_KEYBOARD,使用WH_KEYBOARD是無法監(jiān)聽到外部

程序的事件的,這個可以在windows官方文檔里面看到說明,要用WH_KEYBOARD來監(jiān)聽系統(tǒng)鍵盤必須寫dll去實現(xiàn)。

因為用到了一些宏定義在win32con里面已經(jīng)有了,所以需要安裝一下pypiwin32,當然如果你將這些宏定義寫在自己的文件中,那么就不用安裝pypiwin32了。

安裝pypiwin32

pip install pypiwin32
# coding=utf-8
from ctypes import *
from ctypes import wintypes
import win32con

SetWindowsHookEx=windll.user32.SetWindowsHookExA
UnhookWindowsHookEx=windll.user32.UnhookWindowsHookEx
CallNextHookEx=windll.user32.CallNextHookEx
GetMessage=windll.user32.GetMessageA
GetModuleHandle=windll.kernel32.GetModuleHandleW
#保存鍵盤鉤子函數(shù)句柄
keyboard_hd = None
#保存鼠標鉤子函數(shù)句柄
mouse_hd = None


class 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):
  """
  函數(shù)功能:鍵盤鉤子函數(shù),當有按鍵按下時此函數(shù)被回調(diào)
  """
  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():
  """
  函數(shù)功能:啟動鍵盤監(jiān)聽
  """
  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():
  """
  函數(shù)功能:停止鍵盤監(jiān)聽
  """
  UnhookWindowsHookEx(keyboard_hd)


def mouse_pro(nCode, wParam, lParam):
  """
  函數(shù)功能:鼠標鉤子函數(shù),當有鼠標事件,此函數(shù)被回調(diào)
  """
  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():
  """
  函數(shù)功能:啟動鼠標監(jiān)聽
  """
  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():
  """
  函數(shù)功能:停止鼠標監(jiān)聽
  """
  UnhookWindowsHookEx(mouse_hd)

測試代碼:

import HookApi

if __name__== '__main__':
  HookApi.start_keyboard_hook()

運行效果

以上就是Python監(jiān)聽鍵盤和鼠標事件的示例代碼的詳細內(nèi)容,更多關(guān)于Python監(jiān)聽鍵盤和鼠標事件的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:

相關(guān)文章

  • Python類屬性的延遲計算

    Python類屬性的延遲計算

    這篇文章主要為大家詳細介紹了Python類屬性的延遲計算,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Python利用Selenium進行網(wǎng)頁自動化與動態(tài)內(nèi)容抓取操作

    Python利用Selenium進行網(wǎng)頁自動化與動態(tài)內(nèi)容抓取操作

    Selenium是一個自動化測試工具,它允許開發(fā)者模擬用戶的瀏覽器行為,執(zhí)行各種交互操作,下面就跟隨小編一起了解下如何使用Python和Selenium進行網(wǎng)頁自動化與動態(tài)內(nèi)容抓取吧
    2025-03-03
  • python中opencv K均值聚類的實現(xiàn)示例

    python中opencv K均值聚類的實現(xiàn)示例

    本文主要介紹了python中opencv K均值聚類的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Python單元測試工具doctest和unittest使用解析

    Python單元測試工具doctest和unittest使用解析

    這篇文章主要介紹了Python單元測試工具doctest和unittest使用解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • 淺談python爬蟲使用Selenium模擬瀏覽器行為

    淺談python爬蟲使用Selenium模擬瀏覽器行為

    這篇文章主要介紹了淺談python爬蟲使用Selenium模擬瀏覽器行為,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • Python網(wǎng)絡(luò)編程之ZeroMQ知識總結(jié)

    Python網(wǎng)絡(luò)編程之ZeroMQ知識總結(jié)

    這篇文章主要介紹了Python網(wǎng)絡(luò)編程之ZeroMQ知識總結(jié),文中有非常詳細的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Python運行錯誤異常代碼含義對照表

    Python運行錯誤異常代碼含義對照表

    這篇文章主要介紹了Python運行錯誤異常代碼含義對照表,需要的朋友可以參考下
    2021-04-04
  • Pandas div()函數(shù)的具體使用

    Pandas div()函數(shù)的具體使用

    本文主要介紹了Pandas div()函數(shù)的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 利用Python中SocketServer 實現(xiàn)客戶端與服務(wù)器間非阻塞通信

    利用Python中SocketServer 實現(xiàn)客戶端與服務(wù)器間非阻塞通信

    本文主要介紹了利用Python中SocketServer 實現(xiàn)客戶端與服務(wù)器間非阻塞通信示例代碼,具有很好的參考價值,需要的朋友一起來看下吧
    2016-12-12
  • 老生常談Python進階之裝飾器

    老生常談Python進階之裝飾器

    下面小編就為大家?guī)硪黄仙U凱ython進階之裝飾器。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05

最新評論

定州市| 普兰县| 嵊泗县| 盐池县| 平南县| 泽普县| 涿州市| 沁源县| 通渭县| 武功县| 古浪县| 余庆县| 安国市| 崇左市| 嘉兴市| 会东县| 青神县| 铜梁县| 禹城市| 阿拉善右旗| 崇文区| 台东市| 沾化县| 太白县| 东阿县| 金沙县| 清丰县| 黑山县| 温泉县| 高阳县| 万年县| 东光县| 靖安县| 双峰县| 高邑县| 上虞市| 高台县| 稷山县| 宁波市| 永仁县| 禄丰县|