标签: pyhook

PyHook无法检测到某些窗口中按下的键

我运行了这个PyHook示例代码:

    import pythoncom, pyHook

def OnKeyboardEvent(event):
    print 'MessageName:',event.MessageName
    print 'Message:',event.Message
    print 'Time:',event.Time
    print 'Window:',event.Window
    print 'WindowName:',event.WindowName
    print 'Ascii:', event.Ascii, chr(event.Ascii)
    print 'Key:', event.Key
    print 'KeyID:', event.KeyID
    print 'ScanCode:', event.ScanCode
    print 'Extended:', event.Extended
    print 'Injected:', event.Injected
    print 'Alt', event.Alt
    print 'Transition', event.Transition
    print '---'

# return True to pass the event to other handlers
    return True

# create a hook manager
hm = pyHook.HookManager()
# watch for all mouse events
hm.KeyDown = OnKeyboardEvent
# set the hook
hm.HookKeyboard()
# wait forever …
Run Code Online (Sandbox Code Playgroud)

python pyhook

13
推荐指数
1
解决办法
749
查看次数

ImportError:没有名为pywintypes的模块

我正在使用pyHook,pythoncom和Pywin32模块,用Python制作一个小型键盘记录器.这是我的代码:

import pyHook, pythoncom, sys, logging

file_log = 'C:\\important\\log.txt'

def OnKeyboardEvent (event):
    logging.basicConfig(filename=file_log, level=logging.DEBUG, format='%(message)s')
    chr(event.Ascii)
    logging.log(10, chr(Event.Ascii))
    return True
hooks_manager=pyHook.HookManager()
hooks_manager.KeyDown = OnKeyboardEvent
hooks_manager.HookKeyboard()
pythoncom.PumpMessages()
Run Code Online (Sandbox Code Playgroud)

运行时,它会返回以下错误消息:

 File "C:\Python27\lib\site-packages\pythoncom.py", line 2, in <module>
    import pywintypes
ImportError: No module named pywintypes
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?

python pywin32 keylogger pythoncom pyhook

11
推荐指数
3
解决办法
3万
查看次数

当钩子连接到某些应用程序时,pythoncom在KeyDown上崩溃

我写了这段代码来观察keydown动作的事件.问题似乎是,当运行此脚本时,某些程序将使此程序崩溃,并吐出此错误消息:

TypeError: KeyboardSwitch() missing 8 required positional arguments: 'msg', 'vk_
code', 'scan_code', 'ascii', 'flags', 'time', 'hwnd', and 'win_name'
Run Code Online (Sandbox Code Playgroud)

一些被发现崩溃的程序是:Skype,Sublime Text 2

在调试它的几次试验之后,问题似乎发生在最后一行,但我似乎无法缩小范围.我也不明白编译器返回的KeyboardSwitch()的含义......

我还发现程序会交替返回此错误消息

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\pyHook\HookManager.py", line 351, in KeyboardSwitch
    return func(event)
  File "observe.py", line 6, in OnKeyboardEvent
    print ('MessageName:',event.MessageName)
TypeError: an integer is required (got type NoneType)
Run Code Online (Sandbox Code Playgroud)

原因是什么以及如何解决这个问题,特别是因为它只出现在按下的两个键中

import pyHook, pythoncom

