重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
right被定义成常量autopy.mouse.toggle(button=autopy.mouse.Button.RIGHT,down=True)或者
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了邯郸免费建站欢迎大家使用!
autopy.mouse.toggle(autopy.mouse.Button.RIGHT,True)即可
不太记得了。 刚才查了一下。第二个是一个回调函数。我以前似乎用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,
GetModuleHandle(0), 0)
if KeyBdHook.hook == 0:
print 'ERROR: '+str(ctypes.windll.kernel32.GetLastError())
UnhookWindowsHookEx(KeyBdHook.hook)
print messages
def KeyboardProc(nCode, wParam, lParam):
""""""
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 GetModuleHandle(lpModuleName):
return ctypes.windll.kernel32.GetModuleHandleA(lpModuleName)
def UnhookWindowsHookEx(hHook):
return ctypes.windll.user32.UnhookWindowsHookEx(hHook)
class HHook():
def __init__(self):
self.hook = HHOOK
self.kStruct = KBLLHOOKSTRUCT()
class KBLLHOOKSTRUCT(Structure):
""""""
_fields_ = [("vkCode", c_ulong),
("scanCode", c_ulong),
("flags", c_ulong),
("time", c_ulong),
("dwExtraInfo", POINTER(c_ulong))]
python有鼠标事件函数,不知道你在什么上做,如果用opencv就是onMouse这个回调函数,里面有点击左键这个事件,获得该坐标点的位置。然后将图片转换为数组,找到对应位置,获取第三维度上的值,就是该点的(RGB通道的)颜色值。方法很多,思路都是大同小异,首先找到该坐标点位置,再在对应图片数组里获取它的像素点值。
def BlockInput(bEnable):
""" bEnable:
True: Disable mouse keyboard
False: Enable mouse keyboard
"""
import pyHook
def uDisable(event): return False
def uEnable(event): return True
hm = pyHook.HookManager()
if bEnable == True:
hm.MouseAll = hm.KeyAll = uDisable
else:
hm.MouseAll = hm.KeyAll = uEnable
hm.HookMouse()
hm.HookKeyboard()
这里用Python的 pyHook 模块,写了个类似AutoIt中的BlockInput函数。
pyHook是个扩展模块,需要另外下载的,具体用法可以参考 pyHook 模块中的 example.py 。