Я использую следующий код для получения сообщений мыши в текущем процессе.
using (Process curProcess = Process.GetCurrentProcess())
using (ProcessModule curModule = curProcess.MainModule)
{
return SetWindowsHookEx(WH_MOUSE_LL, proc, GetModuleHandle(curModule.ModuleName), 0);
}
По какой-то причине, когда этот код запускается, мышь замедляется на несколько секунд, а затем возвращается в нормальное состояние.
Есть идеи?
Спасибо.
ИЗМЕНИТЬ – метод ловушки
private static IntPtr mouseEvent(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && MouseMessages.WM_LBUTTONDOWN == (MouseMessages)wParam)
{
MSLLHOOKSTRUCT hookStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));
LastLeftClick = new ClickInfo { Time = DateTime.Now, X = hookStruct.pt.x, Y = hookStruct.pt.y };
}
return CallNextHookEx(hookID, nCode, wParam, lParam);
}
public class ClickInfo
{
public int X { get; set; }
public int Y { get; set; }
public DateTime Time { get; set; }
}
WH_MOUSE_LL
требует, чтобы Windows перенаправляла все события мыши в ваше приложение, ждала их обработки, а затем продолжала работу в обычном режиме. Сообщения от мыши — особенно если у вас мышь с высоким разрешением — приходят быстро и яростно: они быстро накапливаются, если их не отправить быстро. И при первом вызове вашего обратного вызова он, вероятно, не будет отвечать быстро: ваш процесс должен сначала выполнить свою собственную обработку, а затем среда выполнения должна выполнить JIT ваш обратный вызов и вызов P/Invoke для CallNextHookEx(). - person Shog9   schedule 21.07.2010Application.Run()
(чтобы запустить цикл сообщений), и моя мышь тоже отставала из-за этого. Не знаю, почему именно так, но я слишком ленив, чтобы понять это сейчас, когда это больше не проблема. :D - person user2347921   schedule 14.01.2021