WinActivate kein Handle

  • Lösung

    Hallo Leute,

    ich habe ein Problem mit WinActivate, bzw mit allen ähnlichen Funktionen.
    In diesem Beispiel soll das Notepad geöffnet, aktiviert und wieder geschlossen werden.
    Leider wird es nicht geschlossen und auch bei anderen Fenster funktioniert das so nicht.

    Ich habe mal ein "ConsoleWrite" rein gepackt.... $hWnd ist zwar 1.. sollte doch aber irgendwas mit "0x00000000" raus kommen.

    Spoiler anzeigen
    [autoit]


    Example()

    [/autoit] [autoit][/autoit] [autoit]

    Func Example()
    ; Run Notepad
    Run("notepad.exe")

    [/autoit] [autoit][/autoit] [autoit]

    ; Wait 10 seconds for the Notepad window to appear.
    ;Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)
    Local $hWnd = WinWait("[CLASS:Edit]", "", 10)

    [/autoit] [autoit][/autoit] [autoit]

    ; Activate the Notepad window using the handle returned by WinWait.
    WinActivate($hWnd)
    ConsoleWrite( @extended & ", hWnd=" & $hWnd & @LF )
    ;@extended ist 0 und $hWnd ist 1

    [/autoit] [autoit][/autoit] [autoit]

    ; Close the Notepad window using the handle returned by WinWait.
    WinClose($hWnd)
    EndFunc ;==>Example

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Das Verhalten hab ich bei allen Fenstern, die ich versuche in den Vordergrund zu bringen.
    Was mache ich falsch?

    Kleiner Link zu einem Post, der zeigt, dass es gehen sollte.. mit dem "0x00000000"


    vG Henrik

    Zitat

    Wissen ist das einzige Gut, dass sich vermehrt, wenn man es teilt.

    4 Mal editiert, zuletzt von raiserle (26. August 2014 um 19:54)

  • Nein, so funktioniert es auch nicht. Deswegen hab ich die Zeile ja auskommentiert.
    Ich habe die Klasse mit Spy++ nachgeschaut und dort kommt "Edit" raus.

    Aber wie schon gesagt, auch mit

    [autoit]

    Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)

    [/autoit]

    funktioniert es nicht.

    Zitat

    Wissen ist das einzige Gut, dass sich vermehrt, wenn man es teilt.

  • Probiers doch mal so: :)

    [autoit]

    Func Example()
    ; Run Notepad
    $notepad=Run("notepad.exe")

    [/autoit][autoit][/autoit][autoit]

    ; Wait 10 seconds for the Notepad window to appear.
    ;Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)
    WinWait($notepad, "", 10)

    [/autoit][autoit][/autoit][autoit]

    ; Activate the Notepad window using the handle returned by WinWait.
    WinActivate($notepad)
    ConsoleWrite( @extended & ", hWnd=" & $notepad & @LF )
    ;@extended ist 0 und $hWnd ist 1

    [/autoit][autoit][/autoit][autoit]

    ; Close the Notepad window using the handle returned by WinWait.
    WinClose($notepad)
    EndFunc ;==>Example

    [/autoit]
  • @Kanashius
    Leider geht's so auch nicht. Er schließt das Fenster nicht. Das lässt wieder vermuten, dass das Handle nicht stimmt?

    Habt ihr das mal bei euch probiert? Vllt. liegt's ja auch an meinem System!? (XPSP3)

    OT: Ich habe das ganze mal unter C# mit WinAPI probiert.. dort klappt es problemlos.
    AutoIT greift doch auch auf die WinAPI zurück?! - Warum will das dort einfach nicht gelingen?


    vG Henrik

    Zitat

    Wissen ist das einzige Gut, dass sich vermehrt, wenn man es teilt.

  • Ich bin mir nicht sicher, was das Script von Kanashius bewirken soll. Der Rückgabewert von Run ist eine Process ID und kein Fensterhandle. Es macht also kaum Sinn, das als Wert bei WinWait oder WinClose anzugeben.
    Versuch mal bei WinWait statt dem Klassennamen einfach nur den Titel des Fensters als String anzugeben. Ich bin mir nicht sicher, warum das Beispiel bei dir nicht funktioniert, eventuell hängt es ja tatsächlich mit dem OS zusammen.

  • @name22

    Wie ich eingangs schon erwähnte, bekomme ich - egal welche WinXXX Funktion ich benutze - als Handle immer eine "1" zurück.
    Es ist auch egal, ob ich den Fenstertitel oder den Klassennamen benutze!

    Noch eine Sache, die mit aufgefallen ist:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    Example()

    [/autoit] [autoit][/autoit] [autoit]

    Func Example()
    $hWnd = WinActivate( "Unbenannt - " )
    ConsoleWrite( @extended & ", hWnd=" & $hWnd & @LF )

    [/autoit] [autoit][/autoit] [autoit]

    ; Close the Notepad window using the handle returned by WinWait.
    WinClose($hWnd)
    EndFunc ;==>Example

    [/autoit] [autoit][/autoit] [autoit][/autoit]


    Wenn ich schon ein offenes Notepad habe, wird dies in den Vordergrund geholt. Laut Doku gibt "WinActivate" das Handle zurück.
    Und wie es halt bei mir so ist: es ist wieder "1". Das Notepad wird auch nicht geschlossen.


    Vllt. könnte das mal einer verifizieren, der auch noch ein XP besitzt, ob bei Ihm der selbe Effekt auftritt.
    Wie sieht's bei den Win7(++) Nutzern aus? Funktioniert dort das Beispiel?


    vG Henrik

    Zitat

    Wissen ist das einzige Gut, dass sich vermehrt, wenn man es teilt.

    Einmal editiert, zuletzt von raiserle (26. August 2014 um 17:28)

  • Zitat

    Warum will das dort einfach nicht gelingen?


    Starte aus AutoIt per RUN den Editor.

    Poste den Inhalt des Reiters "Summary" des AutoIt Window Info-Tools, nachdem du das Fadenkreuz des Tools auf den Rahmen des nun geöffneten Editors gezogen hast.

  • @name22
    Danke für die Info. Das hatte ich mir schon gedacht.... dass es gehen sollte - *KOPFKRATZ* !


    @Andy
    Bitteschön! ;) AutoIT v3 Window Info: Summary:

    Spoiler anzeigen


    >>>> Window <<<<
    Title: Unbenannt - Editor
    Class: Notepad
    Position: 453, 277
    Size: 829, 604
    Style: 0x14CF0000
    ExStyle: 0x00000110
    Handle: 0x001A0BA4

    >>>> Control <<<<
    Class:
    Instance:
    ClassnameNN:
    Advanced (Class):
    ID:
    Text:
    Position:
    Size:
    ControlClick Coords:
    Style:
    ExStyle:
    Handle: 0x001B0BD2

    >>>> Mouse <<<<
    Position: 308, 15
    Cursor ID: 0
    Color: 0x989898

    >>>> StatusBar <<<<
    1:
    2: Zeile 1, Spalte 1

    >>>> Visible Text <<<<


    >>>> Hidden Text <<<<

    Zitat

    Wissen ist das einzige Gut, dass sich vermehrt, wenn man es teilt.

    2 Mal editiert, zuletzt von raiserle (26. August 2014 um 17:31)

  • Dazu fällt mir nur noch ein, über

    [autoit]

    AutoItSetOption("WinTitleMatchMode",4)

    [/autoit]

    den erweiterten Modus zu setzen.
    Btw. steht in der Hilfe etwas zu "Abwärtskompatibilität"....mir schwant was^^
    Welche AutoItversion verwendest du?

    //EDIT falsche Option...

  • In der Doku hatte ich nichts zur Kompatibilität gelesen. Also dort steht nichts ob abwärts oder nicht.

    AutoIT-Version: 3.3.0.0
    Die ist vom Dezember 2008.

    Soll ich mal updaten?!
    Aber nicht, dass die Neuste dann nicht mit meinem OS läuft.. und noch mehr BUGS hat :)


    Kann man auch mehrere Versionen von AutoIT nebeneinander laufen lassen?! Und wenn ja: Wie?

    vG Henrik

    Zitat

    Wissen ist das einzige Gut, dass sich vermehrt, wenn man es teilt.

  • Ich habe kein Interesse daran, das komplette Changelog von 6 Jahren Entwicklungszeit durchzulesen...
    Bis jetzt wurde nur der Support für Win95 und Win2000 aufgegeben. XP steht immer noch in der Liste der unterstützten Betriebssysteme.
    Andys Vermutung scheint sich zu bestätigen, ich bin mir ziemlich sicher, dass sich in einigen dutzend AutoIt Versionen etwas an den Win[...] Funktionen verändert hat :rolleyes: .

    Merk dir bitte für zukünftige Probleme die du hier dokumentierst: Wir gehen nicht davon aus, dass jemand eine 6 Jahre alte AutoIt Version benutzt. Ob du updatest oder nicht bleibt deine Entscheidung, aber so kann dir hier keine zielstrebend beim lösen deiner Probleme helfen.

  • Hi raiserle,
    ein Update auf die Version 3.3.8.1 sollte schmerz- und problemlos los sein, das verwende ich in XP auch...
    Die neuesten Updates kannst du dir ja mal anschauen, ich vermute einfach mal, die allerneuesten "Gimmicks" brauchst du nicht^^