ciao!
.
Wie kann ich ein Array deklarieren und initialisieren mit WinGetPos ?
Meine Idee:
[autoit]$size[4] = WinGetPos("Fenster")
$size[4][4] = WinGetPos("Fenster")
ciao!
.
Wie kann ich ein Array deklarieren und initialisieren mit WinGetPos ?
Meine Idee:
[autoit]$size[4] = WinGetPos("Fenster")
$size[4][4] = WinGetPos("Fenster")
hast Du schon in die Hilfe gesehen?
Edit: und auch das Beispiel ausprobiert und verstanden?
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])
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 ...
Kann ich gerne machen
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]")
[/autoit]
MsgBox(0, "Die Koordinaten des aktuellen Fensters lauten (x, y, Breite, Höhe):", $size[0] & " " & $size[1] & " " & $size[2] & " " & $size[3])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:
Dim $size
[/autoit]
oder
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.
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 .
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.
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.
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.
.
#NoTrayIcon
#RequireAdmin
#AutoIt3Wrapper_icon=data\mumble.ico
#include
#include
#include
#include
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
;~ Falls Mumble schon installiert ist, deinstalliere!
If FileExists(@ProgramFilesDir & "\" & "Mumble\mumble.exe") And FileExists(@ProgramFilesDir & "\" & "Mumble\uninstall.exe") Then
WinClose("Mumble")
Sleep(1000)
WinClose("Mumble")
Sleep(1000)
WinClose("Mumble")
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")
Sleep(3000)
DirRemove( @ProgramFilesDir & "\" & "Mumble", 1)
Else
DirRemove( @ProgramFilesDir & "\" & "Mumble", 1)
EndIf
;~ 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
;~ 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)
;~ 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)
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
If $check_username == 1 And $check_pw == 1 Then
GUICtrlSetState($button_01, $GUI_Enable)
Else
GUICtrlSetState($button_01, $GUI_DISABLE)
EndIf
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
Func _End()
Exit 0
EndFunc ;==>_End
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")
Sleep(15000)
$size2 = WinGetPos($title2)
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
;~ 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
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
;~
$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
;~ 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")
Sleep(1000)
$size2 = WinGetPos($title2)
; ASIO FEHLER!
If WinExists($title2) And $size2[2] = "506" And $size2[3] = "113" Then
WinActivate($title2)
Send("{ESC}")
Sleep(2000)
$size2 = WinGetPos($title2)
EndIf
;~ Fügt den Server zur Serverliste hinzu
Send("^o")
WinWaitActive($title2)
$size2 = WinGetPos($title2)
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
WinWaitActive($title2)
$size2 = WinGetPos($title2)
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}")
Sleep(1000)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Send("^o")
[/autoit] [autoit][/autoit] [autoit]WinWaitActive($title2)
$size2 = WinGetPos($title2)
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}")
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
EndFunc ;==>_Start
[/autoit]