Skip to content

Commit badb9b5

Browse files
Disable KeyTyped events from SharpHook
GH-107
1 parent f186041 commit badb9b5

File tree

2 files changed

+44
-13
lines changed

2 files changed

+44
-13
lines changed

src/KeyboardSwitch.Core/Services/Hook/SharpHookService.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,15 @@ internal sealed class SharpHookService : DisposableService, IKeyboardHookService
3030
public SharpHookService(
3131
IReactiveGlobalHook hook,
3232
IScheduler scheduler,
33+
IGlobalHookProvider globalHookProvider,
3334
IAccessibilityProvider accessibilityProvider,
3435
ILogger<SharpHookService> logger)
3536
{
3637
this.hook = hook;
3738
this.scheduler = scheduler;
3839
this.logger = logger;
3940

41+
globalHookProvider.KeyTypedEnabled = false;
4042
accessibilityProvider.AxPollFrequency = AxPollFrequencySeconds;
4143

4244
this.hook.HookEnabled.Subscribe(e => this.logger.LogInformation("Created a global keyboard hook"));

test/KeyboardSwitch.Tests/Services/SharpHookServiceTests.cs

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,10 @@ public void ModifiersOnce(List<SingleModifier> modifiers, WaitTime waitTime)
3333

3434
using var hook = new TestGlobalHook();
3535
var scheduler = new TestScheduler();
36+
var provider = new TestProvider();
3637

3738
using var service = new SharpHookService(
38-
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, new TestProvider(), this.logger);
39+
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, provider, provider, this.logger);
3940

4041
var observer = scheduler.CreateObserver<EventMask>();
4142
service.HotKeyPressed.Subscribe(observer);
@@ -64,9 +65,10 @@ public void ModifiersMultiple(List<SingleModifier> modifiers, PressCount pressCo
6465

6566
using var hook = new TestGlobalHook();
6667
var scheduler = new TestScheduler();
68+
var provider = new TestProvider();
6769

6870
using var service = new SharpHookService(
69-
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, new TestProvider(), this.logger);
71+
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, provider, provider, this.logger);
7072

7173
var observer = scheduler.CreateObserver<EventMask>();
7274
service.HotKeyPressed.Subscribe(observer);
@@ -100,9 +102,10 @@ public void ModifiersMultipleTooLong(List<SingleModifier> modifiers, PressCount
100102

101103
using var hook = new TestGlobalHook();
102104
var scheduler = new TestScheduler();
105+
var provider = new TestProvider();
103106

104107
using var service = new SharpHookService(
105-
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, new TestProvider(), this.logger);
108+
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, provider, provider, this.logger);
106109

107110
var observer = scheduler.CreateObserver<EventMask>();
108111
service.HotKeyPressed.Subscribe(observer);
@@ -136,9 +139,10 @@ public void OtherKeys(List<SingleModifier> modifiers, NonModifierKey key, WaitTi
136139

137140
using var hook = new TestGlobalHook();
138141
var scheduler = new TestScheduler();
142+
var provider = new TestProvider();
139143

140144
using var service = new SharpHookService(
141-
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, new TestProvider(), this.logger);
145+
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, provider, provider, this.logger);
142146

143147
var observer = scheduler.CreateObserver<EventMask>();
144148
service.HotKeyPressed.Subscribe(observer);
@@ -164,9 +168,10 @@ public void OnlyKeyUp(List<SingleModifier> modifiers, WaitTime waitTime)
164168

165169
using var hook = new TestGlobalHook();
166170
var scheduler = new TestScheduler();
171+
var provider = new TestProvider();
167172

168173
using var service = new SharpHookService(
169-
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, new TestProvider(), this.logger);
174+
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, provider, provider, this.logger);
170175

171176
var observer = scheduler.CreateObserver<EventMask>();
172177
service.HotKeyPressed.Subscribe(observer);
@@ -196,9 +201,10 @@ public void KeyDownTooLong(List<SingleModifier> modifiers, WaitTime waitTime)
196201

