Externe Anwendung minimieren/maximieren via Title

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Hinti.

    Externe Anwendung minimieren/maximieren via Title

    Hi.

    Ich möchte gerne eine fremde Anwendung mit meiner maximieren/minimieren.
    Ich habe auch einen Code:

    VB.NET-Quellcode

    1. Private Const SW_SHOWMAXIMIZED As Integer = 3
    2. Private Declare Function ShowWindow Lib "user32" (ByVal handle As IntPtr, ByVal nCmdShow As Integer) As Integer
    3. Private Declare Function SetForegroundWindow Lib "user32" (ByVal handle As IntPtr) As Integer
    4. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    5. MaximizeExeByName("notepad")
    6. End Sub
    7. Private Sub MaximizeExeByName(ByVal ExeNameWithoutPathOrExtension As String) '
    8. Dim ps() As Process = Process.GetProcessesByName(ExeNameWithoutPathOrExtension)
    9. If ps.Length > 0 Then
    10. ShowWindow(ps(0).MainWindowHandle, SW_SHOWMAXIMIZED)
    11. SetForegroundWindow(ps(0).MainWindowHandle)
    12. End If
    13. End Sub


    Der tut auch was er soll, nur leider habe ich mehrere Prozesse die so heißen, und die möchte ich auseinander halten.
    Jeder von denen hat ein anderen Fensternamen, deswegen möchte ich da ansetzen.
    Wie schreibe ich diesen Code so um, dass er nach dem Fensternamen sucht, und nicht nach dem Prozess?
    Die Fensternamen sind alle in einer Listbox gespeichert.

    Danke :)
    Mfg. TGS

    TheGameSiders schrieb:

    nicht nach dem Prozess?
    Dann gehe mit For Each durch alle Prozesse durch, die Du mit GetProcessesByName() gefunden hast und untersuche die Properties jedes Prozessen nach Deinen Kriterien.
    Fang an mit GetWindowText().
    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!
    Hab jetzt mal das probiert:

    VB.NET-Quellcode

    1. Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
    2. Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As IntPtr, ByVal nCmdShow As Integer) As Integer
    3. Private Const SW_SHOWNORMAL As Integer = 1
    4. Private Const SW_SHOWMINIMIZED As Integer = 2
    5. Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    6. Dim iHwnd As IntPtr = FindWindow(ListBox1.SelectedItem, vbNullString)
    7. ShowWindow(iHwnd, SW_SHOWMINIMIZED)
    8. End Sub


    Doch leider minimiert sich das Fenster welches ich in der Listbox ausgewählt habe nicht.
    Fehler?

    Mfg. René :)


    EDIT: Läuft :D
    Gib acht wenn du mit dem Fenstertitel arbeitest und es sich um MDI Fenster handelt, oder sonst auch wenn sich der Fenstertitel der gesuchten Anwendung mal ändert, je nach gerader laufender Aktion!

    Ein Beispiel:
    Wordpad mit leerem Dokument: "Dokument - WordPad"
    Weiteres Wordpad mit benannter Datei: "readme.txt - WordPad"