Я использую глобальный обработчик событий мыши, который был первоначально размещен здесь .
Код, опубликованный в оригинальном вопросе, работает отлично, за исключением того, что по какой-то причине, когда я его использую, онсрабатывает только один раз.(После этого он никогда не запускается снова.)
// Subscribe to Event, (placed this in constructor)
MouseHook.Start();
MouseHook.MouseAction += new EventHandler(Event);
// ...
// This function only gets triggered once
private void Event(object sender, EventArgs e)
{
// Do something
}
Но, проведя некоторые эксперименты, я все заработал, и теперь он срабатывает при каждом щелчке мыши (а не только по первому).
Я изменил функцию с этого:
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && MouseMessages.WM_LBUTTONDOWN == (MouseMessages)wParam)
{
MSLLHOOKSTRUCT hookStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));
MouseAction(null,new EventArgs());
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
На это:
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && MouseMessages.WM_LBUTTONDOWN == (MouseMessages)wParam)
{
MSLLHOOKSTRUCT hookStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));
MouseAction(null,new EventArgs());
// Added these two lines, works perfectly now
stop();
Start();
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
Но я понятия не имею, почему 1) Мне нужно было добавить эти дополнительные строки длямой код, и 2) похоже, что ни у кого больше нет этой проблемы.
Может кто-нибудь объяснить:
- Почему я в первую очередь испытываю эту проблему, и
- Допустим ли мой «обходной путь», показанный выше?