问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在python中调用user32.dll的SetWindowsHookExA,第二个参数用什么数据类型?

发布网友 发布时间:2022-04-19 02:18

我来回答

1个回答

热心网友 时间:2022-04-19 03:48

不太记得了。 刚才查了一下。第二个是一个回调函数。我以前似乎用c++实现过。不过首先是拦载程序的系统调用,将程序做某个系统调用时,会自动调用到我们自己人的DLL。这个叫dll注入。

注入后就开始在windows上加载键盘与鼠标的hook。记着要调用next hook。

如果要用python实现。 可能道理是一样,如果你只是hook自己的程序没有问题,如果要hook别的程序还是需要dll注入。

你搜索一下“在python中控制鼠标”,这里有一段说明。或者是搜索“Windows hook with Python”
其中调用的callback函数是这样子的
def LowLevelMouseProc( nCode, wParam, lParam ):

还有这样的
def KeyboardProc(nCode, wParam, lParam):

我附一份在这里好了。
def run():

global KeyBdHook
global messages

KeyBdHook = HHook()
messages = []

start = time.time()

#Record keystrokes for 2 seconds.
while time.time() < (start + 2):
KeyBdHook.hook = SetWindowsHookEx(13, KeyboardProc,
GetMoleHandle(0), 0)
if KeyBdHook.hook == 0:
print 'ERROR: '+str(ctypes.windll.kernel32.GetLastError())
UnhookWindowsHookEx(KeyBdHook.hook)

print messages

def KeyboardProc(nCode, wParam, lParam):
"""http://msdn.microsoft.com/en-us/library/ms644985(v=vs.85).aspx"""

if nCode < 0:
return ctypes.windll.user32.GetNextHookEx(KeyBdHook.hook,
nCode, wParam, lParam)
else:
ctypes.windll.kernel32.RtlMoveMemory(ctypes.addressof(KeyBdHook.kStruct),
ctypes.c_void_p(lParam),
ctypes.sizeof(lParam))

messages.append(KeyBdHook.kStruct)
return ctypes.windll.user32.GetNextHookEx(KeyBdHook.hook,
nCode, wParam, lParam)

def SetWindowsHookEx(idHook, lpFn, hMod, dwThreadId):
WinFunc = ctypes.WINFUNCTYPE(c_ulong, c_ulong, c_ulong, c_ulong)
return ctypes.windll.user32.SetWindowsHookExA(idHook, WinFunc(lpFn), hMod, dwThreadId)

def GetMoleHandle(lpMoleName):
return ctypes.windll.kernel32.GetMoleHandleA(lpMoleName)

def UnhookWindowsHookEx(hHook):
return ctypes.windll.user32.UnhookWindowsHookEx(hHook)

class HHook():
def __init__(self):
self.hook = HHOOK
self.kStruct = KBLLHOOKSTRUCT()

class KBLLHOOKSTRUCT(Structure):
"""http://msdn.microsoft.com/en-us/library/ms644967(v=vs.85).aspx"""

_fields_ = [("vkCode", c_ulong),
("scanCode", c_ulong),
("flags", c_ulong),
("time", c_ulong),
("dwExtraInfo", POINTER(c_ulong))]
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...乱弹flash游戏广告(少儿不宜类)的病毒到底怎么杀?? 手机老是出现少儿不宜的软件 老是宣传 还让下载 恢复出厂设置也不 钢材商贸公司怎么取名好听 钢材贸易公司起名字大全免费 您好,我现在20多岁,有一个演员梦,我不怕吃苦,就是想演戏,可是我性格有... ...我想当演员,因为我的梦想也是做一名演员,我相信我自己能做好_百度知... 我是淘宝新手卖家,有供应商主动邀请我分销他的产品,这其中有什么不妥... 淘宝旺旺里有个阿里巴巴供应商说交900元帮我运营店铺,说能赚钱,有企业... 初中仁爱版英语总复习练习册多少钱 英语八年级下册复习(仁爱版本) 桐庐大奇山门票是多少? 从变压器到家里一直是两条线,我的三相电机怎么接?冰箱想接三相怎么接?自己接个地线接到地面吗? 请问冰柜几项电 冰箱一定要三项电吗? 380v的接冰箱行吗 四个冰柜五个空调需要用三相电吗 华硕主板上掉了一个很小很小的电阻(应该是电阻),该怎么办? 为什么导线的电阻很小? 为什么有的电阻很小,但阻值很大,而大一点的,却小了一些,真有意思 人身体的电阻比较小说明什么,有什么危害吗? 电阻大还是小 在一个电路中,电阻过大或过小,会发生短路么? 930903驾驶员安全气囊第一级电阻过小 电阻 谁小过谁 测量电阻,电阻很小,说明东西坏了是吗 电阻越小,产生的热量越大吗 请问汽车气囊电阻值太小怎么解决?谢谢 如果电器的电阻值很小,还是一样会短路么?反之如果导线电阻值大那就不会短路 电阻值很小(相对于电压表内阻),怎么理解这话 什么原因造成断电情况下火线与地线之间的电阻过小? 电阻值小了,会有什么影响? 1一10的艺术写法 p怎么写笔画 小写字母K p q 是几笔构成的 英语字母p是几笔完成的? p先写哪一笔 我电脑查百度延迟最少在255ms--400左右,这个正常吗?多少才算正常 电脑游戏延迟多少是正常的?延迟超过多少会影响游戏? 延迟超过多少会感觉到有点卡呢? 为什么家里电脑会有延迟? 电信20mbs宽带运行2台电脑LOL的延迟大概是多少 为什么电脑现在玩游戏有延迟? 电脑玩游戏有时候延迟时间到200怎么回事 95包青天为什么禁止播放? 关于包青天的电视剧有哪些? 求一部包青天剧集,不知道是哪部,小时候看的,现在想重新看 金超群包青天电视剧有哪些 我本人现在没在深圳,怎样可以注销公积金提取公积金业务? 有一个手机软件,可以自己做头像,而且里面可以输入文字,那个文字可以是彩色的。请问这是什么软件,据说 哪个文字编辑软件可以写彩色的字 小乌龟要怎样喂他吃东西,才好呢