j'ai un processus qui établit une SetWindowsHookEx (WH_MOUSE_LL,,,) crochet clic droit. Mon processus est réglé sur le système DPI sur la fenêtre 10.0.10586 avec une mise à l'échelle de 150% sur les deux moniteurs. Cela a été défini en appelant SetProcessDpiAwareness (PROCESS_SYSTEM_DPI_AWARE).mise à l'échelle haute DPI, crochets de souris et WindowFromPoint
Mon scénario de problème est par exemple Office 2007 n'est pas reconnu par DPI, plaçons MS Word dans le bon quart de l'écran. Clic droit juste au-dessus de la barre des tâches en bas à droite et le crochet de la souris envoie les coordonnées de 1279, 675 - mis à l'échelle de Word. Ensuite, je fais un clic droit sur Visual Studio (DPI), près des trois quarts à travers l'écran et le crochet de la souris m'envoie des coordonnées de par exemple. 1279, 1008 de Visual Studio. Donc, si je cliquais plus haut sur l'écran, j'aurais potentiellement le même 1279, 675.
Mon processus tente de déterminer quelle fenêtre est au point en appelant l'API WindowFromPoint, mais cela échouera clairement dans ce scénario comme deux les applications "partagent" le même point.
Est-il possible de forcer le crochet de la souris pour toujours envoyer les coordonnées physiques brutes au lieu de ceux mis à l'échelle de l'application pas au courant DPI? et si oui, comment? Alternativement, existe-t-il un autre moyen de déterminer le hWnd ou processID à partir des crochets de la souris?
Cela ressemble à une mauvaise idée. Le curseur peut être ailleurs au moment où vous appelez GetCursorPos. –
C'est le meilleur que je peux penser jusqu'à présent, et semble être presque instantané, mais je suis ouvert à de meilleures suggestions. – birdwes
[GetMessagePos] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms644938.aspx) est probablement un meilleur ajustement. – IInspectable