@MatthiasG: Ich hab's mal verschoben!
Beiträge von Oscar
-
-
Und was möchtest Du mir damit jetzt sagen?
-
Hier mal mein Script (hatte mal eine Funktion dafür geschrieben):
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GuiComboBoxEx.au3>
#include <GUIConstantsEx.au3>
#include <GuiImageList.au3>
#include <WindowsConstants.au3>; Array mit den korrekten Daten (jeweils: 'Benutzername', 'Passwort')
[/autoit] [autoit][/autoit] [autoit]
Global $aCorrect[5][2] = [['abcd', '123'],['efgh', '456'],['ijkl', '789'],['mnop', '012'],['qrst', '345']]Global $iTry = 0 ; Variable zum zählen der Versuche
[/autoit] [autoit][/autoit] [autoit]
Do
; Mögliche Werte für die Sprache: 'Dansk|Deutsch|English|Français'
Global $aInput = _LogInBox('Test', 3, 'Deutsch', False) ; Fenstertitel = "Test", Passwort = min. 3 Zeichen, Sprache = Deutsch
If @error Then Exit ; wenn der Benutzer auf [Abbrechen] geklickt hat
$iLoginID = -1
For $i = 0 To UBound($aCorrect) - 1
If $aInput[0] == $aCorrect[$i][0] And $aInput[1] == $aCorrect[$i][1] Then ; "==" Groß-/Kleinschreibung beachten!
MsgBox(0, 'Test', 'Benutzername und Passwort sind richtig!')
$iLoginID = $i
ExitLoop
EndIf
Next
If $iLoginID = -1 Then $iTry += MsgBox(0, $iTry + 1 & '. Versuch', 'Benutzername und/oder Passwort falsch!')
If $iTry = 3 Then Exit ; nach 3 Versuchen beenden
Until $iLoginID <> -1
MsgBox(0, 'Test', 'Benutzer "' & $aCorrect[$iLoginID][0] & '" hat sich angemeldet!'); Ab hier für das eigentliche Hauptprogramm
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
; \/#cs
[/autoit]
======================================================================================================================
Function Name: _LogInBox($sTitle [, $iMinLen [,$sStartLang [, $bPassVisible=True [, $iXPos=-1 [, $iYPos=-1]]]]])
Description: Eingabefenster für Benutzername und Passwort
Parameter(s): $sTitle = Fenstertitel
optional: $iMinLen = Mindestlänge des Passworts (Standard = keine Mindestlänge)
optional: $sStartLang = die Sprache auswählen (Standard = Deutsch)
optional: $bPassVisible = True/False = Passwort sichtbar anzeigen Ja/Nein (Standard = Ja)
optional: $iXPos = Horizontale Position des Fensters (Standard = zentriert)
optional: $iYPos = Vertikale Position des Fensters (Standard = zentriert)
Return Value(s): Array mit 2 Elementen (Benutzername und Passwort)
Bei "Abbrechen" oder "Schließen" wird @error = 1
Required: #include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiComboBoxEx.au3>
#include <GuiImageList.au3>
#include <WindowsConstants.au3>
Author(s): Oscar (http://www.autoit.de)
======================================================================================================================
#ce
Func _LogInBox($sTitle, $iMinLen = 0, $sStartLang = 'Deutsch', $bPassVisible = True, $iXPos = -1, $iYPos = -1)
If $iMinLen < 0 Or $iMinLen = Default Then $iMinLen = 0
If $sStartLang = -1 Or $sStartLang = Default Then $sStartLang = 'Deutsch'
If $bPassVisible = -1 Or $bPassVisible = 'Default' Then $bPassVisible = True
If $iXPos < 0 Or $iXPos = Default Or $iXPos > @DesktopWidth Then $iXPos = -1
If $iYPos < 0 Or $iYPos = Default Or $iXPos > @DesktopHeight Then $iYPos = -1
Local $hGui, $hUserLabel, $hUser, $hPass, $hCheck, $hLanguage, $hCancel, $hOk
Local $iOpt, $sStyle, $sTmp, $aLanguage, $iLanguage, $hImage
Local $iErr, $sFont = 'Arial', $aOut[2]
Local $iBGColorInner = 0xBBBBBB, $iBGColorOuter = 0xEEEEEE
Local $sIconsPath = @ScriptDir & '\icons.icl'
Local $sLang = 'Dansk|Deutsch|English|Français'
Local $aTranslation[4][7] = [ _
['Brugernavn:' & @CRLF & '(påkrævet)', _ ; Dänisch
'Password:', _
@CRLF & '(mindst ' & $iMinLen & ' tegn)', _
'&Password synlige', _
'Abonner...', _
'Annuller', ''], _
['Benutzername:' & @CRLF & '(erforderlich)', _ ; Deutsch
'Passwort:', _
@CRLF & '(min. ' & $iMinLen & ' Zeichen)', _
'&Passwort sichtbar', _
'Anmelden...', _
'Abbrechen', ''], _
['Username:' & @CRLF & '(needed)', _ ; Englisch
'Password:', _
@CRLF & '(min. ' & $iMinLen & ' Chars)', _
'&Password visible', _
'Log in...', _
'Cancel', ''], _
['Nom:' & @CRLF & '(nécessaire)', _ ; Französisch
'mot de passe:', _
@CRLF & '(min. ' & $iMinLen & ' lettre)', _
'&mot de passe visible', _
'déclarer...', _
'Annuler', '']]
$aLanguage = StringSplit($sLang, '|')
For $i = 1 To $aLanguage[0]
If $sStartLang = $aLanguage[$i] Then $iLanguage = $i - 1
Next
$iOpt = Opt('GUIOnEventMode', 0)
$hGui = GUICreate($sTitle, 343, 200, $iXPos, $iYPos, BitOR($WS_SYSMENU, $WS_VISIBLE))
GUISetIcon(@SystemDir & '\shell32.dll', -212)
GUISetBkColor($iBGColorOuter)
GUICtrlCreateLabel('', 5, 5, 325, 120, -1, $WS_EX_CLIENTEDGE)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlSetBkColor(-1, $iBGColorInner)
$hUserLabel = GUICtrlCreateLabel($aTranslation[$iLanguage][0], 12, 17, 90, 35)
GUICtrlSetFont(-1, 9, 400, 0, $sFont)
GUICtrlSetBkColor(-1, $iBGColorInner)
$hUser = GUICtrlCreateInput('', 115, 20, 205, 25)
GUICtrlSetFont(-1, 10, 400, 0, $sFont)
If $iMinLen > 0 Then
$aTranslation[$iLanguage][6] = $aTranslation[$iLanguage][1] & $aTranslation[$iLanguage][2]
Else
$aTranslation[$iLanguage][6] = $aTranslation[$iLanguage][1]
EndIf
$hPassLabel = GUICtrlCreateLabel($aTranslation[$iLanguage][6], 12, 63 + ($iMinLen = 0) * 6, 100, 35)
GUICtrlSetFont(-1, 9, 400, 0, $sFont)
GUICtrlSetBkColor(-1, $iBGColorInner)
$hPass = GUICtrlCreateInput('', 115, 65, 205, 25)
GUICtrlSetFont(-1, 10, 400, 0, $sFont)
GUICtrlSendMsg($hPass, $EM_SETPASSWORDCHAR, Not $bPassVisible * Asc('*'), 0)
$hCheck = GUICtrlCreateCheckbox($aTranslation[$iLanguage][3], 120, 92, 200, 25)
GUICtrlSetFont(-1, 9, 400, 0, $sFont)
GUICtrlSetBkColor(-1, $iBGColorInner)
If $bPassVisible Then GUICtrlSetState(-1, $GUI_CHECKED)
$hLanguage = _GUICtrlComboBoxEx_Create($hGui, '', 10, 135, 110, 140, $CBS_DROPDOWNLIST)
If FileExists($sIconsPath) Then
$hImage = _GUIImageList_Create(32, 20, 5, 4, 4)
_GUIImageList_AddIcon($hImage, $sIconsPath, 0, True)
_GUIImageList_AddIcon($hImage, $sIconsPath, 1, True)
_GUIImageList_AddIcon($hImage, $sIconsPath, 2, True)
_GUIImageList_AddIcon($hImage, $sIconsPath, 3, True)
_GUICtrlComboBoxEx_SetImageList($hLanguage, $hImage)
EndIf
_GUICtrlComboBoxEx_SetItemHeight($hLanguage, 0, 25)
For $i = 1 To $aLanguage[0]
_GUICtrlComboBoxEx_AddString($hLanguage, $aLanguage[$i], $i-1, $i-1)
Next
_GUICtrlComboBoxEx_SetCurSel($hLanguage, $iLanguage)
$hCancel = GUICtrlCreateButton($aTranslation[$iLanguage][5], 250, 135, 80, 25)
GUICtrlSetFont(-1, 9, 400, 0, $sFont)
$hOk = GUICtrlCreateButton($aTranslation[$iLanguage][4], 160, 135, 80, 25, $BS_DEFPUSHBUTTON)
GUICtrlSetFont(-1, 9, 400, 0, $sFont)
GUICtrlSetState(-1, $GUI_DISABLE)
WinSetOnTop($hGui, '', 1)
GUICtrlSetState($hUser, $GUI_FOCUS)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $hCancel
$iErr = 1
ExitLoop
Case $hCheck
GUICtrlSendMsg($hPass, $EM_SETPASSWORDCHAR, Not BitAND(GUICtrlRead($hCheck), $GUI_CHECKED) * Asc('*'), 0)
GUICtrlSetState($hPass, $GUI_FOCUS)
Case $hOk
$aOut[0] = GUICtrlRead($hUser)
$aOut[1] = GUICtrlRead($hPass)
ExitLoop
EndSwitch
If Not _GUICtrlComboBoxEx_GetDroppedState($hLanguage) Then
If _GUICtrlComboBoxEx_GetCurSel($hLanguage) <> $iLanguage Then
$iLanguage = _GUICtrlComboBoxEx_GetCurSel($hLanguage)
If $iMinLen > 0 Then
$aTranslation[$iLanguage][6] = $aTranslation[$iLanguage][1] & $aTranslation[$iLanguage][2]
Else
$aTranslation[$iLanguage][6] = $aTranslation[$iLanguage][1]
EndIf
GUICtrlSetData($hUserLabel, $aTranslation[$iLanguage][0])
GUICtrlSetData($hPassLabel, $aTranslation[$iLanguage][6])
GUICtrlSetData($hCheck, $aTranslation[$iLanguage][3])
GUICtrlSetData($hCancel, $aTranslation[$iLanguage][5])
GUICtrlSetData($hOk, $aTranslation[$iLanguage][4])
GUICtrlSetState($hUser, $GUI_FOCUS)
EndIf
EndIf
If GUICtrlRead($hUser) <> '' And StringLen(GUICtrlRead($hPass)) >= $iMinLen Then
If BitAND(GUICtrlGetState($hOk), $GUI_DISABLE) Then GUICtrlSetState($hOk, $GUI_ENABLE)
Else
If BitAND(GUICtrlGetState($hOk), $GUI_ENABLE) Then GUICtrlSetState($hOk, $GUI_DISABLE)
EndIf
WEnd
Opt('GUIOnEventMode', $iOpt)
GUIDelete($hGui)
Return SetError($iErr, 0, $aOut)
EndFunc ;==>_LogInBoxHiweis: Für die Anzeige der Landes-Flaggen muss sich die Datei "icons.icl" aus dem Anhang im Scriptverzeichnis befinden!
-
Das Thema ist erledigt, denke ich.
Ich habe ihm per ICQ bei der Router-Konfiguration (DynDNS-Eintrag, Portweiterleitung), den PC-Netzwerk-Einstellungen (statische IP-Adresse) und der Konfiguration des HTTP-Fileservers (HFS) geholfen.
Das läuft jetzt!
-
Wenn innerhalb einer Funktion, diese Funktion wieder aufgerufen wird...
[autoit]
[/autoit][autoit][/autoit][autoit]
Func _inprog()
Do
$msg = GUIGetMsg()
Until $r = 100If $r = 100 Then $r = 1
[/autoit]
_inprog() ; <-- hier
EndFunc
...spricht man von Rekursion. Das ist nicht generell verboten, manchmal ist das sogar erforderlich, aber dann muss man für eine Abbruchbedingung sorgen (nicht wie hier eine unendliche Rekursion).
Bei AutoIt ist die max. Rekursions-Tiefe auf 5100 festgelegt. Oder anders ausgedrückt, das obige Script hätte sich nach 5100 Aufrufen mit einer Fehlermeldung beendet! -
Ja, genau.
Das Beispiel stammt übrigens aus der Hilfedatei. Ist nicht von mir. -
Schau Dir mal diese Funktion von BugFix an: Dateisuche in Ordner und allen Unterordnern - eine weitere Variante
-
Wenn würde ich gerne ne Funktion haben um das aktuelle Datum i den Timestamp umzuwandeln.

Gibt's doch schon! Steht sogar in der Hilfe zu _DateDiff():
[autoit]
[/autoit]
#include <Date.au3>
; Calculated the number of seconds since EPOCH (1970/01/01 00:00:00)
$iDateCalc = _DateDiff( 's',"1970/01/01 00:00:00",_NowCalc())
MsgBox( 4096, "", "Number of seconds since EPOCH: " & $iDateCalc ) -
Das ist ja ein merkwürdiges Phänomen. Es gab früher mal eine Beschränkung auf 30.000 Zeichen. Das wurde offenbar geändert.
[autoit]
Jetzt gibt es eine Beschränkung auf 260.091 Zeichen und man kann diese nicht mehr erweitern.
Hier ein Testscript:
[/autoit]
GUICreate('Edit-Test', 640, 480)
Global $sText
For $i = 1 To 260091 ; 260092 geht nicht mehr
$sText &= 'a'
Next
$hEdit = GUICtrlCreateEdit($sText, 5, 5, 630, 470)
GUICtrlSetLimit(-1, 500000) ; keine Wirkung
GUISetState()
Do
Until GUIGetMsg() = -3 -
@SiLenCa: Dein Script scheitert, weil Du das "-1" nach UBound vergessen hast. UBound($array) liefert 3 zurück. Die For-Schleife fängt aber bei Null an und darf somit nur bis 2 gehen (0-2 = 3 Array-Elemente).
@Commander21: Wolltest Du nur Zahlen haben? Dann kann man das direkt mit Random machen. Ohne StringMid. Ich nahm jetzt aber mal an, dass das nur als Beispiel gedacht war und Du dort auch Buchstaben zulassen willst.
-
Nein Conan10, so wird Dir AutoIt einen Fehler auswerfen. Du darfst nicht gleichzeitig einen Befehl hinter Then schreiben und ein EndIf benutzen.
Abgesehen davon würde Dein Script, Piccolo1986, nicht lange laufen durch die rekursiven Funktionsaufrufe.
Man kann das aber viel einfacher lösen:
[autoit]
[/autoit][autoit][/autoit][autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>guicreate("Progressbar",53,10,-1,-1,$WS_POPUP)
[/autoit][autoit][/autoit][autoit]
GUISetBkColor(0xffffff)
$name = guictrlcreateprogress(0,0,53,10)
GUICtrlSetBkColor(-1,0xffffff); Hintergrundfarbe der Progressbar
guisetstate()$r = 1
[/autoit][autoit][/autoit][autoit]
AdlibEnable("_zaehler",10)
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSEFunc _zaehler()
[/autoit]
guictrlsetdata($name,$r)
$r+=1
If $r = 100 Then $r = 1
EndFunc -
Oder eine Schleife:
[autoit]
[/autoit]
#include <Array.au3>
Global $array[3]
For $i = 0 To 2
$array[$i] = StringMid(" 1,2,3,4,5,6,7,8,9", Random(1,9,1)*2, 1)
Next
_ArrayDisplay($array) -
Naja, AutoIt und ausdrucken. Da treffen zwei Welten aufeinander.
Am einfachsten wäre wohl eine Textverarbeitung fernsteuern. Für Word gibt's eine UDF. Schau Dir die Befehle einfach mal in der Hilfe an. -
Da sind viel zu viele Ifs drin. Das geht auch einfacher:
[autoit]
[/autoit]
#include <Array.au3>
Global $a[5] = [1, 1, 6, 6, 6]
_ArrayDisplay($a)
Global $h[6] = [0, 0, 0, 0, 0, 0]
For $i = 0 To 4
$h[$a[$i]-1] += 1
Next
_ArrayDisplay($h)
Global $hh[6] = [0, 0, 0, 0, 0, 0]
For $i = 0 To 5 Step 1
If $h[$i] <> 0 Then $hh[$h[$i]-1] += 1
Next
_ArrayDisplay($hh) -
Ganzen Thread lesen!
ZitatFunktioniert aber nicht bei externen Subprogrammen (nicht von mir programmiert). ?!
-
Ich bin mir nicht sicher, ob man das nach 1.000.000 Durchgängen schon sagen kann. Das hört sich vielleicht viel an, aber ich denke bei den Wahrscheinlichkeitswerten beim Lotto sind diese Zahlen noch nicht aussagekräftig.
Mein Rechner braucht für 1.000.000 Ziehungen 165 sek.
Aber einen Vergleich zwischen 64 und 32Bit System musst Du doch wohl auf ein und demselben Rechner durchführen. Sonst ist das kein Vergleich. -
_INetGetSource könnte funktionieren, wenn auch nicht als richtige Ini.
Aber _FileReadToArray geht doch nicht per FTP/HTTP, oder habe ich da was übersehen? -
Naja, ein Blick in die Hilfe hilft hier weiter.
ZitatAlles anzeigen
Wenn mehr als ein Operator in einem Ausdruck verwendet wird, bestimmt die Operator Priorität die Reihenfolge der Verwendung. Die Priorität, die in AutoIt verwendet wird steht unten. Wenn zwei Operatoren die gleiche Priorität besitzen, wird der Ausdruck von links nach rechts ausgewertet.Von der höchsten zur niedrigsten Priorität:
NOT
^
* /
+ -
&
< > <= >= = <> ==
AND OR -
Der Client muss Deine "öffentliche" IP-Adresse eingeben. Auf Deinem Rechner _GetIP() ausführen und ihm mitteilen.
Außerdem muss auf Deinem Router eine Port-Weiterleitung eingerichtet sein. -
Ich weiß, dass man mit entsprechender Suche viele Seiten dazu finden kann, aber ich kenne auch viele, die mit der Netzwerk-Konfiguration so ihre Schwierigkeiten haben.
Wie bereits geschrieben, ist die Netzwerk-Konfiguration ja auch sehr von der verwendeten Hard- und Software abhängig, von daher sollten wir nicht allzu streng sein, wenn er es trotz der Suche (ich glaube ihm das jetzt mal) nicht geschafft hat.Für eine weitergehende Hilfe ist er aber dann doch gefordert, indem er Infos über seine verwendete Hard-/Software postet.