Hallo Community,
Ich kämpfe seit einigen Wochen mit einem Problem unter Windows7. Ich habe eine WPF-Applikation geschrieben, die als Overlay zu einem Spiel dient. Das Spiel ist dabei frameless, fullscreen und TopMost. Um meine Applikation nun in bestimmten Spielsituationen nach vorne zu bringen, ermittle ich das Mainwindow handle vom Spiel und setze meine Applikation mit SetWindowPos() darüber. Dies funktioniert ab Windows 8 und höher auch wunderbar. Leider nicht unter Windows7. .Net Frameworks ist 4.7.
Meine Applikation scheint dabei TopMost zu sein, ist aber leider nicht sichtbar. Ich vermute also ein Problem im Bereich Repainting.
Folgende Sachverhalte habe ich überprüft:
Vielleicht hat jemand noch einen Hinweis oder weiß wo der Unterschied zwischen windows7 und >windows8 liegt
Vielen Dank und Gruß
Ist das Spiel wirklich "FullScreen" (DirectX, OpenGL)? Dann kannst du auch nur mit diesen Technologien ein Overlay erzeugen, denn der Desktop (auf dem deine WPF-Applikation läuft), ist dann nicht sichtbar.
Nur im "windowed [borderless] mode" (d.h. es ist ein Fenster vom Desktop) kannst du eigene Applikationen darüber setzen.
Danke für deine Antwort. Ja, das beschriebene Verhalten betrifft nur den echten "Fullscreen". Wenn ich im Spiel die Option "Frameless window" wähle, funktioniert es wie von dir beschrieben einwandfrei.
Deine Erläuterung ist plausibel. Was ich allerdings nicht verstehe: warum funktioniert es unter win8 und win10 auch bei echtem, opengl, Fullscreen? Und warum ist die Applikation unter win7 bedienbar obwohl ich sie nicht sehe, liegt also scheinbar oben?
Ich werde mich auf jeden Fall jetzt erst mal mit der OpenGl/DirektX Thematik auseinander setzten. Da habe ich noch keine Ahnung von. Dank für den Hinweis.
Ich habe hier auch noch/nur Windows 7 und kenne es bisher auch nicht anders.
Evtl. wurde ab Windows 8 da etwas geändert.
Hast du denn im Spiel die gleiche Auflösung wie beim Desktop gesetzt? Und funktioniert das bei Win8 und Win10 auch bei unterschiedlicher Auflösung?
Es gibt Libraries, wie z.B. Overlay.NET oder DX9-Overlay-API (C++) - kannst da ja mal reinschauen.
PS: Du hast "win7 und win10" (statt "win8 und win10") geschrieben...
Danke für den Hinweis, den Fehler habe ich berichtigt. Die Auflösung scheint irrelevant zu sein. Ich habe es in verschiedenen Kombinationen versucht, das Verhalten ändert sich leider nicht. Default sind die Auflösungen identisch.
Die Libs sehen sehr vielversprechend aus. Vielen Dank dafür. Das wird heute Abend direkt ausprobiert.