Ist es möglich, eine Form über einer Vollbildanwendung zu zeigen?

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Infinity.

    Deine Frage ist etwas unklar, deswegen 2 Antworten.
    1. Deine Form und die Vollbildanwendung haben nichts miteinander zu tun.
    ==> Gib Deinem Hauptfenster die Eigenschaft TopMost = True
    2. Deine Form ist ein nicht modaler Dialog der Vollbildanwendung.
    ==>

    VB.NET-Quellcode

    1. Private dlg As Form2
    2. Private Sub XXX()
    3. If dlg Is Nothing OrElse dlg.IsDisposed Then
    4. dlg = New Form2
    5. End If
    6. If Not dlg.Visible Then
    7. dlg.Show(Me)
    8. End If
    9. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Meine Frage war dein erster Punkt. TopMost = True bewirkt, dass die Vollbildanwendung minimiert wird, bzw. gar nichts (kommt auf die Anwendung an).

    SetForegroundWindow kenne ich, aber die Funktion bewirkt leider, dass die Vollbildanwendung minimiert wird.
    Irgendwie reden wir aneinander vorbei,
    Ich meine:
    Die Vollbildanwendung ist irgend ein Programm, das zufällig den ganzen Bildschirm füllt.
    Deine Form ist ein Testprogramm von Dir, das Du vor der Vollbildanwendung anzeigen willst.
    Wenn Di der Form von Dir TopMost = True gibst, hat das üblicherweise keinerlei Auswirkung auf andere Programme, insbesondere auf die Vollbildanwendung.
    Wie also kann die Vollbildanwendung minimiert werden, wenn Du Deiner Form TopMost = True gibst?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Dieser Code führt zur Minimierung einer Vollbildanwendung bzw. dazu dass das Form zwar über der Vollbildanwendung gezeigt wird, aber wenn diese ihr Bild neu zeichnet, dann verschwindet meine Form wieder.

    VB.NET-Quellcode

    1. Protected Overrides Sub WndProc(ByRef m As Message)
    2. If m.Msg = WM_HOTKEY Then
    3. Select Case CInt(m.WParam)
    4. Case 0
    5. ShowOverlay(Me, New EventArgs)
    6. End Select
    7. End If
    8. MyBase.WndProc(m)
    9. End Sub
    10. Private Sub ShowOverlay(sender As System.Object, e As System.EventArgs) Handles ShowCommandLink.Click
    11. If _Overlay Is Nothing OrElse _Overlay.IsDisposed Then
    12. _Overlay = New Overlay
    13. End If
    14. _Overlay.Visible = Not _Overlay.Visible
    15. End Sub


    _Overlay ist ein Form mit TopMost = True.
    Dieser Code hätte eigentlich in die Frage gehört.
    Was macht denn der HotKey sonst noch?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Nichts, es wird nur die Funktion ShowOverlay() aufgerufen.

    Wird das Overlay gezeigt, passiert folgendes (um es über dem aktiven Fenster zu zeigen):

    VB.NET-Quellcode

    1. Private Class Overlay
    2. ....
    3. Private Sub LoadOverlay() Handles MyBase.Load
    4. Dim Rect As RECT
    5. Dim ActiveWindow As IntPtr = GetForegroundWindow()
    6. If ActiveWindow = _TaskBarHandle Then Visible = False
    7. GetWindowRect(New HandleRef(New Object, ActiveWindow), Rect)
    8. Bounds = New Rectangle(Rect.Left, Rect.Top, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top)
    9. End Sub
    10. ....
    11. End Class

    steve0 schrieb:

    kennt sich jemand damit aus:

    Suche ein fenster, dass sich über ALLES "legt" und nicht per software zu sehen ist

    (Screenshot, desktopaufnahme progs wie camtasia hypercam usw...)

    mfg
    Das klingt ob du Hacks erstellen willst, welche nicht sichtbar für Anti-Cheat-Programme sind. Wie dem auch sei, nein gibt es nicht.

    Zum Thema: Ich hatte vor einigen Tagen ein interessantes Programm gesehen, welches einfach als Top-Level gezeichnet wird. Sprich auf höchster Grafik-Ebene (so ähnlich wie manche Spiele es tun).
    Der Vorteil: Es funktioniert bei Vollbildprogrammen & Spielen ohne DX Hook, der Nachteil: Es war in C++ geschrieben und funkionierte offenbar nur für Nvidia-Grafikkarten.

    Indes wäre es interessant zu wissen, ob man mit VB auch als Top-Level zeichnen kann, vermutlich aber eher nicht (oder es weiß keiner).
    Danke für den Hinweis, werde mal in der Richtung googeln (C++ wäre auch kein Problem, nur mit VB.Net kommt man meistens schneller ans Ziel). Hast du DirectX verwendet? Da müsste ich mich allerdings erst einarbeiten.