Модуль не найден - PullRequest
       19

Модуль не найден

5 голосов
/ 05 мая 2010

Я немного работал над этим и не приблизился к решению.

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

Я пытаюсь использовать Mouse Hook для захвата движений мыши (я мог бы использовать таймер, который всегда опрашивает 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)

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

Ответы [ 2 ]

11 голосов
/ 18 ноября 2010

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

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

1 голос
/ 14 июня 2010

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

...