Array deklarieren und initialisieren

  • ciao!
    .
    Wie kann ich ein Array deklarieren und initialisieren mit WinGetPos ?

    Meine Idee:

    [autoit]

    $size[4] = WinGetPos("Fenster")
    $size[4][4] = WinGetPos("Fenster")

    [/autoit]

    2 Mal editiert, zuletzt von satinez (19. März 2009 um 00:40)

  • hast Du schon in die Hilfe gesehen?

    Edit: und auch das Beispiel ausprobiert und verstanden?

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Jo habe ich, auch soweit verstanden, doch leider hilft es mir nicht weiter.
    Habe sogar das Tutorial von BugFix durch, doch leider finde ich keine Lösung.

    EDIT:

    [autoit]

    $size = WinGetPos("[ACTIVE]")
    MsgBox(0, "Die Koordinaten des aktuellen Fensters lauten (x, y, Breite, Höhe):", $size[0] & " " & $size[1] & " " & $size[2] & " " & $size[3])

    [/autoit]

    Doch hier wird einfach in die Variable geschrieben, doch das Funzt nicht wenn es in einer Funktion steht irgendwie...

  • ja dann poste doch mal ein Beispiel,
    dass man nachvollziehen (ausprobieren) kann, dass nicht funzt.

    Und schon kommt die Antwort geflogen ... ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    • Offizieller Beitrag

    Jo habe ich, auch soweit verstanden, doch leider hilft es mir nicht weiter.
    Habe sogar das Tutorial von BugFix durch, doch leider finde ich keine Lösung.

    EDIT:

    [autoit]

    $size = WinGetPos("[ACTIVE]")
    MsgBox(0, "Die Koordinaten des aktuellen Fensters lauten (x, y, Breite, Höhe):", $size[0] & " " & $size[1] & " " & $size[2] & " " & $size[3])

    [/autoit]

    Doch hier wird einfach in die Variable geschrieben, doch das Funzt nicht wenn es in einer Funktion steht irgendwie...


    Was hällst du davon wenn du die Variable auch deklarierst ?
    Entweder:

    [autoit]

    Dim $size

    [/autoit]


    oder

    [autoit]

    Global $size

    [/autoit]


    und zwar am Scriptanfang, dann werden auch innerhalb der Funktion die Werte richtig gesetzt.

    Edit : Hast du schon, wie ich sehe. Hab dein leztes Post erst eben gesehen . Was ist jetzt genau dein Problem ?

  • Das Problem ist, das er mir ausgibt

    Error Subscript used woth-non-Array variable, und ich finde den Fehler nicht.

    • Offizieller Beitrag

    Warscheinlich wird das gesuchte Fenster nicht gefunden , deshalb wird auch das Array nicht mit Daten gefüllt. Den Fehler kannst du abfangen wenn du mit IsArray überprüfst ob das Array auch eines ist. Oder frage nach den WinGetPos mit If @error ab ob ein Fehler aufgetreten ist .

    • Offizieller Beitrag

    Das Problem ist, das er mir ausgibt

    Error Subscript used woth-non-Array variable, und ich finde den Fehler nicht.


    Das bedeutet, dass der Fenstertitel wohl nicht vorhanden ist. Und dann wird kein Array zurückgegeben. Laß dir mal @error ausgeben.

    Code
    Failure: Returns 0 and sets @error to 1 if windows is not found.

    Edit: Mist, hab das Fenster solange im Hintergrund offen gehabt und nun hat Raupi schon geantwortet. ;(

  • Danke an alle. Habe den Fehler gefunden.

    Das Fenster existierte zu dem Zeitpunkt noch nicht.
    Ich muss ein längeres Sleep einbauen, da das Skript auf einem älteren PC länger braucht um das Programm zu starten. :thumbup:

  • Wie wäre es dann mit der Funktion WinWait? Dabei wartet das Script bis das Fenster existiert. Dann wäre läuft es unabhängig von der Rechnergeschwindigkeit.

  • Das funktioniert leider nicht. Da diese Fenster speziell sind, und keine sonstigen Informationen bieten, als Titel(der immer gleich ist) und Fenstergrösse.
    .
    Ich kann in diesem Fall aber nicht auf ein Fenster warten, dessen Grösse ich nicht weiss. Denn sonst wird einfach das nächst erscheinende Fenster genommen :(
    .
    Problem 2: Das Skript funzt 1A, doch leider nur, wenn man das Klassische Design von XP nimmt. Wie kann ich das lösen, dass es bei jedem Design geht?
    Ich weiss das ist ein Scheissproblem, doch mir bleibt nichts anderes übrig, wie mit so billigen Methoden zu hantieren.
    .

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #RequireAdmin
    #AutoIt3Wrapper_icon=data\mumble.ico
    #include
    #include
    #include
    #include

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

    Opt("MustDeclareVars", 1)

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

    WinMinimizeAll()

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

    ;~ ; Falls die mumble117.exe nicht im Ordner DATA existiert
    If Not FileExists("data\mumble117.exe") Then
    MsgBox(64, " SATINEZ.NET - Mumble 1.1.7 Installer", "Datei nicht gefunden in 'data\' mit dem Namen 'mumble117.exe'")
    Exit 0
    EndIf

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

    ;~ Falls Mumble schon installiert ist, deinstalliere!
    If FileExists(@ProgramFilesDir & "\" & "Mumble\mumble.exe") And FileExists(@ProgramFilesDir & "\" & "Mumble\uninstall.exe") Then

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

    WinClose("Mumble")
    Sleep(1000)
    WinClose("Mumble")
    Sleep(1000)
    WinClose("Mumble")

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

    FileDelete(@DesktopDir & "\" & "Mumble.lnk")

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

    Run(@ProgramFilesDir & "\" & "Mumble\uninstall.exe")
    Sleep(3000)
    Send("!n")
    Sleep(1000)
    Send("{DOWN}")
    Sleep(500)
    Send("{SPACE}")
    Sleep(500)
    Send("!u")
    Sleep(3000)
    Send("{TAB}")
    Sleep(500)
    Send("{SPACE}")
    Sleep(500)
    Send("!f")

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

    Sleep(3000)
    DirRemove( @ProgramFilesDir & "\" & "Mumble", 1)

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

    Else
    DirRemove( @ProgramFilesDir & "\" & "Mumble", 1)
    EndIf

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

    ;~ Variablen deklarieren
    Global $filename = "mumble117.exe"
    Global $title = "Mumble -- 1.1.7"
    Global $title2 = "Mumble"
    Global $msg_title = " SATINEZ.NET - Mumble 1.1.7 Installer"
    Global $username = "Username"
    Global $password = "Passwort"
    Global $font_01 = "Tahoma"
    Global $size
    Global $size2
    Global $check_username, $check_pw
    Global $main
    Global $label_01
    Global $input_01
    Global $input_02
    Global $button_01
    Global $pos, $pos0

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

    ;~ Optionale Parameter
    ;~ SendKeyDelay = Senden Taste Verzögerung, 1000ms = 1 Sekunde
    Opt("SendKeyDelay", 50)
    ;~ GUIOnEventMode bedeutet, dass die GUI Controls direkt auf Funktionen springen sollen
    Opt('GUIOnEventMode', 1)

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

    ;~ Fenster-Design
    $main = GUICreate($msg_title, 320, 200, 193, 115)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End', $main)
    ;
    GUISetFont(20, 100, 0, $font_01)
    $label_01 = GUICtrlCreateLabel("Eingabe erforderlich", 40, 15, 240, 38, $ES_CENTER + $WS_BORDER)
    GUISetFont(8.5, 400, 0, $font_01)
    $input_01 = GUICtrlCreateInput("Username", 75, 72, 169, 21)
    GUICtrlSetState($input_01, $GUI_FOCUS)
    $input_02 = GUICtrlCreateInput("Passwort...", 75, 104, 169, 21)
    ;
    $button_01 = GUICtrlCreateButton("START", 110, 140, 100, 30)
    ;~ GUICtrlSetState( $button_01, $GUI_FOCUS)
    GUICtrlSetState($button_01, $GUI_DISABLE)
    GUICtrlSetOnEvent($button_01, '_Start')
    ;
    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(100)
    If StringInStr(GUICtrlRead($input_01), "username") Or StringInStr(GUICtrlRead($input_01), " ") Or GUICtrlRead($input_01) = "" Then
    $check_username = 0
    Else
    $check_username = 1
    EndIf

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

    If $check_username == 1 And $check_pw == 1 Then
    GUICtrlSetState($button_01, $GUI_Enable)
    Else
    GUICtrlSetState($button_01, $GUI_DISABLE)
    EndIf

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

    If StringInStr(GUICtrlRead($input_02), "passwort") Or StringInStr(GUICtrlRead($input_02), " ") Or GUICtrlRead($input_02) = "" Then
    $check_pw = 0
    Else
    $check_pw = 1
    EndIf
    WEnd

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

    Func _End()
    Exit 0
    EndFunc ;==>_End

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

    Func _Start()

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

    GUISetState(@SW_HIDE, $main)
    ;~ Blockiert die Benutzereingaben
    BlockInput(1)
    ;~ Mumble 1.1.7 wird Installiert
    RunWait("data\" & $filename & " /S")
    ;~ Skin wird ins Mumble Standartverzeichnis kopiert
    DirCopy("data\skins\", @ProgramFilesDir & "\" & "Mumble\skins", 1)
    Sleep(250)
    ;~ Startet Mumble
    Run(@ProgramFilesDir & "\" & "Mumble\mumble.exe")

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

    Sleep(15000)
    $size2 = WinGetPos($title2)

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

    WinSetTitle($title, "", $msg_title)

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

    ;~ FENSTER - ASIO!
    If WinExists($title2) And $size2[2] = "506" And $size2[3] = "113" Then
    WinActivate($title2)
    Send("{ESC}")
    Sleep(1000)
    $size2 = WinGetPos($title2)
    EndIf

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

    ;~ FENSTER - ERSTES MAL!
    If WinExists($title2) And $size2[2] = "461" And $size2[3] = "113" Then
    WinActivate($title2)
    Send("{ESC}")
    Sleep(1000)
    $size2 = WinGetPos($title2)
    EndIf

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

    Sleep(5000)

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

    ;~ FENSTER - KEINE VERBINDUNG ZUM MUMBLESERVER!
    If WinExists($title2) And $size2[2] = "220" And $size2[3] = "111" Then
    WinActivate($title2)
    Send("{ESC}")
    Sleep(1000)
    $size2 = WinGetPos($title2)
    Else
    MsgBox(64, $msg_title, "Internetverbindung gefunden!", 3)
    EndIf
    ;~

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

    $size2 = WinGetPos($title2)

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

    Sleep(5000)

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

    If WinExists($title2) And $size2[2] <> "100" And $size2[3] <> "100" Then
    WinActivate($title2, "")
    Send("{ESC}")
    Sleep(500)
    $size2 = WinGetPos($title2)
    EndIf

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

    ;~ Text-To-Speech deaktivieren
    Sleep(1000)
    Send("!a")
    Sleep(250)
    Send("{DOWN 4}")
    Sleep(250)
    Send("{ENTER}")
    Sleep(1000)
    ;~ Geht in die Einstellungen ( !o = Alt+o )
    Send("!o")
    Sleep(250)
    Send("{ENTER}")
    Sleep(1000)
    ;~ Kopiere den Skinpfad
    Send("^{TAB}")
    Sleep(250)
    Send("{TAB 8}")
    Sleep(250)
    Send(@ProgramFilesDir & "\" & "Mumble\skins\zeroone\zeroone.qss")
    Sleep(250)
    Send("!o")

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

    Sleep(1000)
    $size2 = WinGetPos($title2)

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

    ; ASIO FEHLER!
    If WinExists($title2) And $size2[2] = "506" And $size2[3] = "113" Then
    WinActivate($title2)
    Send("{ESC}")
    Sleep(2000)
    $size2 = WinGetPos($title2)
    EndIf

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

    ;~ Fügt den Server zur Serverliste hinzu
    Send("^o")

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

    WinWaitActive($title2)
    $size2 = WinGetPos($title2)

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

    If WinExists($title2) And $size2[2] = "220" And $size2[3] = "111" Then
    WinActivate($title2)
    Send("{ESC}")
    Else
    ;~ MsgBox(64, $msg_title, "Internetverbindung gefunden!", 3)
    EndIf

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

    WinWaitActive($title2)
    $size2 = WinGetPos($title2)

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

    Sleep(250)
    Send("^{TAB}")
    Sleep(250)
    Send("{TAB 2}")
    Sleep(250)
    Send("01")
    Sleep(250)
    Send("{TAB}")
    Sleep(250)
    Send("0.0.0.0")
    Sleep(250)
    Send("{TAB 2}")
    Sleep(250)
    Send(GUICtrlRead($input_01))
    Sleep(250)
    Send("{TAB}")
    Sleep(250)
    Send(GUICtrlRead($input_02))
    Sleep(250)
    Send("{TAB 3}")
    Sleep(250)
    Send("{ENTER}")
    Sleep(1000)
    Send("{ESC}")

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

    Sleep(1000)

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

    Send("^o")

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

    WinWaitActive($title2)
    $size2 = WinGetPos($title2)

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

    Sleep(250)

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

    Send("{TAB 9}")
    Sleep(250)
    Send("{ENTER}")
    Sleep(250)
    Send("{TAB 2}")
    Sleep(250)
    Send("02")
    Sleep(250)
    Send("{TAB}")
    Sleep(250)
    Send("0.0.0.1")
    Sleep(250)
    Send("{TAB 2}")
    Sleep(250)
    Send(GUICtrlRead($input_01))
    Sleep(250)
    Send("{TAB}")
    Sleep(250)
    Send(GUICtrlRead($input_02))
    Sleep(250)
    Send("{TAB 3}")
    Sleep(250)
    Send("{ENTER}")
    Sleep(1000)
    Send("{ESC}")

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

    FileCreateShortcut(@ProgramFilesDir & "\" & "Mumble\mumble.exe", @DesktopDir & "\Mumble.lnk", @ProgramFilesDir & "\" & "Mumble", "", ":)")
    WinClose($title2)
    WinClose($msg_title)
    MsgBox(64, $msg_title, "Mumble wurde erfolgreich eingerichtet!", 2)
    BlockInput(0)
    Exit 0

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

    EndFunc ;==>_Start

    [/autoit]