AutoIt 3 unzuverlässig...

Dragon45

Lt. Commander
Registriert
Dez. 2009
Beiträge
1.030
Ja hallöle erst mal ich hab mich ein wennig mit AutoIt 3 eingearbeitet zugegeben ich bin kein Profie, aber ich hab schon nach kurzer Zeit gemerkt das AutoIt 3 bzw. mein Rechner die Befehle zu schnell und/oder zu zeitig ausführt mein Script sieht imoh so aus

PHP:
Run("C:\Program Files (x86)\Mozilla Firefox\firefox.exe")
WinWaitActive("Mozilla Firefox")
send("!{X}")
send("{Down}{Down}{Down}{Down}{Down}{Down}{Down}{Down}")
send ("{Enter}")
WinWaitActive("Einstellungen")
send("{Tab}{Tab}")
WinWaitActive("Einstellungen")
send("{ENTER}")
WinWaitActive("Verbindungs-Einstellungen")
send("{Tab}")
WinWaitActive("Verbindungs-Einstellungen")
send("!{m}")
WinWaitActive("Verbindungs-Einstellungen")
send("{Tab}")
WinWaitActive("Verbindungs-Einstellungen")
send("187.110.160.45")
WinWaitActive("Verbindungs-Einstellungen")
send("{Tab}")
WinWaitActive("Verbindungs-Einstellungen")
send("8080")
WinWaitActive("Verbindungs-Einstellungen")
send("{Enter}")
WinWaitActive("Einstellungen")
send("{Tab}{Tab}{Tab}{Tab}{Tab}{Tab}")
WinWaitActive("Einstellungen")
send("{Enter}")
sleep(400)
send("!{f4}")

Die meisten werden sehen das es sich um einen Proxy Server handelt den man schnell eingeben kann, allerdings kommt es in 40% der Fälle vor das er entweder ein falsches Menü aus der Menüleiste dropt oder nach send("!{X}") aufhört.
Auch von der Eigenart, dass das große X ein Shift x bedeutet habe ich gehört, ändert aber nix. Ein weiteres Problem hat mein Rechner mit Strg-Tasten die ich hier mit, DOWN umgangen habe, diese werden teils nicht gelesen, teils "dauergedrückt" egal ob ^;RCTRL oder LCTRL.

Ist sowas normal? Liegt das an mir und meiner bescheidenen Programmierung oder am Rechner? Was kann ich tun um das Programm zuverlässiger zu machen?
Ich hoffe ihr könnt mir helfen.

MfG Dragon
 
Zuletzt bearbeitet:
Ich bin mir nicht 100% sicher, wie WinWaitActive arbeitet, jedoch könnte ich mir vorstellen, dass WinWaitActive nur auf das Öffnen des Fensters wartet, was aber nicht gleichbedeutend sein muss, dass auch das Programm bereit für eine Eingabe ist.
 
