SetWindowsHookEx (WH_MOUSE_LL,,,) 오른쪽 클릭 훅을 설정하는 프로세스가 있습니다. 내 프로세스는 양쪽 모니터에서 150 % 확장시 Window 10.0.10586에서 DPI 시스템이 인식하도록 설정됩니다. 이것은 SetProcessDpiAwareness (PROCESS_SYSTEM_DPI_AWARE)를 호출하여 설정됩니다.높은 DPI 스케일링, 마우스 훅 및 WindowFromPoint
내 문제 시나리오는 다음과 같습니다. Office 2007은 DPI를 인식하지 못하므로 MS Word를 화면의 오른쪽 분기에 배치합시다. 오른쪽 하단의 작업 표시 줄 바로 위에서 마우스 오른쪽 버튼을 클릭하면 마우스 훅이 Word로 축소 된 1279, 675의 좌표를 보냅니다. 그런 다음 비주얼 스튜디오 (DPI 인식)를 마우스 오른쪽 버튼으로 클릭하면 화면이 거의 3/4 지점에 위치합니다. 1279, 1008 Visual Studio에서. 따라서 화면 위쪽을 클릭하면 잠재적으로 동일한 1279, 675를 얻게됩니다.
내 프로세스가 WindowFromPoint API를 호출하여 어느 시점에 있는지 확인하려고하지만이 시나리오에서는 두 가지 응용 프로그램은 같은 지점을 "공유"합니다.
마우스 훅이 DPI 인식되지 않은 응용 프로그램으로 스케일 된 것이 아닌 실제 물리적 좌표를 항상 보내도록 강제 할 수 있습니까? 그렇다면 어떻게? 또는 마우스 후크에서 hWnd 또는 processID를 확인하는 다른 방법이 있습니까?
소리가 좋지 않습니다. 커서는 GetCursorPos를 호출 할 때 다른 위치에있을 수 있습니다. –
나는 지금까지 생각할 수있는 가장 좋은 방법이며 거의 즉각적으로 보이지만 더 좋은 제안은 할 수 있습니다. – birdwes
[GetMessagePos] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms644938.aspx)가 더 적합 할 것입니다. – IInspectable