5
5
using System . Linq ;
6
6
using System . Runtime . InteropServices ;
7
7
using System . Windows . Forms ;
8
+ using System . Windows . Input ;
8
9
using Microsoft . Vbe . Interop ;
9
10
using Rubberduck . Common . Hotkeys ;
10
11
using Rubberduck . Common . WinAPI ;
11
12
using Rubberduck . Settings ;
12
13
using Rubberduck . UI . Command ;
14
+ using Rubberduck . UI . Command . Refactorings ;
13
15
using NLog ;
16
+ using Rubberduck . UI ;
14
17
15
18
namespace Rubberduck . Common
16
19
{
17
20
public class RubberduckHooks : IRubberduckHooks
18
21
{
19
22
private readonly VBE _vbe ;
20
23
private readonly IntPtr _mainWindowHandle ;
24
+ private readonly IntPtr _oldWndPointer ;
21
25
private readonly User32 . WndProc _oldWndProc ;
26
+ private User32 . WndProc _newWndProc ;
22
27
private RawInput _rawinput ;
28
+ private IRawDevice _kb ;
29
+ private IRawDevice _mouse ;
23
30
private readonly IGeneralConfigService _config ;
24
31
private readonly IEnumerable < CommandBase > _commands ;
25
32
private readonly IList < IAttachable > _hooks = new List < IAttachable > ( ) ;
@@ -30,8 +37,9 @@ public RubberduckHooks(VBE vbe, IGeneralConfigService config, IEnumerable<Comman
30
37
_vbe = vbe ;
31
38
_mainWindowHandle = ( IntPtr ) vbe . MainWindow . HWnd ;
32
39
_oldWndProc = WindowProc ;
33
- var oldWndPointer = User32 . SetWindowLong ( _mainWindowHandle , ( int ) WindowLongFlags . GWL_WNDPROC , WindowProc ) ;
34
- _oldWndProc = ( User32 . WndProc ) Marshal . GetDelegateForFunctionPointer ( oldWndPointer , typeof ( User32 . WndProc ) ) ;
40
+ _newWndProc = WindowProc ;
41
+ _oldWndPointer = User32 . SetWindowLong ( _mainWindowHandle , ( int ) WindowLongFlags . GWL_WNDPROC , _newWndProc ) ;
42
+ _oldWndProc = ( User32 . WndProc ) Marshal . GetDelegateForFunctionPointer ( _oldWndPointer , typeof ( User32 . WndProc ) ) ;
35
43
36
44
_commands = commands ;
37
45
_config = config ;
@@ -55,10 +63,12 @@ public void HookHotkeys()
55
63
var kb = ( RawKeyboard ) _rawinput . CreateKeyboard ( ) ;
56
64
_rawinput . AddDevice ( kb ) ;
57
65
kb . RawKeyInputReceived += Keyboard_RawKeyboardInputReceived ;
66
+ _kb = kb ;
58
67
59
68
var mouse = ( RawMouse ) _rawinput . CreateMouse ( ) ;
60
69
_rawinput . AddDevice ( mouse ) ;
61
70
mouse . RawMouseInputReceived += Mouse_RawMouseInputReceived ;
71
+ _mouse = mouse ;
62
72
63
73
foreach ( var hotkey in settings . Settings . Where ( hotkey => hotkey . IsEnabled ) )
64
74
{
@@ -165,7 +175,7 @@ public void Detach()
165
175
private void hook_MessageReceived ( object sender , HookEventArgs e )
166
176
{
167
177
var hotkey = sender as IHotkey ;
168
- if ( hotkey != null && hotkey . Command . CanExecute ( null ) )
178
+ if ( hotkey != null )
169
179
{
170
180
hotkey . Command . Execute ( null ) ;
171
181
return ;
0 commit comments