Programm soll Fokus erhalten

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Gelöschter Benutzer.

    Programm soll Fokus erhalten

    Ich habe einen Player geschrieben, der per Doppelklick auf eine Playliste, die Datei lädt. Jetzt bekommt der Player automatisch den Fokus. Klicke ich jetzt im Explorer auf eine andere Playlist, wird diese im aktuellen Fenster des Players geladen und abgespielt. So weit so Gut. Allerdings bekommt hier der Player nicht mehr den Focus. Ich schaffe es, dass Fenster nach vorne zu bringen (Me.topmost=true), aber ohne Focus. Läuft der Player unter der IDE2010 ist alles perfekt.

    Folgendes habe ich noch ausprobiert:

    VB.NET-Quellcode

    1. me.focus
    2. me.select
    3. me.bringtofront
    4. mer.activate
    5. me.select
    6. und
    7. <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
    8. End Function
    9. <DllImport("user32.dll")> Private Shared Function SetForegroundWindow(ByVal hWnd As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
    10. End Function
    11. Dim HWND As IntPtr = FindWindow(vbNullString, Me.Text)
    12. Call SetForegroundWindow(HWND)


    Wer hat da eine Idee?

    Gruß
    Achim
    Das kannst de so machen , geht top für die Form

    VB.NET-Quellcode

    1. AppActivate(Process.GetCurrentProcess.Id)


    Das holt dir den Fokus von überall zurück :thumbsup:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TVX“ ()

    Der Aufruf bzw. Aufrufe erfolgt nach dem erfolgreichen Öffnen der Playlist. Die Funktion

    VB.NET-Quellcode

    1. AppActivate(Process.GetCurrentProcess.Id)
    bringt auch nicht den gewünschten Erfolg.
    Der Player kommt nach vorne, aber ohne Focus:

    VB.NET-Quellcode

    1. Me.TopMost = True
    2. Me.Activate()
    3. Me.BringToFront()
    4. Me.Select()
    5. Me.Focus()
    6. AppActivate(Process.GetCurrentProcess.Id)


    Playlist per DragandDrop aus dem Explorer auf den Player, startet die Wiedergabe und der Player erhält mit Me.Activate den Fokus.
    Ich würde das in das StartupNextInstance-Event packen.


    Auch schon versucht, funktioniert auch nicht.

    Echt merkwürdig. Läuft das Prog in der Entwicklungsumgebung ist alles so wie es sein soll nur durch Me.activate.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gelöschter Benutzer“ ()

    Nach langem Ausprobieren und vielen Stunden der Verzweiflung, habe ich eine Lösung gefunden:

    VB.NET-Quellcode

    1. 'Mausklick simulieren für Fenster in den Vordergrund
    2. <System.Runtime.InteropServices.DllImport("User32.Dll")> _
    3. Public Shared Function mouse_event(ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtraInfo As Integer) As Integer
    4. End Function
    5. Const MOUSEEVENTF_LEFTDOWN As Integer = &H2
    6. Const MOUSEEVENTF_LEFTUP As Integer = &H4
    7. Private Sub Form1_MouseClickFocus()
    8. 'Fenster in den Vodergrund durch simulierten Mausklick
    9. 'Aktuelle Position merken
    10. Dim OldPoint As New Point(Cursor.Position.X, Cursor.Position.Y)
    11. 'Position ändern (zur Titelleiste)
    12. Cursor.Position = New Point(Me.Left + 50, Me.Top + 10)
    13. 'Mausklick
    14. mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
    15. mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
    16. 'Alte Position wiederherstellen
    17. Cursor.Position = OldPoint
    18. End Sub


    Ist vielleicht nicht die beste Vorgehensweise, aber es funktioniert, sogar wenn das komplette Programmfenster verdeckt ist.

    Gruß
    Achim