Laden...

TopMost Applikation unter Windows 7 nicht sichtbar

Erstellt von J. Fiddler vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.073 Views
J
J. Fiddler Themenstarter:in
3 Beiträge seit 2019
vor 4 Jahren
TopMost Applikation unter Windows 7 nicht sichtbar

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:

  1. Die ZOrder ist korrekt. Der ZOrder Index meiner Applikation ist nach SetWindowPos eins höher als der Index des Spiels.
  2. Ws_ex_topmost ist gesetzt.
  3. Die Maus ist sichtbar wenn ich über bedienbare Widgets meiner Applikation hover. Die OnClick events werden in meiner Applikation ausgewertet, allerdings ist sie halt nicht sichtbar.
  4. Ich habe über alle Children des Mainwindow vom Spiel iteriert und geschaut ob eines in der ZOrder weiter oben liegt. Das ist nicht der Fall.
  5. Ich habe es noch zusätzlich in C++ mit der CWnd Klasse probiert, der Effekt ist leider identisch.
  6. Ich habe unter Verwendung von Invalidate(), UpdateLayout() und Refresh() versucht meine Applikation neu zu zeichnen

Vielleicht hat jemand noch einen Hinweis oder weiß wo der Unterschied zwischen windows7 und >windows8 liegt

Vielen Dank und Gruß

4.931 Beiträge seit 2008
vor 4 Jahren

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.

J
J. Fiddler Themenstarter:in
3 Beiträge seit 2019
vor 4 Jahren

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.

4.931 Beiträge seit 2008
vor 4 Jahren

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...

J
J. Fiddler Themenstarter:in
3 Beiträge seit 2019
vor 4 Jahren

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.