197202
using var hook = new TestGlobalHook();
198203
var scheduler = new TestScheduler();
204+
var provider = new TestProvider();
199205

200206
using var service = new SharpHookService(
201-
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, new TestProvider(), this.logger);
207+
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, provider, provider, this.logger);
202208

203209
var observer = scheduler.CreateObserver<EventMask>();
204210
service.HotKeyPressed.Subscribe(observer);
@@ -227,9 +233,10 @@ public void KeyDownRepeated(List<SingleModifier> modifiers, WaitTime waitTime)
227233

228234
using var hook = new TestGlobalHook();
229235
var scheduler = new TestScheduler();
236+
var provider = new TestProvider();
230237

231238
using var service = new SharpHookService(
232-
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, new TestProvider(), this.logger);
239+
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, provider, provider, this.logger);
233240

234241
var observer = scheduler.CreateObserver<EventMask>();
235242
service.HotKeyPressed.Subscribe(observer);
@@ -261,9 +268,10 @@ public void UnregisterModifiers(List<SingleModifier> modifiers, WaitTime waitTim
261268

262269
using var hook = new TestGlobalHook();
263270
var scheduler = new TestScheduler();
271+
var provider = new TestProvider();
264272

265273
using var service = new SharpHookService(
266-
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, new TestProvider(), this.logger);
274+
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, provider, provider, this.logger);
267275

268276
var observer = scheduler.CreateObserver<EventMask>();
269277
service.HotKeyPressed.Subscribe(observer);
@@ -290,9 +298,10 @@ public void DisposeComplete()
290298

291299
using var hook = new TestGlobalHook();
292300
var scheduler = new TestScheduler();
301+
var provider = new TestProvider();
293302

294303
var service = new SharpHookService(
295-
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, new TestProvider(), this.logger);
304+
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, provider, provider, this.logger);
296305

297306
var observer = scheduler.CreateObserver<EventMask>();
298307
service.HotKeyPressed.Subscribe(observer);
@@ -314,9 +323,10 @@ public void Cancel()
314323

315324
using var hook = new TestGlobalHook();
316325
var scheduler = new TestScheduler();
326+
var provider = new TestProvider();
317327

318328
using var service = new SharpHookService(
319-
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, new TestProvider(), this.logger);
329+
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, provider, provider, this.logger);
320330

321331
// Act
322332

@@ -331,23 +341,42 @@ public void Cancel()
331341
Assert.False(hook.IsRunning);
332342
}
333343

344+
[Fact(DisplayName = "SharpHookService should disable KeyTyped events")]
345+
public void KeyTypedEvents()
346+
{
347+
// Arrange
348+
349+
using var hook = new TestGlobalHook();
350+
var scheduler = new TestScheduler();
351+
var provider = new TestProvider();
352+
353+
// Act
354+
355+
using var service = new SharpHookService(
356+
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, provider, provider, this.logger);
357+
358+
// Assert
359+
360+
Assert.False(((IGlobalHookProvider)provider).KeyTypedEnabled);
361+
}
362+
334363
[Fact(DisplayName = "SharpHookService should set the poll frequency for the Accessibility API")]
335364
public void AccessibilityProvider()
336365
{
337366
// Arrange
338367

339368
using var hook = new TestGlobalHook();
340369
var scheduler = new TestScheduler();
341-
IAccessibilityProvider provider = new TestProvider();
370+
var provider = new TestProvider();
342371

343372
// Act
344373

345374
using var service = new SharpHookService(
346-
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, provider, this.logger);
375+
new ReactiveGlobalHookAdapter(hook, scheduler), scheduler, provider, provider, this.logger);
347376

348377
// Assert
349378

350-
Assert.Equal(SharpHookService.AxPollFrequencySeconds, provider.AxPollFrequency);
379+
Assert.Equal(SharpHookService.AxPollFrequencySeconds, ((IAccessibilityProvider)provider).AxPollFrequency);
351380
}
352381

353382
private void SimulateKeyEvents(

0 commit comments

Comments
 (0)