Ich habe vier Monitore. Physisch angeordnet wie:
Code: Select all
\\.\DISPLAY3
Wenn ich Windows.Forms verwende. Screen-Klasse, um Grenzen zu ermitteln, heißt es auf meinem primären Monitor (
Code: Select all
\\.\DISPLAY2
Okay, sagen wir mal, ich sende InjectSyntheticPointerInput mit den Koordinaten . Dies sollte die Mitte meines Hauptmonitors berühren. Stattdessen ist es die Mitte von \\.\DISPLAY3 (dem Monitor ganz links). Ich... was? Die gemeldeten Grenzen von \\.\DISPLAY3 sind {X=-1920,Y=0,Width=1920,Height=1080
Also, ich habe es erraten und gesendet (Verschiebung um die niedrigste gegebene X-Koordinate). Es hat funktioniert, genau in der Mitte meines Hauptmonitors. Ok, ich brauche also einen physischen Standort, keinen virtuellen Bildschirm.
Also habe ich weitere WinAPI-Aufrufe versucht, um die Informationen direkt abzurufen. EnumDisplayMonitors importiert und verwendet, um die Informationen zu erhalten, die ich benötige. Nein. das meldet genau die gleichen Grenzen. GetMonitorInfo... Nein, das sind die gleichen Informationen. Gibt es keine Möglichkeit, den Standort des physischen Monitors abzufragen?
Jetzt könnte ich die niedrigsten X- und Y-Werte nehmen und die Koordinaten aller anderen Monitore darauf basierend versetzen , wodurch der tiefste Punkt „auf Null gesetzt“ und der Ursprung neu definiert wird. Aber ist das der „richtige“ Weg, dies zu tun? Gibt es eine bessere Möglichkeit, physische Koordinaten anstelle virtueller Bildschirmkoordinaten abzufragen?