Skip to content

Commit 0635b69

Browse files
committed
Distinguish emulated input and user input (Bug #110)
1 parent f9a346c commit 0635b69

4 files changed

Lines changed: 26 additions & 26 deletions

File tree

demo/demo_hook.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ static void logger(unsigned int level, const char *format, ...) {
5959
void dispatch_proc(uiohook_event * const event, void *user_data) {
6060
char buffer[256] = { 0 };
6161
size_t length = snprintf(buffer, sizeof(buffer),
62-
"id=%i,when=%" PRIu64 ",mask=0x%X",
63-
event->type, event->time, event->mask);
62+
"id=%i,when=%" PRIu64 ",mask=0x%X, reserved=0x%X",
63+
event->type, event->time, event->mask, event->reserved);
6464

6565
switch (event->type) {
6666
case EVENT_KEY_PRESSED:

src/darwin/dispatch_event.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ bool dispatch_key_press(uint64_t timestamp, CGEventRef event_ref) {
116116

117117
// Populate key pressed event.
118118
uio_event.time = timestamp;
119-
uio_event.reserved = 0x00;
119+
uio_event.reserved = CGEventGetIntegerValueField(event_ref, kCGEventSourceUnixProcessID) ? 0x02 : 0x00;
120120

121121
uio_event.type = EVENT_KEY_PRESSED;
122122
uio_event.mask = get_modifiers();
@@ -141,7 +141,7 @@ bool dispatch_key_press(uint64_t timestamp, CGEventRef event_ref) {
141141
for (unsigned int i = 0; i < length; i++) {
142142
// Populate key typed event.
143143
uio_event.time = timestamp;
144-
uio_event.reserved = 0x00;
144+
uio_event.reserved = CGEventGetIntegerValueField(event_ref, kCGEventSourceUnixProcessID) ? 0x02 : 0x00;
145145

146146
uio_event.type = EVENT_KEY_TYPED;
147147
uio_event.mask = get_modifiers();
@@ -171,7 +171,7 @@ bool dispatch_key_release(uint64_t timestamp, CGEventRef event_ref) {
171171

172172
// Populate key released event.
173173
uio_event.time = timestamp;
174-
uio_event.reserved = 0x00;
174+
uio_event.reserved = CGEventGetIntegerValueField(event_ref, kCGEventSourceUnixProcessID) ? 0x02 : 0x00;
175175

176176
uio_event.type = EVENT_KEY_RELEASED;
177177
uio_event.mask = get_modifiers();
@@ -469,7 +469,7 @@ bool dispatch_button_press(uint64_t timestamp, CGEventRef event_ref, uint16_t bu
469469

470470
// Populate mouse pressed event.
471471
uio_event.time = timestamp;
472-
uio_event.reserved = 0x00;
472+
uio_event.reserved = CGEventGetIntegerValueField(event_ref, kCGEventSourceUnixProcessID) ? 0x02 : 0x00;
473473

474474
uio_event.type = EVENT_MOUSE_PRESSED;
475475
uio_event.mask = get_modifiers();
@@ -498,7 +498,7 @@ bool dispatch_button_release(uint64_t timestamp, CGEventRef event_ref, uint16_t
498498

499499
// Populate mouse released event.
500500
uio_event.time = timestamp;
501-
uio_event.reserved = 0x00;
501+
uio_event.reserved = CGEventGetIntegerValueField(event_ref, kCGEventSourceUnixProcessID) ? 0x02 : 0x00;
502502

503503
uio_event.type = EVENT_MOUSE_RELEASED;
504504
uio_event.mask = get_modifiers();
@@ -521,7 +521,7 @@ bool dispatch_button_release(uint64_t timestamp, CGEventRef event_ref, uint16_t
521521
if (uio_event.reserved ^ 0x01 && !is_mouse_dragged()) {
522522
// Populate mouse clicked event.
523523
uio_event.time = timestamp;
524-
uio_event.reserved = 0x00;
524+
uio_event.reserved = CGEventGetIntegerValueField(event_ref, kCGEventSourceUnixProcessID) ? 0x02 : 0x00;
525525

526526
uio_event.type = EVENT_MOUSE_CLICKED;
527527
uio_event.mask = get_modifiers();
@@ -562,7 +562,7 @@ bool dispatch_mouse_move(uint64_t timestamp, CGEventRef event_ref) {
562562

563563
// Populate mouse motion event.
564564
uio_event.time = timestamp;
565-
uio_event.reserved = 0x00;
565+
uio_event.reserved = CGEventGetIntegerValueField(event_ref, kCGEventSourceUnixProcessID) ? 0x02 : 0x00;
566566

567567
if (is_mouse_dragged()) {
568568
uio_event.type = EVENT_MOUSE_DRAGGED;
@@ -603,7 +603,7 @@ bool dispatch_mouse_wheel(uint64_t timestamp, CGEventRef event_ref) {
603603

604604
// Populate mouse wheel event.
605605
uio_event.time = timestamp;
606-
uio_event.reserved = 0x00;
606+
uio_event.reserved = CGEventGetIntegerValueField(event_ref, kCGEventSourceUnixProcessID) ? 0x02 : 0x00;
607607

608608
uio_event.type = EVENT_MOUSE_WHEEL;
609609
uio_event.mask = get_modifiers();

src/windows/dispatch_event.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ bool dispatch_key_press(KBDLLHOOKSTRUCT *kbhook) {
150150

151151
// Populate key pressed event.
152152
uio_event.time = timestamp;
153-
uio_event.reserved = 0x00;
153+
uio_event.reserved = kbhook->flags & (LLKHF_INJECTED | LLKHF_LOWER_IL_INJECTED) ? 0x02 : 0x00;
154154

155155
uio_event.type = EVENT_KEY_PRESSED;
156156
uio_event.mask = get_modifiers();
@@ -177,7 +177,7 @@ bool dispatch_key_press(KBDLLHOOKSTRUCT *kbhook) {
177177
for (unsigned int i = 0; i < count; i++) {
178178
// Populate key typed event.
179179
uio_event.time = timestamp;
180-
uio_event.reserved = 0x00;
180+
uio_event.reserved = kbhook->flags & (LLKHF_INJECTED | LLKHF_LOWER_IL_INJECTED) ? 0x02 : 0x00;
181181

182182
uio_event.type = EVENT_KEY_TYPED;
183183
uio_event.mask = get_modifiers();
@@ -222,7 +222,7 @@ bool dispatch_key_release(KBDLLHOOKSTRUCT *kbhook) {
222222

223223
// Populate key pressed event.
224224
uio_event.time = timestamp;
225-
uio_event.reserved = 0x00;
225+
uio_event.reserved = kbhook->flags & (LLKHF_INJECTED | LLKHF_LOWER_IL_INJECTED) ? 0x02 : 0x00;
226226

227227
uio_event.type = EVENT_KEY_RELEASED;
228228
uio_event.mask = get_modifiers();
@@ -275,7 +275,7 @@ bool dispatch_button_press(MSLLHOOKSTRUCT *mshook, uint16_t button) {
275275

276276
// Populate mouse pressed event.
277277
uio_event.time = timestamp;
278-
uio_event.reserved = 0x00;
278+
uio_event.reserved = mshook->flags & (LLMHF_INJECTED | LLMHF_LOWER_IL_INJECTED) ? 0x02 : 0x00;
279279

280280
uio_event.type = EVENT_MOUSE_PRESSED;
281281
uio_event.mask = get_modifiers();
@@ -308,7 +308,7 @@ bool dispatch_button_release(MSLLHOOKSTRUCT *mshook, uint16_t button) {
308308

309309
// Populate mouse released event.
310310
uio_event.time = timestamp;
311-
uio_event.reserved = 0x00;
311+
uio_event.reserved = mshook->flags & (LLMHF_INJECTED | LLMHF_LOWER_IL_INJECTED) ? 0x02 : 0x00;
312312

313313
uio_event.type = EVENT_MOUSE_RELEASED;
314314
uio_event.mask = get_modifiers();
@@ -332,7 +332,7 @@ bool dispatch_button_release(MSLLHOOKSTRUCT *mshook, uint16_t button) {
332332
if (!consumed && last_click.x == mshook->pt.x && last_click.y == mshook->pt.y) {
333333
// Populate mouse clicked event.
334334
uio_event.time = timestamp;
335-
uio_event.reserved = 0x00;
335+
uio_event.reserved = mshook->flags & (LLMHF_INJECTED | LLMHF_LOWER_IL_INJECTED) ? 0x02 : 0x00;
336336

337337
uio_event.type = EVENT_MOUSE_CLICKED;
338338
uio_event.mask = get_modifiers();
@@ -380,7 +380,7 @@ bool dispatch_mouse_move(MSLLHOOKSTRUCT *mshook) {
380380

381381
// Populate mouse move event.
382382
uio_event.time = timestamp;
383-
uio_event.reserved = 0x00;
383+
uio_event.reserved = mshook->flags & (LLMHF_INJECTED | LLMHF_LOWER_IL_INJECTED) ? 0x02 : 0x00;
384384

385385
uio_event.mask = get_modifiers();
386386

@@ -427,7 +427,7 @@ bool dispatch_mouse_wheel(MSLLHOOKSTRUCT *mshook, uint8_t direction) {
427427

428428
// Populate mouse wheel event.
429429
uio_event.time = timestamp;
430-
uio_event.reserved = 0x00;
430+
uio_event.reserved = mshook->flags & (LLMHF_INJECTED | LLMHF_LOWER_IL_INJECTED) ? 0x02 : 0x00;
431431

432432
uio_event.type = EVENT_MOUSE_WHEEL;
433433
uio_event.mask = get_modifiers();

src/x11/dispatch_event.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ void dispatch_key_press(XKeyPressedEvent * const x_event) {
124124

125125
// Populate key pressed event.
126126
uio_event.time = x_event->serial;
127-
uio_event.reserved = 0x00;
127+
uio_event.reserved = x_event->send_event ? 0x02 : 0x00;
128128

129129
uio_event.type = EVENT_KEY_PRESSED;
130130
uio_event.mask = get_modifiers();
@@ -145,7 +145,7 @@ void dispatch_key_press(XKeyPressedEvent * const x_event) {
145145
for (unsigned int i = 0; i < count; i++) {
146146
// Populate key typed event.
147147
uio_event.time = x_event->serial;
148-
uio_event.reserved = 0x00;
148+
uio_event.reserved = x_event->send_event ? 0x02 : 0x00;
149149

150150
uio_event.type = EVENT_KEY_TYPED;
151151
uio_event.mask = get_modifiers();
@@ -189,7 +189,7 @@ void dispatch_key_release(XKeyReleasedEvent * const x_event) {
189189

190190
// Populate key released event.
191191
uio_event.time = x_event->serial;
192-
uio_event.reserved = 0x00;
192+
uio_event.reserved = x_event->send_event ? 0x02 : 0x00;
193193

194194
uio_event.type = EVENT_KEY_RELEASED;
195195
uio_event.mask = get_modifiers();
@@ -213,7 +213,7 @@ static void dispatch_mouse_wheel_rotated(XButtonEvent * const x_event) {
213213

214214
// Populate mouse wheel event.
215215
uio_event.time = x_event->serial;
216-
uio_event.reserved = 0x00;
216+
uio_event.reserved = x_event->send_event ? 0x02 : 0x00;
217217

218218
uio_event.type = EVENT_MOUSE_WHEEL;
219219
uio_event.mask = get_modifiers();
@@ -327,7 +327,7 @@ static void dispatch_mouse_button_pressed(XButtonPressedEvent * const x_event) {
327327

328328
// Populate mouse pressed event.
329329
uio_event.time = x_event->serial;
330-
uio_event.reserved = 0x00;
330+
uio_event.reserved = x_event->send_event ? 0x02 : 0x00;
331331

332332
uio_event.type = EVENT_MOUSE_PRESSED;
333333
uio_event.mask = get_modifiers();
@@ -416,7 +416,7 @@ static void dispatch_mouse_button_released(XButtonReleasedEvent * const x_event)
416416

417417
// Populate mouse released event.
418418
uio_event.time = x_event->serial;
419-
uio_event.reserved = 0x00;
419+
uio_event.reserved = x_event->send_event ? 0x02 : 0x00;
420420

421421
uio_event.type = EVENT_MOUSE_RELEASED;
422422
uio_event.mask = get_modifiers();
@@ -451,7 +451,7 @@ static void dispatch_mouse_button_released(XButtonReleasedEvent * const x_event)
451451
static void dispatch_mouse_button_clicked(XButtonEvent * const x_event) {
452452
// Populate mouse clicked event.
453453
uio_event.time = x_event->serial;
454-
uio_event.reserved = 0x00;
454+
uio_event.reserved = x_event->send_event ? 0x02 : 0x00;
455455

456456
uio_event.type = EVENT_MOUSE_CLICKED;
457457
uio_event.mask = get_modifiers();
@@ -518,7 +518,7 @@ void dispatch_mouse_move(XMotionEvent * const x_event) {
518518

519519
// Populate mouse move event.
520520
uio_event.time = x_event->serial;
521-
uio_event.reserved = 0x00;
521+
uio_event.reserved = x_event->send_event ? 0x02 : 0x00;
522522

523523
uio_event.mask = get_modifiers();
524524

0 commit comments

Comments
 (0)