def OnKeyboardEvent(event):
# Source: http://code.activestate.com/recipes/553270-using-pyhook-to-block-windows-keys/ 
    print ('MessageName:',event.MessageName)
    print ('Message:',event.Message)
    print ('Time:',event.Time)
    print ('Window:',event.Window)
    print ('WindowName:',event.WindowName)
    print ('Ascii:', event.Ascii, chr(event.Ascii))
    print ('Key:', event.Key)
    print ('KeyID:', …
Run Code Online (Sandbox Code Playgroud)

python python-3.x pythoncom pyhook

11
推荐指数
2
解决办法
5859
查看次数

time.sleep需要整数?

我正在编写一个宏,当我按一个键时会点击屏幕上的某些点.

我第一次按一个键,一切正常.
但是,任何其他按键都会导致错误:

    time.sleep(0.1)
TypeError: an integer is required
Run Code Online (Sandbox Code Playgroud)

这是代码:

import win32api
import win32con
import time
import pythoncom
import pyHook
import os

def Click(x,y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)

def DeleteRun(event):
    Click(1250, 741)
    time.sleep(0.1)
    Click(649,261)
    time.sleep(0.1)
    Click(651, 348)
    time.sleep(0.1)
    Click(800, 442)
    time.sleep(0.1)
    Click(865, 612)


Click(20,20)
KeyGrabber = pyHook.HookManager()
KeyGrabber.KeyDown = DeleteRun
KeyGrabber.HookKeyboard()
pythoncom.PumpMessages()
Run Code Online (Sandbox Code Playgroud)

这似乎是第一次DeleteRun运行函数pyHook,time.sleep()接受浮点数.
在任何后续函数调用中,它似乎只接受整数.

是什么造成的?
我不能等待5秒钟的鼠标安排!它应该节省时间!

眼镜:

  • python 2.7.2
  • Windows 7(32)

python time integer sleep pyhook

8
推荐指数
1
解决办法
2502
查看次数

如何使用pyhook而不是pumpMessages()来使用自己的循环?

我正在尝试使用pyhooks来检测屏幕上任何地方的鼠标点击.问题是我只能使用PumpMessages().我希望它在我构建的while循环中运行.有没有办法实现这个/为什么它需要pumpMessages?

def onclick(event):
    print 'Mouse click!'
    return True


hm = pyHook.HookManager()

hm.MouseLeftDown = onclick

hm.HookMouse()
pythoncom.PumpMessages()
hm.UnhookMouse()
Run Code Online (Sandbox Code Playgroud)

以上是我可以让它运行的唯一方法.

我正在努力完成这样的事情:

sTime = time.time()

def onclick(event):
    global sTime
    print 'Time between clicks equals: %i' % time.time() - stime
    sTime = time.time()
    return True

hm.MouseLeftDown = OnClick

while True:

    hm.HookMouse()
Run Code Online (Sandbox Code Playgroud)

编辑:我不是一个聪明人.场景中不需要while循环.

叹..

python pyhook

7
推荐指数
2
解决办法
6647
查看次数

python 3.5上的PyHook

我正在尝试在python上编写一个基本的键盘记录程序.我需要安装pywin32和pyhook模块.我已经设法安装了pywin32,但似乎无法工作.我已经阅读了它可能让它在更高版本的python上运行,但似乎无法弄明白.我已经尝试过.exe和.whl安装.在cmd中使用whl会出现不支持滚轮的错误.有没有人有解决方案在python 3.5上安装pyhook.谢谢

python module pyhook

6
推荐指数
1
解决办法
4万
查看次数

Python win32api.mouse_event 类型错误

import sys
import win32api, win32con
import pyHook
import pythoncom

def CursorLeft():
    win32api.mouse_event(win32con.MOUSEEVENTF_MOVE, -1, 0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0)

def Quit():
    print "Quitting"
    sys.exit()

# create a keyboard hook
def OnKeyboardEvent(event):
    print 'MessageName:', event.MessageName
    print 'Key:', event.Key
    if event.Key in ['Numpad2']:
        CursorLeft()
    elif event.Key in ['End']:
        Quit()
    return True

def OnMouseEvent(event):
    print 'Position:', event.Position
    return True

hm = pyHook.HookManager()
hm.MouseAll = OnMouseEvent
hm.HookMouse()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()
pythoncom.PumpMessages()
Run Code Online (Sandbox Code Playgroud)

函数 CursorLeft 每隔一段时间都可以正常工作。如果没有任何负数作为参数,它也能正常工作。我完全不知道为什么会这样!

第一次打电话,很好。

第二个电话,

类型错误:需要一个整数

第三次电话,好的。

第四次通话,

类型错误:需要一个整数。

等等等等。





解决了 …

python winapi pythoncom pyhook

5
推荐指数
1
解决办法
3212
查看次数

如何避免 TypeError: MouseSwitch() 缺少 8 个必需的位置参数:“msg”、“x”、“y”、“data”、“time”、“hwnd”和“window_name”

试图挂钩鼠标事件,但在我的早期测试中,程序在大约 30 秒后停止响应[编辑:见帖子底部] 并给出此错误

类型错误:MouseSwitch() 缺少 8 个必需的位置参数:“msg”、“x”、“y”、“data”、“time”、“hwnd”和“window_name”

这是代码。它应该只打印所有事件信息,直到它崩溃为止。

import pythoncom
import pyHook

def OnMouseEvent(event):
    print ('MessageName:',event.MessageName)
    print ('Message:',event.Message)
    print ('Time:',event.Time)
    print ('Window:',event.Window)
    print ('WindowName:',event.WindowName)
    print ('Position:',event.Position)
    print ('Wheel:',event.Wheel)
    print ('Injected:',event.Injected)
    print ('---')
    return True

hm = pyHook.HookManager()
hm.MouseAll = OnMouseEvent
hm.HookMouse()
pythoncom.PumpMessages()
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。

更新! 进行了一些进一步的测试后,崩溃似乎只发生在鼠标悬停在某些窗口(例如 Skype 联系人列表)上时。如果我将鼠标悬停在 google chrome 窗口的标题上,我也会收到相同的错误消息(但没有崩溃)。

python typeerror pyhook

5
推荐指数
1
解决办法
4374
查看次数

导入pyHook失败

我已经为我的Windows 64位安装了pyHook.安装程序已将它安装在C:\ Python27\Lib\site-packages目录中我无法导入pyhook(我可以看到win32命名文件夹,因此它是它的文件夹)在我的代码中是什么我该怎么办这里是翻译输出

>>> import pyHook

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    import pyHook
ImportError: No module named pyHook
>>> import pyhook

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    import pyhook
ImportError: No module named pyhook
>>>  
Run Code Online (Sandbox Code Playgroud)

python-2.7 pyhook

5
推荐指数
1
解决办法
1万
查看次数

像OS X上的pyHook之类的东西

我实际上正在使用pyHook,但我也想为OS X编写程序.如果有人知道这样的模块......我已经在网上看了一段时间,但没有什么真正相关的.

- >想法是能够在python应用程序之外记录击键.我的应用程序是社区统计信息构建器,因此从OS X获取统计信息也很棒.

提前致谢 ;)

