2010-05-05 9 views
5

Я работаю над этим совсем немного и не подхожу к решению.Модуль не найден

Я снова выкопал свою старую копию WindowsHookLib - он доступен с исходным кодом в http://www.codeproject.com/KB/DLL/WindowsHookLib.aspx. Эта библиотека позволяет использовать глобальные мыши Windows/Keyboard/Clipboard Hooks, что очень полезно.

Я пытаюсь использовать Mouse Hook здесь для Capture Mouse-Motion (я мог бы использовать таймер, который всегда проверяет Cursor.Position, но позже я планирую использовать дополнительные возможности WindowsHookLib).

код следующим образом:

MouseHook mh = new MouseHook(); 
mh.InstallHook(); 
mh.MouseMove += new EventHandler<WindowsHookLib.MouseEventArgs>(mh_MouseMove); 

Но при вызове InstallHook(), я получаю исключение: «Указанный модуль не может быть найден». Странный. Поиск, я обнаружил, что кто-то подумал, что это происходит из-за того, что DLL не находится в месте, включенном в переменную Windows PATH, и потому, что ее размещение в system32 не помогло, я отправил весь свиньи и перевел вещь на C# для включения непосредственно в мой проект (мне было любопытно, как это работает).

Однако ошибка была упорно настойчив, поэтому я вырыл немного на этом, и нашел код в библиотеке, которая отвечает: В InstallHook(), мы имеем

IntPtr hinstDLL = Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]); 
this._hMouseHook = UnsafeNativeMethods.SetWindowsHookEx(14, this._mouseProc, hinstDLL, 0); 
if (this._hMouseHook == IntPtr.Zero) 
{ 
     throw new MouseHookException(new Win32Exception(Marshal.GetLastWin32Error()).Message); 
} 

И это (после модификации и перекомпилировать) говорит мне, что я действительно получаю ошибку Windows «ERROR_MOD_NOT_FOUND»! Теперь, здесь я в тупике. Разве я не просто компилировал библиотеку Hook прямо в свой проект?

(UnsafeMethods.SetWindowsHookEx это просто метод DllImported от user32)

Любые ответы или Prods в правильном направлении, или какие-либо намеки, указатели или аналогичные очень ценятся!

ответ

1

У меня также возникает эта проблема. Я обнаружил, что это похоже на версию .Net, которую вы используете. .Net 4 вы получите эту ошибку, измените ее на .Net 3.5, и она работает.

+2

Я таргетинг .net 3.5, и это не работает для меня. –

11

Я обнаружил, что при переносе на .NET 4.0 мне пришлось отправить IntPtr.Zero для параметра hMod, когда процедура Hook была в локальной сборке. Здесь вы можете обратиться к документации msdn.

http://msdn.microsoft.com/en-us/library/ms644990%28VS.85%29.aspx

+0

Это сработало и для меня. И, подумав, я нашел этот вопрос случайно за несколько минут до тестирования моего кода. :) –