-
Notifications
You must be signed in to change notification settings - Fork 0
/
OSCkeylogger.py
executable file
·75 lines (59 loc) · 2.05 KB
/
OSCkeylogger.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/usr/bin/env python
# vim: set fileencoding=UTF-8 :
"""keylogger that send events via OSC.
each keypress generates an event like:
/keylogger/window/<window>/<keyname>/key <bool:down>
"""
import sys
import hooklib, osc
class OSCkeylogger:
host="localhost"
port=6666
callback=None
def printevent(self, event):
print 'MessageName:',event.MessageName
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 '---'
return True
def sendevent(self, event, down):
bundle=osc.createBundle()
osc.appendToBundle(bundle, "/keylogger/window/"+str(event.Window)+"/key", [event.Key, down])
osc.appendToBundle(bundle, "/keylogger/WindowName/"+str(event.WindowName)+"/key", [event.Key, down])
osc.sendBundle(bundle, self.host, self.port)
if(self.callback):
self.callback(str(event.Window), str(event.Key))
def OnKeyboardEvent(self, event):
#self.printevent(event)
if("key down"==event.MessageName):
self.sendevent(event, 1)
elif("key up"==event.MessageName):
self.sendevent(event, 0)
return True
def __init__(self, host="localhost", port=6666):
osc.init()
self.host=host
self.port=int(port)
print "reporting to %s:%d" % (self.host, self.port)
self.hm=hooklib.HookManager()
self.hm.KeyDown = self.OnKeyboardEvent
self.hm.KeyUp = self.OnKeyboardEvent
self.hm.HookKeyboard()
def start(self, needPump=True):
self.hm.start(needPump)
def stop(self):
self.hm.cancel()
def setHostPort(self, host, port):
self.host=host
self.port=port
def setCallback(self, callback):
self.callback=callback
def main(script, port=6666, host="localhost"):
okl = OSCkeylogger(host, port)
okl.start()
if __name__ == '__main__':
main(*sys.argv)