<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 認識pyWinhook 關于鍵盤監聽相關的庫,網上的朋友一般會向大家推薦`pyHook`——pyHook是一個用來進行鍵盤、鼠標等層面事件監控的庫。這個庫的正常工作需要pythoncom等操作系統的API的支持。但是,pyHook很早停止了更新,我們可以使用`pyWinhook`來代替`pyHook`。使用`pyWinhook`后,你會發現,`pyWinhook`可以兼容大部分的`pyHook`代碼。 ### 安裝pyWinhook ``` pip install pywinhook ``` ### 鍵盤監聽案例 下面這個案例,用來監聽鍵盤按鈕的按下與釋放兩種事件(不能識別組合鍵)。 ``` import pyWinhook as pyHook import pythoncom # 記錄按鍵按下、釋放 class KeyBoardManager(): keyIsPressed = False def onKeyDown(self,event): if self.keyIsPressed: return True print(str(event.Key) + ' is pressed') self.keyIsPressed = True return True def onKeyUp(self,event): self.keyIsPressed = False print(str(event.Key) + ' is released') return True if __name__ == '__main__': mykbmanager = KeyBoardManager() hookmanager = pyHook.HookManager() hookmanager.KeyDown = mykbmanager.onKeyDown hookmanager.KeyUp = mykbmanager.onKeyUp hookmanager.HookKeyboard() pythoncom.PumpMessages() ``` 我們的目的是,通過這個類能夠修改其他類中的數據。所以,需要把這個類改造成一個可以被其他模塊引用的類: ``` import pyWinhook as pyHook import pythoncom # 記錄按鍵按下、釋放 class KeyBoardManager: keyIsPressed = False def __init__(self, task): self.task = task def onKeyDown(self,event): if self.keyIsPressed: return True print(str(event.Key) + ' is pressed') self.keyIsPressed = True return True def onKeyUp(self,event): self.keyIsPressed = False print(str(event.Key) + ' is released') return True def listen(self): hookmanager = pyHook.HookManager() hookmanager.KeyDown = self.onKeyDown hookmanager.KeyUp = self.onKeyUp hookmanager.HookKeyboard() pythoncom.PumpMessages() if __name__ == '__main__': mykbmanager = KeyBoardManager() mykbmanager.listen() ``` ## 異步函數調用 在實現異步調用之前我們先進行什么是同步調用和異步調用 * 同步:是指完成事務的邏輯,先執行第一個事務,如果阻塞了,會一直等待,直到這個事務完成,再執行第二個事務,順序執行 * 異步:是和同步相對的,異步是指在處理調用這個事務的之后,不會等待這個事務的處理結果,直接處理第二個事務去了,通過狀態、通知、回調來通知調用者處理結果 分析一下,下面的例子:? ``` 定義了一個裝飾器 async 和 A 、B 兩個function 函數 A 里面sleep 10s , 然后打印 a function 字符串? B 里面直接打印 b function 字符串? 我們順序調用兩個功能:? A()? B( )? ``` 由于函數A在睡的狀態,我們又不希望程序被阻塞在函數A的睡的狀態,所以我們采用異步執行,即在函數A睡的狀態,讓其他的任務執行 ~~~ from threading import Thread from time import sleep def lasync(f): def wrapper(*args, **kwargs): thr = Thread(target=f, args=args, kwargs=kwargs) thr.start() return wrapper @lasync def A(): sleep(10) print("函數A睡了十秒鐘。。。。。。") print("a function") def B(): print("b function") A() B() ~~~ 執行結果: ~~~ #b function #函數A睡了十秒鐘。。。。。。 #a function ~~~ ## 相關資料 pyHook相關文檔:https://sourceforge.net/p/pyhook/wiki/PyHook_Tutorial/#keyboard-hooks
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看