Fenster in den Vordergrund holen mit FindWindow und SetForegroundWindow

  • VB.NET

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

    Fenster in den Vordergrund holen mit FindWindow und SetForegroundWindow

    Hallo ich brauche dringend eure Hilfe !
    Ich möchte ein Programm schreiben , dass ein Fenster das minimiert ist, in den Vordergrund holt !
    Ich habe ewig gegoogled und auch zich Sachen gefunden aber kein Thread hat so wirklich mein Problem gelöst !
    Ich bekomme ständig eine Fehlermeldung wenn ich FindWindow verwenden will!
    Also folgender Code :

    ZUERST DIE FUNKTIONEN DEFINIERT ( STIMMEN DIE SO WIE SIE HIER DA STEHEN ? )

    VB.NET-Quellcode

    1. Declare Function FindWindow Lib "user32.dll" _
    2. Alias "FindWindowA" ( _
    3. ByVal lpClassName As String, _
    4. ByVal lpWindowName As String) As Long


    UND

    VB.NET-Quellcode

    1. Private Declare Function SetForegroundWindow Lib "User32.Dll" (ByVal hWnd As Long) As Long



    Nun mein Problem !
    In meinen Button schreibe ich :

    VB.NET-Quellcode

    1. Dim HWND As IntPtr
    2. HWND = FindWindow(vbNullString, "Unbenannt - Editor")
    3. SetForegroundWindow(HWND)


    Wenn ich kompilieren will dann kommt folgender Fehler !


    #======BILD ======#

    #======BILD ======#




    Was stimmt nun mit dem Code nicht ?
    Nicht durch 0 dividieren ? Was aber sonst außer vbNullString da stehen ? Was ist überhaupt mit
    lpClassName gemeint ?


    HOFFE JEMAND KANN MIR NETTERWEISE GANZ SCHNELL HELFEN
    :love:
    Liebe Grüße
    Edit by Manschula: Rot ist den Moderatoren vorbehalten --> Schriftfarbe Rot entfernt

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

    Aha, verstehe!
    Nun ich habe deinen Rat befolgt und habe auf pinvoke.net die richtigen(?) Deklarationen rausgesucht.

    Nun lauten sie wie folgt :

    VB.NET-Quellcode

    1. Private Shared Function FindWindow( _
    2. ByVal lpClassName As String, _
    3. ByVal lpWindowName As String) As IntPtr
    4. End Function
    5. Private Shared Function SetForegroundWindow(ByVal hWnd As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
    6. End Function



    Kann ich ohne Fehler ausführen , jedoch passiert nichts wenn ich den Button drücke !

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

    Welchen Wert hat denn HWND? Hast du überhaupt ein Editor Fenster mit dem enstprechenden Titel offen?!
    Was liefert SetForegroundWindow(True/False)?!
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Natürlich habe ich den Editor offen ;D
    Wie sehe ich denn was HWND zurück liefert ? Tut mir leid, aber ich verstehe das Ganze rund um HWND noch nicht so ganz .
    Auf jeden fall steht da :

    VB.NET-Quellcode

    1. Dim HWND As IntPtr
    2. HWND = FindWindow(vbNullString, "Bibliotheken")
    3. SetForegroundWindow(HWND)


    Das ist alles was im Button steht.
    Ich sehe in deinen Codes weder irgendwo ein DllImport, noch ein Lib.
    Du hast einfach nur zwei Funktionen erstellt, die nichts machen.
    Also wenn ich das richtig verstehe mache ich
    MsgBox(a.ToString) ?
    Dann kommt eine MsgBox mit dem Text 0



    "haiyyu" schrieb:

    Du verwendest VB6 deklarationen....Deklarationen für NET findest auf pinvoke.net


    Kommt ein bisschen spät, nicht wahr ? ^^ Habe das schon verbessert im 3. Post
    Ich sehe in deinen Codes weder irgendwo ein DllImport, noch ein Lib.
    Du hast einfach nur zwei Funktionen erstellt, die nichts machen.

    Oder "Declare"-Schlüsselwort
    Du verwendest VB6 deklarationen....Deklarationen für NET findest auf pinvoke.net

    Nicht mehr...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Code nicht getestet !


    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 SetForegroundWindow Lib "user32.dll" (ByVal hwnd As IntPtr) As Int32
    3. Private HWND As IntPtr
    4. Private Button_Click(...)
    5. HWND = FindWindow(vbNullString, "Unbenannt - Editor")
    6. SetForegroundWindow(HWND)
    7. End Sub
    sh00ter, wenn du meine und jvsbls Vorschläge nicht beachtest und danach weitere Vorschläge willst... öhm?
    Nochmal: Du hast nirgends ein Declare und nirgends ein DllImport. Woher soll die Funktion denn dann kommen?
    Alles, was du im Moment hast, ist zwei leere Funktionen.
    @ SystemUnknow Das ist so ein Mischmasch aus VB6 und .net....

    VB.NET-Quellcode

    1. <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    2. Private Shared Function FindWindow( _
    3. ByVal lpClassName As String, _
    4. ByVal lpWindowName As String) As IntPtr
    5. End Function

    @TS Du musst auch die Zeile mit dem DllImport mit in deinen Code nehmen
    @Nibel: macht kein unterschied ob <dll import> oder ganz normale deklaration....mit <import> schaut nur code schöner aus, auf die funktion hat keine auswirkung... vergleiche zuerst Vb6 deklarationen und NET dann:
    Das ist so ein Mischmasch aus VB6 und .net....

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

    haiyyu schrieb:

    sh00ter, wenn du meine und jvsbls Vorschläge nicht beachtest und danach weitere Vorschläge willst... öhm?
    Nochmal: Du hast nirgends ein Declare und nirgends ein DllImport. Woher soll die Funktion denn dann kommen?
    Alles, was du im Moment hast, ist zwei leere Funktionen.



    Verdammt ! Ich danke dir vielmals !
    Es war ein Missverständnis ! Ich dachte zu hattest dich auf einen Post früher bezogen :/
    Naja das war verdammt dumm von mir was ich gemacht habe. Ich dachte die Zeile mit dem Dll import wäre unwichtig gewesen weil sie bei mir zuerst unerklärlicherweise einen Fehler erzeugt hatten :(
    Naja ich habe es jetzt ausgebessert und siehe da ! Es funktioniert !
    Vielen Dank für eure Hilfe !!! Hier nochmal die richtigen Deklarationen für die Nachwelt ;)


    VB.NET-Quellcode

    1. <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    2. Private Shared Function FindWindow( _
    3. ByVal lpClassName As String, _
    4. ByVal lpWindowName As String) As IntPtr
    5. End Function
    6. <DllImport("user32.dll")> _
    7. Private Shared Function SetForegroundWindow(ByVal hWnd As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
    8. End Function


    Und der Button

    VB.NET-Quellcode

    1. Dim HWND As IntPtr
    2. HWND = FindWindow(vbNullString, "FENSTERNAME")
    3. SetForegroundWindow(HWND)

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