현재 프로세스에서 마우스 메시지를 가져 오기 위해 다음 코드를 사용하고 있습니다.WH_MOUSE_LL이있는 SetWindowsHookEx가 마우스를 몇 초 동안 속도를 늦춤니다.
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; }
}
릴리스 모드에서도 이러한 현상이 발생합니까? –
@Patrick Klug : 릴리스 모드에서도 가능합니다. –
'WH_MOUSE_LL'은 Windows가 모든 마우스 이벤트를 응용 프로그램에 전달하고 처리 할 때까지 기다린 다음 정상적으로 계속해야합니다. 마우스 메시지 - 특히 고해상도 마우스를 가지고있는 경우 - 빠르게 빠르게 분노합니다. * 신속하게 파견되지 않으면 쌓일 시간이 오래 걸리지 않습니다. 그리고 콜백이 처음 호출 될 때, 그것은 아마도 신속하게 응답하지 않을 것입니다 : 당신의 프로세스는 먼저 자신의 처리를 수행해야하고 런타임은 콜백과 CallNextHookEx()에 대한 P/Invoke 호출을 JIT해야합니다. – Shog9