@DIJI2008 Wollte ungern noch ein neues Programm benutzen wenn es jetze so geht, aber sag wie geht es "noch eleganter" hast du be Ahnung, wäre super nett wenn du mich dran teil haben lässt.
@Turas ja is mir auch schon auf gefallen, aber es Script an sich wurde langsamer ausgeführt ich hab auch schon zwischen den Sätzen mit sleep("400") rum gebasstelt :( mit wennig Erfolg.

MfG

EDIT
mmh ich vergess immer bei Support Sachen mein System zu posten
CPU E6850
MB Nvidia 680i
GK GTS250
Win 7 Ultimate
 
Zuletzt bearbeitet: (System)
AutoIT ist sehr langsam da sollte man mit mehr Sleep Befehlen arbeiten:
Code:
Run("C:\Program Files (x86)\Mozilla Firefox\firefox.exe")
Sleep(500)
WinWaitActive("Mozilla Firefox")
Sleep(500)
send("!{X}")
Sleep(500)
send("{Down}")
Sleep(500)
send("{Down}")
Sleep(500)
send("{Down}")
Sleep(500)
send("{Down}")
Sleep(500)
send("{Down}")
Sleep(500)
send ("{Enter}")
...
...
usw.

Edit: Oder schau dir mal die Funktionen ControlSend und ControlClick etwas genauer an damit sollte es auch um einiges besser gehen.
 
Zuletzt bearbeitet:
mmh ok Danke ich werds ausprobieren.
super Forum bin 10min weitergeholfen und das "um die Uhrzeit"

MfG

Juppi der Sleep("500") machts echt klasse hab ihn zwar nur nach den send("!{X}") eingesetzt aber genau das war der knackpunkt wo er ausgestiegen ist. 20mal ausgeführt und immer geklappt.

Falls Interesse besteht:

Code zum einschalten
Code:
Run("C:\Program Files (x86)\Mozilla Firefox\firefox.exe")
WinWaitActive("Mozilla Firefox")
send("!{X}")
sleep("500")
send("{Down}{Down}{Down}{Down}{Down}{Down}{Down}{Down}")
send ("{Enter}")
WinWaitActive("Einstellungen")
send("{Tab}{Tab}")
WinWaitActive("Einstellungen")
send("{ENTER}")
WinWaitActive("Verbindungs-Einstellungen")
send("{Tab}")
WinWaitActive("Verbindungs-Einstellungen")
send("!{m}")
WinWaitActive("Verbindungs-Einstellungen")
send("{Tab}")
WinWaitActive("Verbindungs-Einstellungen")
send("187.110.160.45")
WinWaitActive("Verbindungs-Einstellungen")
send("{Tab}")
WinWaitActive("Verbindungs-Einstellungen")
send("8080")
WinWaitActive("Verbindungs-Einstellungen")
send("{Enter}")
WinWaitActive("Einstellungen")
send("{Tab}{Tab}{Tab}{Tab}{Tab}{Tab}")
WinWaitActive("Einstellungen")
send("{Enter}")
sleep(400)
send("!{f4}")

Code zum Ausschalten
Code:
Run("C:\Program Files (x86)\Mozilla Firefox\firefox.exe")
WinWaitActive("Mozilla Firefox")
send("!{X}")
send("{Down}{Down}{Down}{Down}{Down}{Down}{Down}{Down}")
send ("{Enter}")
WinWaitActive ("Einstellungen")
send("{Tab}{Tab}")
WinWaitActive ("Einstellungen")
send("{ENTER}")
WinWaitActive ("Verbindungs-Einstellungen")
send("{Tab}")
WinWaitActive ("Verbindungs-Einstellungen")
send("!{e}")
WinWaitActive ("Verbindungs-Einstellungen")
send("{Enter}")
WinWaitActive ("Einstellungen")
send("{Tab}{Tab}{Tab}{Tab}{Tab}{Tab}")
WinWaitActive ("Einstellungen")
send("{Enter}")
sleep(400)
send("!{F4}")

Letze Frage:macht es einen unterschied die Scripte zu Compilieren?
 
Zuletzt bearbeitet:
Behält denn Firefox den Fokus wenn Autoit läuft ?

Ich weiß auch nicht was gegen ein AddOn spricht, das ist doch echt eleganter als Autoit.
Wenn Autoit läuft und das am Ende 20 Sekunden dauert durch die Pausen, kannst du den PC in der Zeit nämlich nicht nutzen.

http://forum.ubuntuusers.de/topic/firefox-proxy-mittels-script-de-aktivieren/


Und so nebenbei dein System ist bei solch einem Problem mal vollkommen egal. ;-)

Wofür braucht man einen Brasilianischen Proxy ? ;-)
 
Zuletzt bearbeitet:
Hi,

ich habe das bei mir direkt mit der Config-File gemacht.

Diese liegt unter folgendem Pfad:

C:\Users\DEINBENUTZERNAME\AppData\Roaming\Mozilla\Firefox\Profiles\DEINPROFILNAME\prefs.js

Dort ändere ich einfach die entsprechenden Werte ab.

Hier die vorbereitenden Sachen:

Code:
$file = "C:\Users\[COLOR="Red"]DEINBENUTZERNAME[/COLOR]\AppData\Roaming\Mozilla\Firefox\Profiles\[COLOR="Red"]DEINPROFILNAME[/COLOR]\prefs.js"

$ffproxyoff = "user_pref(" & Chr (34) & "network.proxy.type" & Chr (34) & ", 0);"

$ffproxyon = "user_pref(" & Chr (34) & "network.proxy.type" & Chr (34) & ", 1);"

func getffproxy()
	FileOpen($file)
	$lines = _FileCountLines($file)

	For $i = 1 to $lines Step 1
		if FileReadLine($file, $i) = $ffproxyoff OR FileReadLine($file, $i) = $ffproxyon then Return $i
	Next
	FileClose($file)
EndFunc

Und mit einer der beiden folgenden Zeilen aktiviere oder deaktiviere ich dann den Proxy:

Code:
_FileWriteToLine($file, getffproxy(), $ffproxyon, 1)

_FileWriteToLine($file, getffproxy(), $ffproxyoff, 1)

Kannst gerne nachfragen wenn du was net verstehst.
Mein Code funktioniert immer und ist unabhängig von irgendwelchen sleeps :p

Gruß
Fr4g3r
 
Vermutlich könnte er auch einfach eine Batch schreiben, die das Config File "tauscht" und dann Firefox öffnet. Wüsste nicht was dagegen spricht.
 
Das File
C:\Users\DEINBENUTZERNAME\AppData\Roaming\Mozilla\Firefox\Profiles\DEINPROFILNAME\prefs.js
ist die Datei die im Browser als about:config ausgegeben wird...
"network.proxy.type" -> is klar aber was ist das
& Chr (34) ??? und wo zu brauch man das?
Und wie geht das mit dem Umschalten? Automatisch, also er sieht eine 0 drin also ändern in 1 oder sinds auch zwei Scripte.
Danke schon mal.
MfG Dragon

