Warum sollte wikipedia besser sein als ein Wörterbuch? Zumal die Performance mit Sicherheit auch nicht die beste ist und das Ganze nicht mal an einem Rechner ohne Internetverbindung funktioniert (bei Scrabble-Spielen z.B. mit Notebook). Einfach die Abfragen aus dem Wörterbuch performanter machen und gut.
Beiträge von teh_hahn
-
-
Hi,
Leute manchmal versteh ich Euch nicht. AutoIt ist meines Erachtens die am besten dokumentierte Skriptsprache. rtfm.
Ich will's Dir trotzdem nochmal aufzeigen. Hilfe sagt (Im Index zu finden unter #include [wer hätte das gedacht!]:
Zitat#include "[path\]filename"
Parameters
filename - The filename of the current script to include. Path is optional. This must be a string--it cannot be a variable. [...]Einzige Möglichkeit: Relativen Pfad nehmen. Beispiel:
[autoit]
Skript liegt in "D:\TestSkript", Include-Datei liegt in "D:\includes", dann machst Du:#include "..\includes\MyInclude.au3"
[/autoit]Bitte lest das Manual, bitte!
EDIT: Includes, werden ausserdem quasi in das Skript rein kopiert, es gibt keinen Grund das zur Laufzeit zu tun. Nimm einfach alle Includes, die Du brauchst mit rein in Dein Skript und fertig!
-
Mal ganz davon abgesehen, dass ich cheaten sche*!$ finde, sollte einem doch zumindest klar sein, dass man zumindest zufällige Sleeps nimmt, damit man nicht erwischt wird...
Irgendwie wird das hier mit den Bots immer mehr. Ich bin mal dafür, direkt nach Thread-Eröffnung den Thread zu schließen und eine Warning für den Benutzer auszusprechen. (2nd try = Ban...)
Geht einem langsam gegen den Strich, dass sich hier Benutzer registrieren, die ihren Bot hier fertig machen wollen und sich dann nie wieder blicken lassen.
@Cokess & @Speedy: Nix für ungut!
-
Meines Erachtens nicht mit AutoIt möglich. Wenn jemand was Anderes weiß, immer her damit!
-
Ok, so meinst Du das. Ist natürlich auch eine Möglichkeit... Ich überprüf aber lieber auf
[autoit]If @error Then
[/autoit]bei Funktionen...
Jedem halt das Seine...

