Gleich nach _FileListToArray...
[autoit]If Not IsArray ($dir) Then Exit MsgBox (0, "", "Random Message.")
[/autoit]Gleich nach _FileListToArray...
[autoit]If Not IsArray ($dir) Then Exit MsgBox (0, "", "Random Message.")
[/autoit]Probier doch mal diese Funktion aus:
Func _StringCountFilledLines ($s_String)
Local $a_String = StringSplit ($s_String, @CRLF, 1)
Local $i_Ret = 0
For $i = 1 To $a_String[0]
If $a_String[$i] <> '' Then $i_Ret += 1
Next
Return $i_Ret
EndFunc ;==> _StringCountFilledLines
Als $s_String übergibst du den Inhalt deines Edit-Controls.
Der Rückgabewert ist dann immer die Anzahl der gefüllten Zeilen. ![]()
#include <Inet.au3>
$PublicIP = _GetIP()
MsgBox(0, "IP Address", "Your IP Address is: " & $PublicIP)
TCPStartup() ; <!-- wichtig
msgbox(0,"IP???",TCPNameToIP("localhost"))
TCPShutdown()
Du könntest doch einfach in beiden Exe'n den gleichen Pfad angeben... ![]()
Ne, also allgemein könntest du eine Textdatei oder eine Ini anlegen, in der du dann den derzeit verwendeten Pfad speicherst.
IniWrite
IniRead
Alternativ kannst du dafür auch die Registry nutzen (würde ich nur in ganz wichtigen Fällen machen).
RegWrite
RegRead
Falls die eine Exe von der anderen Exe gestartet wird, kannst du mit der Parameterübergabe den Pfad übergeben.
; ...
Global $sPath = @TempDir & '\logfile.txt'
ShellExecute ('deine_exe.exe', $sPath)
; ...
Der bzw. die übergebene(n) Parameter befindet/n sich dann in dem Array $CmdLine
Auf Wunsch später mehr dazu.
Komm darauf an, für welche Methode du dich entscheidest.
Hier, mit AdlibRegister...
#include <GUIConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("IPR", 548, 340, 185, 132)
$Button1 = GUICtrlCreateButton("Let me read a your IP and Computer Name :)", 0, 8, 545, 73, 0)
GUICtrlSetFont(-1, 16, 400, 2, "Lithos Pro Regular")
$Input1 = GUICtrlCreateInput("", -8, 144, 481, 21)
$Progress1 = GUICtrlCreateProgress(0, 224, 478, 17)
$Label1 = GUICtrlCreateLabel("IP Adress", 0, 120, 49, 17)
$Label2 = GUICtrlCreateLabel("Computer Name", 0, 168, 80, 17)
$Input2 = GUICtrlCreateInput("", 0, 184, 473, 21)
$Button2 = GUICtrlCreateButton("Close", 0, 280, 539, 57, 0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
AdlibRegister ("_Progress", 500)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
MsgBox ( 0," Register at our Forum", "You get connected to our site")
ShellExecute (" http://teamsuicide.de.tl")
Case $Form1
Case $Button2
MsgBox ( 0," Register at our Forum", "You get connected to our site")
ShellExecute (" http://teamsuicide.de.tl")
EndSwitch
$mac = @ComputerName
$ip = @IPAddress1
#cs
GUICtrlSetData ($Progress1, 10)
Sleep (500)
GUICtrlSetData ($Progress1, 20)
Sleep (500)
GUICtrlSetData ($Progress1, 30)
Sleep (500)
GUICtrlSetData ($Progress1, 40)
Sleep (500)
GUICtrlSetData ($Progress1, 50)
Sleep (500)
GUICtrlSetData ($Progress1, 60)
Sleep (500)
GUICtrlSetData ($Progress1, 70)
Sleep (500)
GUICtrlSetData ($Progress1, 80)
Sleep (500)
GUICtrlSetData ($Progress1, 90)
Sleep (500)
GUICtrlSetData ($Progress1, 100)
Sleep (500)
GUICtrlSetData ($input1, $ip)
GUICtrlSetData ($input2, $mac)
#ce
WEnd
Func _Progress ()
Local Static $i_Percent = 0
GUICtrlSetData ($Progress1, $i_Percent)
If $i_Percent > 100 Then
GUICtrlSetData ($input1, $ip)
GUICtrlSetData ($input2, $mac)
$i_Percent = 0
Else
$i_Percent += 10
EndIf
EndFunc
Func ShowMessage()
MsgBox(4096, "", "Thank you for using the program. Please register at our page.")
EndFunc ;==>ShowMessage
If $Form1 Then
ShellExecute ("http://www.teamsuicide.de.tl")
EndIf
Du solltest lernen, Leerzeilen zu setzen und den Tabulator zu benutzen... Dein Code ist ein Graus.
$zahl = InputBox("Hi!", "Was ergibt 13 * 7?")
[/autoit][autoit][/autoit][autoit]If $zahl = 91 Then
MsgBox(6, $zahl, "Richtig!")
Else
MsgBox(0, $zahl, "Die Antwort ist leider falsch.")
EndIf
Wenn du ElseIf bzw Else benutzt (also mehr, als nur einen Einzeiler machst), musst du die Anweisungen in einer neuen Zeile schreiben. ![]()
Der Fehler ist in Zeile 7.
Eine If-Abfrage besteht immer aus dem Anführenden "If" und endet meistens mit einem "EndIf".
Es geht auch ohne "EndIf", wenn es ein Einzeiler ist (wie in Zeile 3).
Dazwischen kannst du "ElseIf" oder "Else" benutzen. Deren Funktionalität scheinst du ja zu kennen... ![]()
In Zeile 7 fragst du aber wieder mit "If" ab, was eben der Fehler ist. Dort gehört ein "ElseIf" rein.
Das, was in die Konsole geschrieben wird, kannst du dir in Scite ansehen, wenn du dein Script von dort aus startest.
Mit dem Hotkey F5 oder Tools -> Go.
Alternativ kannst du die Zeile aber auch mit folgender ersetzen:
[autoit]ToolTip ($s_String)
[/autoit]Global $s_String ; Definierst einen leeren String
[/autoit] [autoit][/autoit] [autoit]While True
For $i = 48 To 90 ; Fragst in einer Schleife nach allen alphanumerischen Zeichen ab
If _IsPressed (Hex ($i, 2)) Then
While _IsPressed (Hex ($i, 2))
Sleep (1)
WEnd
$s_String &= Chr ($i) ; Hängst die gedrückte Taste an den bestehenden String an
ConsoleWrite ($s_String &@CRLF) ; Schreibst diesen in die Konsole
EndIf
Next
WEnd
Func _IsPressed($sHexKey, $vDLL = 'user32.dll')
; $hexKey must be the value of one of the keys.
; _Is_Key_Pressed will return 0 if the key is not pressed, 1 if it is.
Local $a_R = DllCall($vDLL, "short", "GetAsyncKeyState", "int", '0x' & $sHexKey)
If @error Then Return SetError(@error, @extended, False)
Return BitAND($a_R[0], 0x8000) <> 0
EndFunc ;==>_IsPressed
Hm, ich habe irgendwie bei GUIRegisterMsg gesucht... :pinch:
Lag im Endeffekt doch nur an mir.
Vielen Dank! ![]()
Eine kurze und knappe Frage, auf die es sicher auch eine kurze Antwort gibt...
Wie kann ich (im OnEvent-Mode) auf die Wiederherstellung meiner GUI reagieren?
Wenn sie also minimiert war und wieder eingeblendet wird.
ControlSetText
[/autoit]Die dafür benötigte ControlID findest du am einfachsten mit dem "AutoIt Window Info"-Tool heraus.
Ich habe jetzt nicht wirklich Lust, den kompletten Code anzuschauen... So in etwa sollte es aber passen:
Func timer()
Local Static $i = 10
$i -= 1
GUICtrlSetData($Label30, $i)
If $i = 10 Then
$randomzahl1 = randomzahl1() ;Zahl generieren
GUICtrlSetData($Label3, $randomzahl1)
$randomzahl1 = randomzahl1()
GUICtrlSetData($Label5, $randomzahl1)
ElseIf $i = 0 Then
$i = randomzahl1()
EndIf
EndFunc ;==>timer
Etwa so sollte es funktionieren:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Timer", 214, 74, 192, 124)
GUISetFont(24, 800, 0, "MS Sans Serif")
$Label1 = GUICtrlCreateLabel("Timer", 0, 0, 210, 68)
GUICtrlSetFont(-1, 30, 800, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
AdlibRegister ("timer", 1000)
[/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func timer()
Local Static $i = 10
$i -= 1
GUICtrlSetData ($Label1, $i)
If $i = 0 Then
AdlibUnRegister ("timer")
MsgBox (0, "title", "text")
EndIf
EndFunc
Bei AutoIt gibt es nur Variants.
Was genau heißt "doch nix passiert"?
Ich persönlich verstehe bloß den Vergleich mit Ping < 6 nicht... Was genau soll das bezwecken? Warum gerade 6?
So könnte ich es mir jedenfalls vorstellen (nicht getestet):
[autoit]#region Funktionen für den Nicht-Online-Checker
Func onlinecheck()
If Ping("http://www.google.de/") Then
$timer = 0
Sleep(2000)
Else
$timer = TimerInit()
Do
Sleep (1000)
Until Ping("http://www.google.de/")
$timestring = TimerDiff($timer)
MsgBox(0,"",$timestring)
EndIf
EndFunc
#endregion
While 1
onlinecheck()
Sleep(200)
WEnd
$MsgBox = MsgBox(4+32, "", "In Textdatei schreiben?")
If $MsgBox = 6 Then
$sPath = @ScriptDir & "\coord.txt"
For $i = 0 To UBound ($aRet) - 1
FileWrite ($sPath, $aRet[$i][0] &", "& $aRet[$i][1] &", "& $aRet[$i][2])
Next
EndIf
An _FFStart übergibst du keine URL und deshalb bekommst du den Quellcode einer leeren Seite zurück (about:blank).
Du müsstest also mit den FF-Funktionen zu dem Punkt navigieren, von dem du den Code haben willst - oder du übergibst gleich eine Adresse.
Allgemein bessere Varianten wären InetRead bzw. _InetGetSource (aus der Inet.au3).
$CMDLine[n] enthält die Parameter, die an die Exe übergeben werden. In diesem Fall ist es der Pfad zur Quelldatei.
Dir ist aber schon bewusst, das _StringBetween intern auch einfach ein RegExp macht und daher in diesem Fall ein manuelle RegExp komplett unnötig ist ;).
Ja, ist mir klar. Doch damit sieht es schöner aus und ist auch etwas kürzer.
Ein StringRegExp ist auch etwa 67% schneller...