编辑:PyHook:在python应用程序之外记录击键和其他内容 http://sourceforge.net/apps/mediawiki/pyhook/index.php?title=PyHook_Tutorial http://pyhook.sourceforge.net/doc_1.5.0/ http: //sourceforge.net/apps/mediawiki/pyhook/index.php?title=Main_Page

python macos keylogger pyhook

4
推荐指数
1
解决办法
5837
查看次数

pyHook for Python 3.3

我正在使用Python编写一个简单的键盘记录器.我希望使用pyHook来捕获键盘事件.我找不到任何已安装python 3.3的pyHook包.是否有任何其他模块的python 3.3提供类似的功能?

python keylogger pyhook

4
推荐指数
1
解决办法
1万
查看次数

我想阻止pythoncom工作

我正在编写一个关于pyHook的键盘记录代码.以下代码是示例:

import pythoncom as pc, pyHook as ph

def KeyboardHook(event):
    print chr(event.Ascii)
    return True

hm = ph.HookManager()
hm.KeyDown = KeyboardHook
hm.HookKeyboard()
pc.PumpMessages()
Run Code Online (Sandbox Code Playgroud)

我想稍后停止pythoncom的PumpMessages方法(例如5秒).但我找不到任何答案.

我用的是:Windows 7,Python2.7

谢谢你的回答.

python python-2.7 pythoncom pyhook

3
推荐指数
1
解决办法
3269
查看次数