-
Also, bei mir klappt das soweit. Habe natürlich keine SQL-Instanz laufen, weswegen ein Error zurückgegeben wird. Gehe ich Recht in der Annahme, dass wenn Du eine Verbindung aufgebaut hast (manuell mit der EXE) das Programm neue Eingaben erwartet? Dann musst Du die StdIn anpassen, da er aus der While Schleife nicht mehr herauskommt. Versuch mal folgendes:
Spoiler anzeigen
[autoit]#NoTrayIcon
[/autoit]
#include <GUIConstants.au3>
Opt("GUICloseOnESC", 0)
Opt("MustDeclareVars", 1)
Local Const $S_LOGFILE = @ScriptDir & "\log.txt"
Local $h_ipedit = -1, $h_useredit = -1, $h_passwdedit = -1, $h_connbt = -1, _
$h_cmdedit = -1, $h_sendbt = -1, $h_endbt = -1, $h_statusedit = -1
Local $s_ip = "", $s_user = "", $s_passwd = "", $s_stdout = ""
Local $i_msg = 0, $i_pid = 0
If FileExists($S_LOGFILE) Then FileDelete($S_LOGFILE)
GUICreate("GUI", 800, 500)
GUICtrlCreateLabel("IP", 10, 30)
$h_ipedit = GUICtrlCreateInput("88.249.224.169", 70, 30, 200, 20)
GUICtrlCreateLabel("User", 10, 70)
$h_useredit = GUICtrlCreateInput("", 70, 70, 200, 20)
GUICtrlCreateLabel("Passwort", 10, 110)
$h_passwdedit = GUICtrlCreateInput("", 70, 110, 200, 20)
$h_connbt = GUICtrlCreateButton("Verbinden", 130, 140)
GUICtrlCreateLabel("Manueller Befehl", 130, 190)
$h_cmdedit = GUICtrlCreateInput("", 70, 220, 200, 20)
GUICtrlSetState(-1, $GUI_DISABLE)
$h_sendbt = GUICtrlCreateButton("Senden", 140, 250)
GUICtrlSetState(-1, $GUI_DISABLE)
$h_endbt = GUICtrlCreateButton("Schließen", 730, 470)
GUICtrlCreateLabel("Warte auf Daten...", 300, 10, 400, 420)
$h_statusedit = GUICtrlCreateEdit("", 300, 10, 480, 300)
GUICtrlSetState(-1, $GUI_HIDE)
GUISetState()
While 1
$i_msg = GUIGetMsg()
Select
Case $i_msg = $h_connbt
$s_ip = GUICtrlRead($h_ipedit)
If Not $s_ip Then
MsgBox(48, "Achtung", "Es wurden keine IP eingetragen")
ContinueCase
EndIf
$s_user = GUICtrlRead($h_useredit)
If Not $s_user Then
MsgBox(48, "Achtung", "Es wurden kein Benutzername eingetragen")
ContinueCase
EndIf
$s_passwd = GUICtrlRead($h_passwdedit)
;~ If Not $s_passwd Then
;~ MsgBox(48, "Achtung", "Es wurden kein Passwort eingetragen")
;~ ContinueCase
;~ EndIf
If Not Ping($s_ip) Then
MsgBox(48, "Achtung", "Die eingetragene IP ist offline")
ContinueCase
EndIf
GUICtrlSetData($h_statusedit, "Verarbeite")
$i_pid = Run(@ComSpec & " /c " & "SQLcmd.exe " & $s_user & " " & $s_passwd & " " & $s_ip, @WorkingDir, @SW_HIDE, 7)
If @error Then
MsgBox(48, "Achtung", "SQLcmd.exe konnte nicht gestartet werden")
ContinueCase
EndIf
$s_stdout = StdoutRead($i_pid)
GUICtrlSetState($h_cmdedit, $GUI_ENABLE)
GUICtrlSetState($h_sendbt, $GUI_ENABLE)
GUICtrlSetState($h_statusedit, $GUI_SHOW)
GUICtrlSetData($h_statusedit, $s_stdout)
FileWrite($S_LOGFILE, $s_stdout)
Case $i_msg = $h_sendbt
StdinWrite($i_pid, GUICtrlRead($h_cmdedit))
StdinWrite($i_pid)
While 1
$s_stdout &= StdoutRead($i_pid)
If @error Then ExitLoop
WEnd
GUICtrlSetData($h_statusedit, $s_stdout)
FileWrite($S_LOGFILE, $s_stdout)
Case $i_msg = $h_endbt Or $i_msg = $GUI_EVENT_CLOSE
Exit
EndSelect
WEnd -
Ne, da hast Du schon recht. Interessierte mich halt bloß. Werde auch wohl bei meiner bisherigen Schreibweise bleiben, nur das mit den Variablenpräfixen wie n für numeric werd ich wohl übernehmen.
[autoit]
Zu Deinem letzten Satz: Stellt sich die Frage, was schneller ist, wenn eine Funktion einen Error zurückgeben soll:
SetError(1)
[/autoit]
Return (0)
[autoit]
oderReturn (SetError(1, 0, 0))
[/autoit]
Ich persönlich präferiere das letztere, da platzsparend. -
Na dann benutz doch einfach die ControlID und nicht den Bezeichner:
[autoit]ControlClick ( "title", "text", controlID [, button [, clicks [, x [, y ]]]] )
[/autoit]Zudem lassen sich WinTitle und WinText immer wunderbar in eine Variable packen, z.B.::
[autoit]Local $s_wintitle = "Microsoft Office Visio Viewer 2003-Setup"
[/autoit]
Wenn sich das ändert einfach die Variable überschreiben. Minimiert das Pflegen von SilentSkripten ungemein. -
OK, danke. damit setze ich mal auf gelöst. Vielleicht hilft es ja dem Einen oder Anderen noch.
-
Hi, also erstmal danke. Das mit dem Const habe ich mir ja bereits so gedacht, also danke für die Bestätigung!
Und zu dem "Default". lol...
Jetzt fällts mir wie Schuppen von den Augen. Macht ja total Sinn. Er nimmt dann also quasi den Wert, der als Standard im Funktionskopf ist. Also quasi wenn ich den dritten Parameter setzen möchte, nicht aber den zweiten, weil er mir Schnuppe ist und ich den Standardwert für ihn verwenden möchte. Leider geht das nicht:Spoiler anzeigen
[autoit]Local $aiArray[2] = [0, 1]
[/autoit] [autoit][/autoit] [autoit]
_TestFunc($aiArray, Default, 1)Func _TestFunc(Const ByRef $avArray, Const $iMODE = 0, Const $iCASE = 0)
[/autoit]
MsgBox(0, "_TestFunc", "$iMODE: " & $iMODE & @CR & "$iCASE: " & $iCASE)
If $iMODE = 1 Then MsgBox(0, "_TestFunc", "$iMODE is enabled!")
If $iCASE = 1 Then MsgBox(0, "_TestFunc", "$iCASE is enabled!")
EndFunc
Es funzt erst, wenn man es so macht. (Was meiner Meinung nach in keinem Verhältnis steht...):Spoiler anzeigen
[autoit]Local $aiArray[2] = [0, 1]
[/autoit] [autoit][/autoit] [autoit]
_TestFunc($aiArray, Default, 1)Func _TestFunc(Const ByRef $avArray, $iMODE = Default, $iCASE = Default)
[/autoit]
If $iMODE = Default Then $iMODE = 0
If $iCASE = Default Then $iCASE = 0
MsgBox(0, "_TestFunc", "$iMODE: " & $iMODE & @CR & "$iCASE: " & $iCASE)
If $iMODE = 1 Then MsgBox(0, "_TestFunc", "$iMODE is enabled!")
If $iCASE = 1 Then MsgBox(0, "_TestFunc", "$iCASE is enabled!")
EndFunc
Womit wir wieder bei den Const wären. Das zweite ist garantiert langsamer als das erste (aufgrund der zwei Zuweisungen). Hab ich da jetzt was mit "Default" falsch verstande, oder ist das wirklich so gedacht? -
Hi,
ich möchte behaupten, dass ich in AutoIt mittlerweile einigermaßen durchblicke. Drei Sachen sind mir jedoch noch nicht ganz klar:
1. Func...Return...EndFunc:
Der optionale Const-Parameter für eine übergebene Variable wird so gut wie nie genutzt (zumindest bei Funktionen, die mir bisher untergekommen sind!) Entweder ist mir was entgangen, oder alle anderen benutzen ihn einfach nicht, weil er keinen Geschwindigkeitsvorteil bringt oder... Ja, warum? So wie ich das sehe, sind doch (fast) alle Parameter, die man einer Funktion übergibt konstant, es sei denn man will den Wert einer übergebenen Variable direkt ändern, dann benutzt man halt ByRef.
Die Hilfe sagt folgendes dazu:CodeThe Const keyword is optional and indicates that the value of the parameter will not change during the execution of the function. A variable declared Const can only be passed to a function using a Const parameter.
2. Default
Welchen Sinn, macht das Keyword Default? Wenn ich einem Parameter einer Funktion keinen Wert übergeben will, so setze ich ihn im Funktionskopf einfach auf 0 und mache ihn damit optional. Ein standardmäßiges Setzen auf Default, führt ja dazu, dass in der Variablen "Default" steht. Dann müsste ich ja auf "Default" prüfen und die Variable überschreiben, womit sie dann wiederum auch nicht Const sein dürfte. Ich hoffe das Ganze ist noch nachzuvollziehen!
3. Enum
Kann mir jemand ein Beispiel für die Anwendung von einem Enum geben (sinnvoll)?Hier noch ein wenig Code zur Veranschaulichung:
Spoiler anzeigen
[autoit]#NoTrayIcon
[/autoit] [autoit][/autoit] [autoit]
Opt("MustDeclareVars", 1)Local Enum $eiCount0, $eiCount1, $eiCount2
[/autoit] [autoit][/autoit] [autoit]
Local $aiArray[2] = [0, 1]_TestFunc0($aiArray, Default)
[/autoit] [autoit][/autoit] [autoit]
_TestFunc1($aiArray, Default)Func _TestFunc0(Const ByRef $avArray, Const $iMODE = 1)
[/autoit] [autoit][/autoit] [autoit]
If $iMODE = 1 Or $iMODE = Default Then
MsgBox(0, "_TestFunc0", "Hier würde etwas passieren!" & @CR & "$iMODE: " & $iMODE & @CR & _
"Wenn $iMODE hier gleich 'Default' ist, könnte man nicht mit $iMODE weiter arbeiten!")
Return (1)
EndIf
EndFunc ;==>_TestFunc0Func _TestFunc1(Const ByRef $avArray, $iMODE = 1)
[/autoit]
If $iMODE = Default Then $iMODE = 1
If $iMODE = 1 Then
MsgBox(0, "_TestFunc1", "Hier würde etwas passieren!" & @CR & "$iMode: " & $iMODE)
Return (1)
EndIf
EndFunc ;==>_TestFunc1 -
Hi,
Die Optionen vor den includes? Das würde doch bedeuten, dass wenn ich Opt("MustDeclareVars", 1) mache und in einer include-Datei nicht alle Variablen/Konstanten deklariert wurden, mir mein Skript abschmiert. Meine Reihenfolge ist:
1. includes
2. Options
3. main-Func
4. other FuncsDu sagtest, für AutoIt gibt es keinen wirklichen Standard. Die Seite, die ich oben verlinkt habe ist aber defakto Standard, da es die Anforderungen des Entwicklers sind um UDFs mit in den AutoIt-Release mit aufzunehmen, von daher würde ich das schon so bezeichnen, oder nicht?
-
Hi,
da ich meinen Coding-Stil momentan umstelle, um schnelleren und übersichtlichern Code zu schreiben, fragte ich mich, ob es nicht irgendwo so etwas wie eine Art "Norm" für AutoIt3-SourceCode gibt. Ich bin auch schnell fündig geworden und zwar hier: User Defined Functions Standard
Das mit der Bezeichnung von Funktionsnamen war mir vorher schon klar, nicht jedoch folgendes:
Originalzitat:Spoiler anzeigen
ZitatAlles anzeigenVariable Names
[...]
$a<letter> - Array (the following letter describes the data type taken from the rest of the data types below)
$b - Binary data
$h - File or window handle
$i - Integer
$f - Boolean
$n - Floating point number
$s - String
$v - Variant (unknown/variable type of data)
[...]
Deutsche Übersetzung: thx GtaSpiderSpoiler anzeigen
ZitatAlles anzeigen
Variablennamen:
[...]
$a<Buchstabe> - Array (Der folgende Buchstabe beschreibt den Datentyp, entnommen aus den unten stehenden Datentypen)
$b - Binäre Daten
$h - Datei oder Fenster handle (auch ControlIDs)
$i - Integer (Ganzzahlen, z.B.: -1, 0, 1)
$f - Boolean (Wahrheitswerte: False, True)
$n - Floating point number (Gleitkommazahlen, wobei die Variable die Form dddd.dddd hat. dddd kann dabei aus einer oder mehreren dezimalen Zahlen bestehen.)
$s - String (Zeichenkette, z.B.: "Dies ist ein String!")
$v - Variation (Unbekannter / unterschiedliche Datentypen)
[...]
Bei dieser Gelegenheit will ich einmal den Unterschied zwischen Dim / Global / Local erklären:
Dim / Global / Local:Spoiler anzeigen
Die Dim/Local/Global Schlüsselwörter führen ähnliche Funktionen aus:
1. Sie deklarieren eine Variable bevor man sie nutzt (ähnlich zu VBSkript)
2. Sie erschaffen ein ArrayDabei sollte beachtet werden, dass Dim nicht mehr benutzt werden sollte, Local nur in Funktionen Sinn macht und Global immer ausserhalb von Funktionen eingesetztv wird. Zudem sollte ganz oben im Skript (unter den includes folgendes eingefügt werden:
[autoit]Opt("MustDeclareVars", 1)
[/autoit]Damit wird gewährleistet, dass Variablen vor ihrer Nutzung explizit deklariert werden müssen.
[autoit]
Variablen sollten auch immer nach ihrem Zweck benannt werden (am Besten auf Englisch). Beispiel: $iC ist nicht aussagekräftig, $iCounter hindessen schon:Opt("MustDeclareVars", 1)
[/autoit] [autoit][/autoit] [autoit]
Global $as_fnames[2] = ["Klaus", "Hans"]
Global $f_error = False
MyFunc(182.57)Func MyFunc(Const $N_TIME = 0.0)
[/autoit] [autoit][/autoit] [autoit]
Local $i_multiplier = 60Return ($i_multiplier * $N_TIME)
[/autoit]
EndFunc
[autoit]
Die Frage, die sich mir nun stellt ist, wie benennt man Konstanten (also Variablen, die mit Local Const deklariert wurden...)? Nach der obigen Definition sieht ja jede Variable/Konstante, hier z.B. eine Integerkonstante, so aus:Local Const $iStartIndex = 1
[/autoit]
[autoit]
Bisher hatte ich mir angewöhnt, Konstanten immer groß und Variablen immer klein zu schreiben, zudem mit dem jeweiligen Bezeichner und einem "_" davor, z.B.:Local Const $I_STARTINDEX = 1
[/autoit]Dies wäre aber laut dem Standard falsch. Ich möchte ab jetzt meinen Code nach den Standards gestalten, womit aber das Problem bleibt, dass sich Variablen und Konstanten im SourceCode nicht mehr auf Anhieb unterscheiden lassen (Eigentlich nicht so schlimm, würde mich aber interessieren ob es da auch eine bestimmte "Benamsung" gibt).
Da ich zu Anfang bereits Geschwindigkeit ansprach möchte ich hier noch einmal die wichtigsten Erkenntnisse diesbezüglich wiederholen (hier Verweise ich auf den AutoIT SpeedTester

Spoiler anzeigen
ZitatAlles anzeigen1. For/Next loops are champions. Try not to use While/Wend or Do/Until
2. If $Val is faster than If $Val = 1 or $Val = TRUE
3. If $Val = 1 is faster than $Val = TRUE
4. If Not $Val is faster than If $Val = 0 or $Val = FALSE
5. If $Val = 0 is faster than If $Val = FALSE
6. < and > are faster than =, >= or <= (Wow!)
7. $i += 1 is faster than $i = $i + 1
$i -= 1 is faster than $i = $i - 1
$i *= 1 is faster than $i = $i * 1
$i /= 1 is faster than $i = $i / 1
8. If doing a lot of verifications on a single variable:
Switch is fastest, Select is second (but slow) and If is slowest.
9. If $Val is a string, If Not $Val is faster than If $Val = ""
If $Val is faster than If $Val <> ""
10. When doing binary operations, If $Val -128 > 0 is twice as fast
as If BitAnd($Val, 128).
11. Using Hex numbers is faster than using decimal numbers
12 Replacing dec/hex numbers by variables slows down execution. Use hex/dec numbers when possible
13. Longer variable names = longer execution time. Keep variable names short and clear!
14. StringRegExpReplace() is slower than StringReplace(). Use it only if necessary!
15. StringRegExp() is slower than StringInStr(). Use only if necessary!
16. Opt("ExpandEnvStrings",1) makes $Val = "%TEMP%" faster than $Val = EnvGet("temp")
or $Val = @TempDir
17. $Val = @TempDir is faster than $Val = EnvGet("temp")
18. Opt("ExpandVarStrings",1) makes $Val = "$String$" slightly faster than $Val = $String
19. However $Val = "@TempDir@" is slower than $Val = @TempDir (go figure!)
Wer jetzt von Euch denkt, "Und? Wenn interessiert das nun?", der möge diesen Thread ignorieren. Ich bin jedoch immer dafür SourceCode einheitlich (nicht nur meinen untereinander, sondern auch in Bezug zu Anderem) zu halten und schneller zu machen.EDIT:
- Deutsche Übersetzung der Variablenbenennung hinzugefügt (thx GtaSpider ).
- Erklärung zu Dim / Global / Local hinzugefügt. -
Na, z.B. einfach:
Spoiler anzeigen
[autoit]For $i = 1 To 10
[/autoit]
ConsoleWrite("Schleifendurchlauf: " & $i & @CRLF)
Sleep(1000)
Next
Würde aber in Deinem Fall Do-Until machen... -
Poste mal die EXE-Datei, damit kommen wir am ehesten weiter. Benutz mal folgenden Code (waren noch zwei Dinge falsch):
Spoiler anzeigen
[autoit]#NoTrayIcon
[/autoit]
#include <GUIConstants.au3>
Opt("GUICloseOnESC", 0)
Opt("MustDeclareVars", 1)
Local Const $S_LOGFILE = @ScriptDir & "\log.txt"
Local $h_ipedit = -1, $h_useredit = -1, $h_passwdedit = -1, $h_connbt = -1, _
$h_cmdedit = -1, $h_sendbt = -1, $h_endbt = -1, $h_statusedit = -1
Local $s_ip = "", $s_user = "", $s_passwd = "", $s_stdout = ""
Local $i_msg = 0, $i_pid = 0
If FileExists($S_LOGFILE) Then FileDelete($S_LOGFILE)
GUICreate("GUI", 800, 500)
GUICtrlCreateLabel("IP", 10, 30)
$h_ipedit = GUICtrlCreateInput("88.249.224.169", 70, 30, 200, 20)
GUICtrlCreateLabel("User", 10, 70)
$h_useredit = GUICtrlCreateInput("", 70, 70, 200, 20)
GUICtrlCreateLabel("Passwort", 10, 110)
$h_passwdedit = GUICtrlCreateInput("", 70, 110, 200, 20)
$h_connbt = GUICtrlCreateButton("Verbinden", 130, 140)
GUICtrlCreateLabel("Manueller Befehl", 130, 190)
$h_cmdedit = GUICtrlCreateInput("", 70, 220, 200, 20)
GUICtrlSetState(-1, $GUI_DISABLE)
$h_sendbt = GUICtrlCreateButton("Senden", 140, 250)
GUICtrlSetState(-1, $GUI_DISABLE)
$h_endbt = GUICtrlCreateButton("Schließen", 730, 470)
GUICtrlCreateLabel("Warte auf Daten...", 300, 10, 400, 420)
$h_statusedit = GUICtrlCreateEdit("", 300, 10, 480, 300)
GUICtrlSetState(-1, $GUI_HIDE)
GUISetState()
While 1
$i_msg = GUIGetMsg()
Select
Case $i_msg = $h_connbt
$s_ip = GUICtrlRead($h_ipedit)
If Not $s_ip Then
MsgBox(48, "Achtung", "Es wurden keine IP eingetragen")
ContinueCase
EndIf
$s_user = GUICtrlRead($h_useredit)
If Not $s_user Then
MsgBox(48, "Achtung", "Es wurden kein Benutzername eingetragen")
ContinueCase
EndIf
$s_passwd = GUICtrlRead($h_passwdedit)
;~ If Not $s_passwd Then
;~ MsgBox(48, "Achtung", "Es wurden kein Passwort eingetragen")
;~ ContinueCase
;~ EndIf
If Not Ping($s_ip) Then
MsgBox(48, "Achtung", "Die eingetragene IP ist offline")
ContinueCase
EndIf
GUICtrlSetData($h_statusedit, "Verarbeite")
$i_pid = Run(@ComSpec & " /c " & "SQLcmd.exe " & $s_user & " " & $s_passwd & " " & $s_ip, @WorkingDir, @SW_HIDE, 7)
If @error Then
MsgBox(48, "Achtung", "SQLcmd.exe konnte nicht gestartet werden")
ContinueCase
EndIf
;~ Hier muss etwas angepasst werden
While 1
$s_stdout &= StdoutRead($i_pid)
If @error Then ExitLoop
WEnd
GUICtrlSetState($h_sendbt, $GUI_ENABLE)
GUICtrlSetState($h_endbt, $GUI_ENABLE)
GUICtrlSetState($h_statusedit, $GUI_SHOW)
GUICtrlSetData($h_statusedit, $s_stdout)
FileWrite($S_LOGFILE, $s_stdout)
Case $i_msg = $h_sendbt
StdinWrite($i_pid, GUICtrlRead($h_cmdedit))
StdinWrite($i_pid)
;~ Hier muss etwas angepasst werden
While 1
$s_stdout &= StdoutRead($i_pid)
If @error Then ExitLoop
WEnd
GUICtrlSetData($h_statusedit, $s_stdout)
FileWrite($S_LOGFILE, $s_stdout)
Case $i_msg = $h_endbt Or $i_msg = $GUI_EVENT_CLOSE
Exit
EndSelect
WEnd -
lol, trockene Antwort. Kein Problem!
Zum Thread gelöst markieren kannst Du ganz unten rechts im Thread beim Dropdown "Thema bearbeiten" auswählen und den Thread als gelöst markieren. Übersieht man leider immer!
-
Hi!
Dein Code war ja grausam. habe das Ganze mal so geschrieben, wie ich es machen würde (Wird bestimmt noch nicht funzen, aber poste mal, wo jetzt genau die Probleme sind mit meinem Code, dann kommen wir weiter!):
Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
Opt("GUICloseOnESC", 0)
Opt("MustDeclareVars", 1)Local Const $S_LOGFILE = @ScriptDir & "\log.txt"
[/autoit] [autoit][/autoit] [autoit]
Local $h_ipedit = -1, $h_useredit = -1, $h_passwdedit = -1, $h_connbt = -1, _
$h_cmdedit = -1, $h_sendbt = -1, $h_endbt = -1, $h_statusedit = -1
Local $s_ip = "", $s_user = "", $s_passwd = "", $s_stdout = ""
Local $i_msg = 0, $i_pid = 0If FileExists($S_LOGFILE) Then FileDelete($S_LOGFILE)
[/autoit] [autoit][/autoit] [autoit]GUICreate("GUI", 800, 500)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateLabel("IP", 10, 30)
$h_ipedit = GUICtrlCreateInput("88.249.224.169", 70, 30, 200, 20)
GUICtrlCreateLabel("User", 10, 70)
$h_useredit = GUICtrlCreateInput("", 70, 70, 200, 20)
GUICtrlCreateLabel("Passwort", 10, 110)
$h_passwdedit = GUICtrlCreateInput("", 70, 110, 200, 20)
$h_connbt = GUICtrlCreateButton("Verbinden", 130, 140)
GUICtrlCreateLabel("Manueller Befehl", 130, 190)
$h_cmdedit = GUICtrlCreateInput("", 70, 220, 200, 20)
GUICtrlSetState(-1, $GUI_DISABLE)
$h_sendbt = GUICtrlCreateButton("Senden", 140, 250)
GUICtrlSetState(-1, $GUI_DISABLE)
$h_endbt = GUICtrlCreateButton("Schließen", 730, 470)
GUICtrlCreateLabel("Warte auf Daten...", 300, 10, 400, 420)
$h_statusedit = GUICtrlCreateEdit("", 300, 10, 480, 300)
GUICtrlSetState(-1, $GUI_HIDE)
GUISetState()While 1
[/autoit]
$i_msg = GUIGetMsg()
Select
Case $i_msg = $h_connbt
$s_ip = GUICtrlRead($h_ipedit)
If Not $s_ip Then
MsgBox(48, "Achtung", "Es wurden keine IP eingetragen")
ContinueCase
EndIf
$s_user = GUICtrlRead($h_useredit)
If Not $s_user Then
MsgBox(48, "Achtung", "Es wurden kein Benutzername eingetragen")
ContinueCase
EndIf
$s_passwd = GUICtrlRead($h_passwdedit)
If Not $s_passwd Then
MsgBox(48, "Achtung", "Es wurden kein Passwort eingetragen")
ContinueCase
EndIf
If Not Ping($s_ip) Then
MsgBox(48, "Achtung", "Die eingetragene IP ist offline")
ContinueCase
EndIf
GUICtrlSetData($h_statusedit, "Verarbeite")
$i_pid = Run(@ComSpec & " /c " & "SQLcmd.exe " & $s_user & " " & $s_passwd & " " & $s_ip, @WorkingDir, @SW_HIDE, 6)
If @error Then
MsgBox(48, "Achtung", "SQLcmd.exe konnte nicht gestartet werden")
ContinueCase
EndIf
While 1
$s_stdout &= StdoutRead($i_pid)
If @error Then ExitLoop
WEnd
GUICtrlSetState($h_sendbt, $GUI_ENABLE)
GUICtrlSetState($h_endbt, $GUI_ENABLE)
GUICtrlSetState($h_statusedit, $GUI_SHOW)
GUICtrlSetData($h_statusedit, $s_stdout)
FileWrite($S_LOGFILE, $s_stdout)
Case $i_msg = $h_sendbt
StdinWrite($i_pid, GUICtrlRead($h_cmdedit))
StdinWrite($i_pid)
While 1
$s_stdout &= StdoutRead($i_pid)
If @error Then ExitLoop
WEnd
GUICtrlSetData($h_statusedit, $s_stdout)
FileWrite($S_LOGFILE, $s_stdout)
Case $i_msg = $h_endbt Or $i_msg = $GUI_EVENT_CLOSE
ProcessClose("SQLcmd.exe")
Exit
EndSelect
WEnd -
Hi,
bei mir gehen beide Deiner Versuche nicht. Mach doch einfach so:Spoiler anzeigen
[autoit]Local Const $S_FILE = "D:\netadapter.cfg"
[/autoit] [autoit][/autoit] [autoit]
Local Const $I_PID = Run(@ComSpec & ' /c "netsh.exe interface ip show config"', @SystemDir, @SW_HIDE, 2)
Local $s_stdout = ""
While 1
$s_stdout &= StdoutRead($I_PID)
If @error Then ExitLoop
WEnd
FileWrite($S_FILE, $s_stdout);~ Funktioniert bei mir auch nicht...
[/autoit]
;~ Run("netsh interface ip show config >D:\netadapter2.cfg", @SystemDir, @SW_HIDE)EDIT: Uups, hast ja eben in der Zwischenzeit schon selber gepostet. Bei mir siehts aber identisch aus, als wenn ich es mir über CMD in eine Datei schreibe.
-
Dann hast Du allerdings ein Problem. Wenn der Kontostand immer an der gleichen Stelle ist, kannst Du versuchen dir den Bildausschnitt zu holen und dann eine Art OCR zu programmieren, die dir das Ganze in eine Variable umwandelt.
-
Hi!
Um den Netzwerkverkehr zu betrachten. (Eventuelle Kollisionen etc.) benutz Du am besten Ethereal http://www.ethereal.com/ oder Packetyzer http://www.networkchemistry.com/products/packetyzer.php. Das Letztere finde ich persönlich einfacher zu bedienen (Ist aber lediglich eine Modifikation von Ethereal).
Über einen einfachen Ping wirst Du niemals Informationen darüber erhalten, was in Deinem netzwerk geschieht.