@DIJI2008 An die Batch hat ich auch schon gedacht aber kann ja keine Tastendrücke simulieren, aber auf die Idee die Config Dateien zu tauschen bin ich auch noch nicht gekommen.
 
Dragon45 schrieb:
Das File
C:\Users\DEINBENUTZERNAME\AppData\Roaming\Mozilla\Firefox\Profiles\DEINPROFILNAME\prefs.js
ist die Datei die im Browser als about:config ausgegeben wird...
"network.proxy.type" -> is klar aber was ist das
& Chr (34) ??? und wo zu brauch man das?
Und wie geht das mit dem Umschalten? Automatisch, also er sieht eine 0 drin also ändern in 1 oder sinds auch zwei Scripte.
Danke schon mal.
MfG Dragon

@DIJI2008 An die Batch hat ich auch schon gedacht aber kann ja keine Tastendrücke simulieren, aber auf die Idee die Config Dateien zu tauschen bin ich auch noch nicht gekommen.

Genau, das ist die about:config file.
Chr(34) ist der Code in Autoit für die "-Zeichen. Da ich das vor und nach dem String anhängen will mache ich ein Chr(34) & String & Chr(34) .
Damit ist der String in "" geschrieben.

Das ganze läuft bei mir in einem Script.

Mit dem Umschalten kommt es halt drauf an wie du das haben willst.
Bei mir ist es so, dass ich im Script vorher abprüfe ob ich mich mit dem Laptop in einem bestimmten Netz befinde oder nicht. Befinde ich mich in dem Netz, dann soll er den Proxy aktivieren. Befinde ich mich dort nicht, dann soll der Proxy deaktiviert werden.

Da kann man praktisch alles machen wie man das braucht. Wann soll bei dir umgeschalten werden? Man kann z.b. auch eine Gui mit zwei Buttons machen oder vieles mehr.

Gruß
 
Ohne das jetzt getestet zu haben würde ich zwei Batch Dateien schreiben:

1. Kopiere Proxy Config in FF und starte Firefox

2. Kopiere non Proxy Config in FF und starte Firefox
 
@DIJI2008 ja so Ähnlich müsste das funktionieren

@Fr4g3r irgendetwas mach ich falsch -> da
C:\Users\#######\Desktop\Proxy.au3 (20) : ==> Unknown function name.:
$lines = _FileCountLines($file)
$lines = ^ ERROR
>Exit code: 1 Time: 0.221

Edit
mit zweimal Stift e kommt man im Menü Extra auf Einstellungen...
Damit ist der String in "" geschrieben. Als ich das gelesen habe fiel es mir wie schuppen von den Augen ... war eigendlich klar ... XD
 
Zuletzt bearbeitet:
Sorry, das hatte ich vergessen.

Oben muss noch folgendes hin:

Code:
#Include <File.au3>
 
mh gut jetzt kommt keine Fehlermeldung mehr aber funktionieren tuts auch nicht ...
woran sieht man das er auf den Proxy umstellt?
 
Hast du den Pfad zur Datei auch im Skript auf den richtigen Pfad abgeändert?
War der Firefox zu beim Ausführen des Skripts?
Du kannst das Kontrollieren in dem du den Proxy ganz normal ausschaltest, den Firefox schließt und das Skript ausführst. Anschließend den FF wieder starten und schauen ob der Proxy an ist.

Dann natürlich aber nur die Linie zum aktivieren reinmachen und die zum deaktivieren rausnehmen oder auskommentieren.

Also mal so:
Code:
#Include <File.au3>

$file = "C:\Users\DEINBENUTZERNAME\AppData\Roaming\Mozilla\Firefox\Profiles\DEINPROFILNAME\prefs.js"

$ffproxyoff = "user_pref(" & Chr (34) & "network.proxy.type" & Chr (34) & ", 0);"

$ffproxyon = "user_pref(" & Chr (34) & "network.proxy.type" & Chr (34) & ", 1);"

func getffproxy()
	FileOpen($file)
	$lines = _FileCountLines($file)

	For $i = 1 to $lines Step 1
		if FileReadLine($file, $i) = $ffproxyoff OR FileReadLine($file, $i) = $ffproxyon then Return $i
	Next
	FileClose($file)
EndFunc

_FileWriteToLine($file, getffproxy(), $ffproxyon, 1)


Aber natürlich mit dem richtigen Pfad zur Datei!

Gruß
 
Zuletzt bearbeitet:
Jopp na das funktioniert doch ein wand frei ... allerdings das der FF zu sein muss, stört mich etwas ...
Der Grund (jetze kann ich´s ja raus lassen) YouTube Videos für Deutsche jaja die GEMA wieder ...
bei meinem Script anklicken kurz warten Tab neu laden und schon geht´s los.

Aber is ne prima Lösung von dir und ich habe wieder was in der Programmierung gelernt, das war es mir schon Wert.
Vielen Dank

MfG Dragon

Gute NAcht und guten start in die neue Woche.
 
Zurück
Oben