Skip to content

Commit 5e42dae

Browse files
authored
Merge pull request #1 from JE-Chen/dev
Dev
2 parents eca07ab + 0178dff commit 5e42dae

File tree

13 files changed

+262
-57
lines changed

13 files changed

+262
-57
lines changed

.idea/workspace.xml

Lines changed: 71 additions & 51 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from je_auto_control.linux_with_x11.listener import *

je_auto_control/linux_with_x11/keyboard/x11_linux_keyboard_listener.py renamed to je_auto_control/linux_with_x11/listener/x11_linux_listener.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,15 @@
33
if sys.platform not in ["linux", "linux2"]:
44
raise Exception("should be only loaded on linux")
55

6+
import Xlib.threaded
7+
68
from Xlib.display import Display
79
from Xlib import X
810
from Xlib.ext import record
911
from Xlib.protocol import rq
1012

13+
from je_auto_control.linux_with_x11.mouse.x11_linux_mouse_control import position
14+
1115
from threading import Thread
1216

1317
# get current display
@@ -26,6 +30,7 @@ def __init__(self, default_daemon=True):
2630
self.setDaemon(default_daemon)
2731
self.still_listener = True
2832
self.event_keycode = 0
33+
self.event_position = 0, 0
2934

3035
# two times because press and release
3136
def check_is_press(self, keycode):
@@ -51,7 +56,10 @@ def run(self, reply):
5156
while len(data) and self.still_listener:
5257
event, data = rq.EventField(None).parse_binary_value(data, current_display.display, None, None)
5358
# run two times because press and release event
54-
self.event_keycode = event.detail
59+
if event.detail != 0:
60+
self.event_keycode = event.detail
61+
self.event_position = event.root_x, event.root_y
62+
5563
except Exception:
5664
raise Exception
5765

@@ -124,3 +132,7 @@ def check_key_is_press(keycode):
124132
"""
125133
return xwindows_listener.check_is_press(keycode)
126134

135+
136+
if __name__ == "__main__":
137+
while True:
138+
pass
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from je_auto_control.linux_with_x11.record import *

je_auto_control/osx/listener/__init__.py

Whitespace-only changes.

je_auto_control/osx/record/__init__.py

Whitespace-only changes.

je_auto_control/windows/keyboard/win32_keyboard_listener.py renamed to je_auto_control/windows/keyboard/win32_keyboard_check.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import ctypes
21
import sys
32

43
if sys.platform not in ["win32", "cygwin", "msys"]:
54
raise Exception("should be only loaded on windows")
65

6+
import ctypes
7+
78

89
def check_key_is_press(keycode):
910
if type(keycode) is int:
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from je_auto_control.windows.listener import *
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
from ctypes import *
2+
from ctypes.wintypes import MSG
3+
4+
user32 = windll.user32
5+
kernel32 = windll.kernel32
6+
7+
wm_keydown = 0x100
8+
9+
10+
class Win32Listener:
11+
12+
def __init__(self, hook_event_code_int):
13+
self.hooked = None
14+
self.hook_event_code_int = hook_event_code_int
15+
16+
def set_win32_hook(self, point):
17+
self.hooked = user32.SetWindowsHookExA(
18+
self.hook_event_code_int,
19+
point,
20+
0,
21+
0
22+
)
23+
if not self.hooked:
24+
return False
25+
return True
26+
27+
def remove_win32_hook_proc(self):
28+
if self.hooked is None:
29+
return
30+
user32.UnhookWindowsHookEx(self.hooked)
31+
self.hooked = None
32+
33+
def win32_hook_proc(self, code, w_param, l_param):
34+
if w_param is not wm_keydown:
35+
return user32.CallNextHookEx(self.hooked, code, w_param, l_param)
36+
# int to hex
37+
temp = hex(l_param[0] & 0xFFFFFFFF)
38+
print("Hooked Key: " + temp)
39+
print(int(temp, 16))
40+
return user32.CallNextHookEx(self.hooked, code, w_param, l_param)
41+
42+
def get_function_pointer(self, function):
43+
win_function = WINFUNCTYPE(c_int, c_int, c_int, POINTER(c_void_p))
44+
return win_function(function)
45+
46+
def start_listener(self):
47+
pointer = self.get_function_pointer(self.win32_hook_proc)
48+
if self.set_win32_hook(pointer):
49+
print("start listener")
50+
else:
51+
print("failed to start")
52+
message = MSG()
53+
user32.GetMessageA(byref(message), 0, 0, 0)
54+
55+
56+
if __name__ == "__main__":
57+
wh_keyboard_ll = 13
58+
win32_listener = Win32Listener(wh_keyboard_ll)
59+
win32_listener.start_listener()
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
from ctypes import *
2+
from ctypes.wintypes import MSG
3+
4+
user32 = windll.user32
5+
kernel32 = windll.kernel32
6+
7+
8+
class Win32Listener:
9+
10+
def __init__(self, hook_event_code_int):
11+
self.hooked = None
12+
self.hook_event_code_int = hook_event_code_int
13+
14+
def set_win32_hook(self, point):
15+
self.hooked = user32.SetWindowsHookExA(
16+
self.hook_event_code_int,
17+
point,
18+
0,
19+
0
20+
)
21+
if not self.hooked:
22+
return False
23+
return True
24+
25+
def remove_win32_hook_proc(self):
26+
if self.hooked is None:
27+
return
28+
user32.UnhookWindowsHookEx(self.hooked)
29+
self.hooked = None
30+
31+
def win32_hook_proc(self, code, w_param, l_param):
32+
# extend this class to rewrite this hook proc
33+
return user32.CallNextHookEx(self.hooked, code, w_param, l_param)
34+
35+
def get_function_pointer(self, function):
36+
win_function = WINFUNCTYPE(c_int, c_int, c_int, POINTER(c_void_p))
37+
return win_function(function)
38+
39+
def start_listener(self):
40+
pointer = self.get_function_pointer(self.win32_hook_proc)
41+
if self.set_win32_hook(pointer):
42+
print("start listener")
43+
else:
44+
print("failed to start")
45+
message = MSG()
46+
user32.GetMessageA(byref(message), 0, 0, 0)
47+
48+
49+
if __name__ == "__main__":
50+
wh_keyboard_ll = 13
51+
win32_listener = Win32Listener(wh_keyboard_ll)
52+
win32_listener.start_listener()

0 commit comments

Comments
 (0)