Я немного работал над этим и не приблизился к решению.
Я снова выкопал мою старую копию 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)
Любые ответы, или подталкивания в правильном направлении, или любые подсказки, указатели или тому подобное очень приветствуются!