【发布时间】:2016-09-24 14:41:11
【问题描述】:
我有一个设置SetWindowsHookEx(WH_MOUSE_LL, , ,) 右键单击钩子的进程。我的进程在 Window 10.0.10586 上设置为 DPI 系统感知,在两个显示器上以 150% 的比例缩放。这是通过调用SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE) 设置的。
我的问题场景是例如Office 2007 不知道 DPI,所以让我们将 MS Word 放在屏幕的右四分之一。右击右下角任务栏上方,鼠标钩子发送坐标 1279, 675 - 缩放到 Word。然后我右键单击视觉工作室(DPI 感知),在屏幕上将近四分之三,鼠标钩向我发送坐标,例如1279、1008 来自 Visual Studio。因此,如果我在屏幕上方单击,我可能会得到相同的 1279、675。
我的进程试图通过调用WindowFromPoint API 来确定该点所在的窗口,但在这种情况下这显然会失败,因为两个应用程序“共享”同一点。
是否可以强制鼠标挂钩始终发送原始物理坐标,而不是那些缩放到 DPI 不感知应用程序的坐标?如果是这样,如何?或者,是否有其他方法可以通过鼠标钩子确定hWnd 或processID?
【问题讨论】:
标签: c++ windows winapi dpi setwindowshookex