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()
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
from ctypes import *
2+
from ctypes.wintypes import MSG
3+
4+
from je_auto_control.windows.mouse.win32_ctype_mouse_control import position
5+
6+
user32 = windll.user32
7+
kernel32 = windll.kernel32
8+
9+
wm_mouse_key_code = [0x0201, 0x0204]
10+
11+
12+
class Win32Listener:
13+
14+
def __init__(self, hook_event_code_int):
15+
self.hooked = None
16+
self.hook_event_code_int = hook_event_code_int
17+
18+
def set_win32_hook(self, point):
19+
self.hooked = user32.SetWindowsHookExA(
20+
self.hook_event_code_int,
21+
point,
22+
0,
23+
0
24+
)
25+
if not self.hooked:
26+
return False
27+
return True
28+
29+
def remove_win32_hook_proc(self):
30+
if self.hooked is None:
31+
return
32+
user32.UnhookWindowsHookEx(self.hooked)
33+
self.hooked = None
34+
35+
def win32_hook_proc(self, code, w_param, l_param):
36+
if w_param not in wm_mouse_key_code:
37+
return user32.CallNextHookEx(self.hooked, code, w_param, l_param)
38+
print(position())
39+
return user32.CallNextHookEx(self.hooked, code, w_param, l_param)
40+
41+
def get_function_pointer(self, function):
42+
win_function = WINFUNCTYPE(c_int, c_int, c_int, POINTER(c_void_p))
43+
return win_function(function)
44+
45+
def start_listener(self):
46+
pointer = self.get_function_pointer(self.win32_hook_proc)
47+
if self.set_win32_hook(pointer):
48+
print("start listener")
49+
else:
50+
print("failed to start")
51+
message = MSG()
52+
user32.GetMessageA(byref(message), 0, 0, 0)
53+
54+
55+
if __name__ == "__main__":
56+
wh_mouse_ll = 14
57+
win32_listener = Win32Listener(wh_mouse_ll)
58+
win32_listener.start_listener()

je_auto_control/windows/record/__init__.py

Whitespace-only changes.

je_auto_control/wrapper/platform_wrapper.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@
170170
from je_auto_control.windows.core.utils.win32_vk import win32_keyY
171171
from je_auto_control.windows.core.utils.win32_vk import win32_keyZ
172172
from je_auto_control.windows.keyboard import win32_ctype_keyboard_control
173-
from je_auto_control.windows.keyboard import win32_keyboard_listener
173+
from je_auto_control.windows.keyboard import win32_keyboard_check
174174
from je_auto_control.windows.mouse import win32_ctype_mouse_control
175175
from je_auto_control.windows.mouse.win32_ctype_mouse_control import win32_mouse_left
176176
from je_auto_control.windows.mouse.win32_ctype_mouse_control import win32_mouse_middle
@@ -474,7 +474,7 @@
474474
from je_auto_control.linux_with_x11.mouse.x11_linux_mouse_control import x11_linux_scroll_direction_left
475475
from je_auto_control.linux_with_x11.mouse.x11_linux_mouse_control import x11_linux_scroll_direction_right
476476
from je_auto_control.linux_with_x11.keyboard import x11_linux_keyboard_control
477-
from je_auto_control.linux_with_x11.keyboard import x11_linux_keyboard_listener
477+
from je_auto_control.linux_with_x11.listener import x11_linux_listener
478478
from je_auto_control.linux_with_x11.mouse import x11_linux_mouse_control
479479
from je_auto_control.linux_with_x11.screen import x11_linux_screen
480480

@@ -693,7 +693,7 @@
693693
"mouse_x2": win32_mouse_x2
694694
}
695695
keyboard = win32_ctype_keyboard_control
696-
keyboard_listener = win32_keyboard_listener
696+
keyboard_listener = win32_keyboard_check
697697
mouse = win32_ctype_mouse_control
698698
screen = win32_screen
699699

@@ -1054,7 +1054,7 @@
10541054
"scroll_right": x11_linux_scroll_direction_right
10551055
}
10561056
keyboard = x11_linux_keyboard_control
1057-
keyboard_listener = x11_linux_keyboard_listener
1057+
keyboard_listener = x11_linux_listener
10581058
mouse = x11_linux_mouse_control
10591059
screen = x11_linux_screen
10601060
if None in [keys_table, mouse_table, special_table, keyboard, mouse, screen]:

0 commit comments

Comments
 (0)