Wegen AutoAdminLogon s. auch hier.
Wichtig ist auch der Eintrag: "ForceAutoLogon" auf "1" im gleichen Schlüssel "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon". Sonst wird spätestens, nachdem du dich unter einem anderen Konto angemeldet hast, "AutoAdminLogon" wieder auf "0" gesetzt.
Beiträge von BugFix
-
-
Hi, vielleicht hilft dir das etwas. In dem Bsp. habe ich Adressdaten von der Web-Site selektiert.
Leider sehr schlechter html-Code. Mal wird ein Adressblock zwischen <L> und </L> eingefasst, beim nächsten endet er mit <P>.
Grundsätzlich ist das Filtern recht simpel.
Wenn du es absolut wasserdicht machen willst, solltest du ein Array mit allen html-Sonderzeichen erstellen und auf jede Zeile anwenden (Ersetzen).
Die Steuerbefehle kriegst du einfach mit _StringBetween($str, "<", ">") selektiert.
Schau mal in mein Bsp. .Spoiler anzeigen
[autoit]#include <ie.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <file.au3>
#include <array.au3>
#include <string.au3>
#include <GUIConstants.au3>Dim $quelle = "http://www.charite.de/dgsm/dgsm/ger/labors.htm"
[/autoit] [autoit][/autoit] [autoit]
Dim $ziel = "\DGSM_Lab_raw.txt"
Dim $fh, $line, $n = 1, $str
Dim $arBlock[1], $arAdressen, $block = 0, $barwidth
Dim $ae = "ä", $oe = "ö", $ue = "ü", $sz = "ß", $ee = "é"
$arBlock[0] = 0$Busy = GUICreate("",160,110,-1,-1,$WS_POPUP)
[/autoit] [autoit][/autoit] [autoit]
GUISetBkColor(0x708090)
$label_busy = GUICtrlCreateLabel("Einen Moment bitte." & @LF & @LF & "Die notwendigen Daten" _
& @LF & "werden ermittelt..", 20, 15, 120, 100, $SS_CENTER)
GUICtrlSetFont(-1, 10, Default,2)
GUICtrlSetColor(-1, 0xF0E68C)
GUISetState()InetGet($quelle, $ziel)
[/autoit] [autoit][/autoit] [autoit]
$fh = FileOpen($ziel, 0)
While 1
$line = FileReadLine($fh, $n)
If @error = -1 Then ExitLoop
$str = StringStripWS($line, 1) ; führende Leerzeichen entfernen
If $block = 0 Then
If StringUpper(StringLeft($str, 4)) = "<LI>"Then
$block = 1
_Ersetzen()
_ArrayAdd($arBlock, $str)
$arBlock[0] += 1
EndIf
Else
If $str <> "" Then
If StringUpper(StringRight($str, 5)) = "</LI>" Or StringUpper(StringRight($str, 3)) = "<P>" Then
$block = 0
_Ersetzen()
$arBlock[UBound($arBlock)-1] &= "|" & $str
Else
_Ersetzen()
$arBlock[UBound($arBlock)-1] &= "|" & $str
EndIf
EndIf
EndIf
$n += 1
WEnd
FileClose($fh)
GUISetState(@SW_HIDE, $Busy)
_ArrayDisplay($arBlock, "Adressen")
ExitFunc _Ersetzen()
[/autoit]
$str = StringReplace($str, $ae, "ä")
$str = StringReplace($str, $oe, "ö")
$str = StringReplace($str, $ue, "ü")
$str = StringReplace($str, $sz, "ß")
$str = StringReplace($str, $ee, "é")
$tmp = _StringBetween($str, "<", ">")
If Not @error Then
For $i = 0 To UBound($tmp)-1
$str = StringReplace($str, "<" & $tmp[$i] & ">", "")
Next
EndIf
EndFunc -
Nur ein Gedanke - ob es so geht weiss ich nicht.
Vielleicht ist es möglich, dass du z.B.mit _IEFormGetCollection( ) die Objekte der Seite ausliest. Anschließend mit _IEAction( ByRef $o_object, "focus" ) die Objekte durchlaufen. Ist sicher nicht ein direkter vertikaler Durchlauf, aber in der Regel sollte die Objektindexierung schon von oben nach unten verlaufen. -
Hi, ich hab deine Funktion Unregister( ) mal etwas ausgebessert.
Aber ich kann nicht richtig nachvollziehen, ob du mit dieser Logik den gewünschten Erfolg erzielst.
Tipp: Anstatt Leerzeilen zwischen den Einzelschritten einzufügen, achte besser darauf, dass alle Unterschritte auch tiefer eingerückt sind. Das macht den Code wesentlich lesbarer.Spoiler anzeigen
[autoit]Func Unregister()
[/autoit]
Dim $arFile, $write, $tmp, $last
If _FileReadToArray($regsource, $arFile) = 0 Then
MsgBox(0, 'Achtung', "Datei konnte nicht eingelesen werden!")
Exit
EndIf
For $i = 1 To UBound($arFile) -1 ; -1 muß sein, sonst bist du ausserhalb des Arrays
$tmp = $arFile[$i]
If StringInStr($arFile[$i], "[") Then
$tmp1 = _StringBetween($tmp, "[", "]") ; _StringBetween( ) gibt ein Array zurück!!
$last1 = _StringBetween($last, "[", "]")
If StringInStr($tmp1[0], $last1[0]) Then ; also auch als Array abfragen
$last = $arFile[$i]
_ArrayDelete($arFile, $i) ; -> warum?
Else
If Not StringInStr($tmp1[0], $last1[0]) Then ; hier das Gleiche (Array)
FileWriteLine($UnRegScript, $arFile[$i])
$last = $arFile[$i]
EndIf
EndIf
EndIf
Next
FileClose($UnRegScript)
Exit
EndFunc ;==>Unregister -
Also bei mir läuft es. Ich vermute, du hast bei der Anpassung an deine Variablennamen einen Fehler drin. Aufgrund des Fehlermeldung tippe ich auf die Rückgabevariable von _StringBetween( ) .
Ich habe jetzt mal die von dir verwendeten Variablennamen eingebaut, in der Hoffnung, dass ich richtig liege in meiner Einschätzung, welche wofür ist.

Außerdem habe ich jetzt mal jede Zeile kommentiert, damit du genau nachvollziehen kannst, was wo passiert.Spoiler anzeigen
[autoit]#include <File.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <String.au3>Dim $arFile ; das Array nimmt die Quelldatei auf
[/autoit] [autoit][/autoit] [autoit]
Dim $regsource = "Source.txt" ; der Pfad der Quelldatei
Dim $UnRegScript = "WriteBack.txt" ; der Pfad der Ergebnisdatei
Dim $write ; das Filehandle für die zum Schreiben geöffnete Ergebnisdatei
Dim $tmp, $str ; temporäre Variablen
Dim $last = "" ; enthält den zuletzt geschriebenen EintragIf _FileReadToArray($regsource, $arFile) = 0 Then
[/autoit]
MsgBox(0, 'Achtung', "Datei konnte nicht eingelesen werden!")
Exit
EndIf
$write = FileOpen($UnRegScript, 1) ; Zuweisung Datei an Filehandle
For $i = 1 To $arFile[0]
$tmp = $arFile[$i] ; aktuelle Zeile
$str = _StringBetween($tmp, "[", "]") ; Zeileninhalt zwischen den Klammern an Arrayvariable
If $last = "" Then ; ausführen bei erster Zeile
FileWriteLine($write, $str[0]) ; Zeile in Zieldatei schreiben
$last = $str[0] ; Zuweisen letzter geschriebener Wert
Else ; für alle anderen Zeilen
If Not StringInStr($str[0], $last) Then ; wenn letzter Eintrag nicht in aktueller Zeile -> dann
FileWriteLine($write, $str[0]) ; Zeile in Zieldatei schreiben
$last = $str[0] ; Zuweisen letzter geschriebener Wert
EndIf
EndIf
Next
FileClose($write) ; Filehandle schließen
Exit -
Sorry, aber mir ist in meinem Code ein Fehler unterlaufen. Ich hatte nicht dran gedacht, dass _StringBetween( ) ein Array zurückgibt.

Also hier das funktionsfähige Ergebnis.
In deiner Auflistung der Keys widersprichst du aber deiner Regel, dass du alle Hauptschlüssel auslesen willst.
Diese beiden Zeilen willst du nicht haben:ZitatHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AutoIt3.exe
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Aut2Exe.exeSie entsprechen aber deiner Regel, dass der Schlüssel das erste Mal auftreten muss und nicht im vorigen enthalten ist.
Spoiler anzeigen
[autoit]#include <File.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <String.au3>Dim $arFile, $pfadRead = "Source.txt", $pfadWrite = "WriteBack.txt", $write, $tmp, $str, $last = ""
[/autoit] [autoit][/autoit] [autoit]If _FileReadToArray($pfadRead, $arFile) = 0 Then
[/autoit]
MsgBox(0, 'Achtung', "Datei konnte nicht eingelesen werden!")
Exit
EndIf
$write = FileOpen($pfadWrite, 1)
For $i = 1 To $arFile[0]
$tmp = $arFile[$i]
$str = _StringBetween($tmp, "[", "]")
If $last = "" Then
FileWriteLine($write, $str[0])
$last = $str[0]
Else
If Not StringInStr($str[0], $last) Then
FileWriteLine($write, $str[0])
$last = $str[0]
EndIf
EndIf
Next
FileClose($write)
Exit -
Du liest ja auch nur eine Zeile ein, was willst du da vergleichen.
Besser _FileReadToArray() und dann die Einträge abarbeiten.
Bzw. wenn du aus der Reg liest - gleich in ein Array einlesen und durch dieses iterieren. -
Anhand von pee's Beispiel:
For $i = 1 to 1000
ClipPut( "http://lol.de/" & FileReadLine("C:\Text.txt", $i))
Sleep(60000)
Next -
Zitat
Wieso speicherst Du das PW nicht mittels _StringEncrypt in der Registry ab???
Weil Windows Logon das Passwort im Klartext fordert. AutoAdminLogon ist ja keine Erfindung von mir, sondern eine Windows-eigene Funktion.Den Tipp mit den Admins werde ich gleich mal testen, thx.
-
Hier eine Variante von mir.
[autoit]
So, wie ich das lese, willst du nur mit der vorhergehenden Zeile vergleichen.; aktuelle Prod oder Beta benutzen
[/autoit][autoit][/autoit][autoit]
#include <File.au3>
#include <String.au3>Dim $arFile, $pfadRead = "D:\beispiel.txt", $pfadWrite = "D:\WriteBack.txt", $write, $tmp, $last = ""
[/autoit][autoit][/autoit][autoit]If _FileReadToArray($pfadRead, $arFile) = 0 Then
[/autoit]
MsgBox(0, 'Achtung', "Datei konnte nicht eingelesen werden!")
Exit
EndIf
$write = FileOpen($pfadWrite, 1)
For $i = 1 To $arFile[0]
$tmp = $arFile[$i]
$tmp = _StringBetween($tmp, "[", "]")
If $last = "" Then
FileWriteLine($write, $tmp)
$last = $tmp
Else
If Not StringInStr($last, $tmp) Then
FileWriteLine($write, $tmp)
$last = $tmp
EndIf
EndIf
Next
FileClose($write)
Exit -
Hi,
ich habe ein Tool geschrieben um AutoAdminLogon zu aktivieren/ deaktivieren.
Dann brauch ich da nicht jedes mal bei unseren Kunden von Hand zu fummeln.
Für meine Zwecke reichts ja, ich hätte es aber gern allgemeingültig geschrieben und dazu benötige ich eine Möglichkeit herauszufinden, welche der Benutzerkonten Admin und welche Eingeschränkt sind.
Dann würde ich auch nur diese in der Userliste aufführen, da AutoAdminLogon, wie der Name sagt, nur für Adminkonten funktioniert.Also, wenn da jemand 'ne Idee hat - immer her damit.

(AutoAdminLogon sollte aber niemals auf 'nem PC mit Internetzugang und/oder LAN-Zugehörigkeit verwendet werden. - Denn das PW wird im Klartext gespeichert in der Registry. Wenn die dann nicht gut eingetütet ist....)
Hier das Script:
Spoiler anzeigen
[autoit]#cs ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]AutoIt Version: 3.2.1.14 (beta)
[/autoit] [autoit][/autoit] [autoit]
Author: BugFix ( [email='bugfix@autoit.de'][/email] )
Script Function: AutoAdminLogon aktivieren / deaktivieren#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>
#include <array.au3>
#Include <GuiList.au3>
Dim $LogonKey = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
Dim $AllUserKey = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
Dim $CurrDefUser = RegRead($LogonKey, "DefaultUserName"), $AllUsers = ""
Dim $arUsers, $CurrAutologonUser, $UserIf RegRead($LogonKey, "AutoAdminLogon") = "" Or RegRead($LogonKey, "AutoAdminLogon") = 0 Then
[/autoit] [autoit][/autoit] [autoit]
$CurrAutologonUser = "kein Konto"
Else
$CurrAutologonUser = $CurrDefUser
EndIf
$Form1 = GUICreate("Auto Login festlegen / aufheben", 263, 224, -1, -1)
$Input1 = GUICtrlCreateInput("", 124, 140, 133, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
$Button1 = GUICtrlCreateButton("Auto Login aufheben", 6, 169, 250, 21, 0)
$Button2 = GUICtrlCreateButton("Auto Login für markiertes Konto festlegen", 6, 196, 250, 21, 0)
$Group1 = GUICtrlCreateGroup("Benutzerkonten auf diesem PC", 6, 10, 250, 125)
$List1 = GUICtrlCreateList("", 15, 28, 233, 102)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Label1 = GUICtrlCreateLabel("Auto Login besteht für:", 6, 143, 111, 17)
GUISetState(@SW_SHOW)For $i= 1 to 20 ; Benutzerkonten auslesen
[/autoit] [autoit][/autoit] [autoit]
$var = RegEnumKey($AllUserKey, $i)
If @error <> 0 then ExitLoop
$tmp = RegRead($AllUserKey & "\" & $var, "ProfileImagePath")
$str = StringRight($tmp, StringLen($tmp) - StringInStr($tmp, "\", 1, -1))
If $str <> "systemprofile" And $str <> "LocalService" And $str <> "NetworkService" Then
If $AllUsers = "" Then
$AllUsers &= $str
Else
$AllUsers &= "|" & $str
EndIf
EndIf
Next
$arUsers = StringSplit($AllUsers, "|")
For $i = 1 To $arUsers[0] ; Benutzer in Liste eintragen
_GUICtrlListAddItem($List1, $arUsers[$i])
Next
_MarkDefUser($CurrDefUser)
GUICtrlSetData($Input1, $CurrAutologonUser) ; Kontoname eintragen, falls AutoLogon bereits bestehtWhile 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
_AutoOFF()
Case $Button2
_AutoON()
EndSwitch
WEndFunc _MarkDefUser($tmpUser)
[/autoit] [autoit][/autoit] [autoit]
If $tmpUser <> "" Then ; DefaultUser markieren
For $i = 0 To _GUICtrlListCount($List1) - 1
If $tmpUser = _GUICtrlListGetText($List1, $i) Then
_GUICtrlListSelectIndex($List1, $i)
ExitLoop
EndIf
Next
EndIf
EndFuncFunc _AutoON()
[/autoit] [autoit][/autoit] [autoit]
$User = _GUICtrlListGetText($List1, _GUICtrlListGetCaretIndex($List1))
If MsgBox(262180, 'Auto Logon setzen', 'Soll für den Benutzer: ' & $User & @LF & _
"das automatische Einloggen aktiviert werden?" & @LF & _
"(Hinweis: Nur für Benutzer mit Administratorrechten möglich.)" ) = 6 Then
RegWrite($LogonKey, "DefaultUserName", "REG_SZ", $User)
RegWrite($LogonKey, "DefaultPassword", "REG_SZ", InputBox("Passwort", "Bitte Passwort für: " & $User & " eingeben." _
& @LF & "Falls der Nutzer kein Passwort hat - frei lassen.", "", "*" ))
RegWrite($LogonKey, "AutoAdminLogon", "REG_SZ", 1)
RegWrite($LogonKey, "ForceAutoLogon", "REG_SZ", 1)
_CheckRegEntry()
EndIf
EndFuncFunc _AutoOFF()
[/autoit] [autoit][/autoit] [autoit]
RegWrite($LogonKey, "AutoAdminLogon", "REG_SZ", 0)
If @error <> 0 Then
MsgBox(262160, 'Auto Logon', "Vorgang fehlgeschlagen.")
Else
RegWrite($LogonKey, "DefaultPassword", "REG_SZ", "")
RegWrite($LogonKey, "ForceAutoLogon", "REG_SZ", 0)
GUICtrlSetData($Input1, "kein Konto")
MsgBox(262208, 'Auto Logon', "Auto Logon wurde erfolgreich deaktiviert.")
EndIf
EndFuncFunc _CheckRegEntry()
[/autoit]
If RegRead($LogonKey, "AutoAdminLogon") = 1 And RegRead($LogonKey, "ForceAutoLogon") = 1 Then
MsgBox(262208, 'Auto Logon', "Das automatische Einloggen für: " & RegRead($LogonKey, "DefaultUserName") _
& " wurde erfolgreich eingerichtet.")
GUICtrlSetData($Input1, $User)
_MarkDefUser($User)
Else
MsgBox(262160, 'Auto Logon', "Vorgang fehlgeschlagen.")
EndIf
EndFunc -
Variablen, die innerhalb einer Funktion generiert werden, sind den anderen Funktionen nicht bekannt. Deshalb mußt du sie deklarieren.
[autoit]
In deinem Bsp. reicht "Dim" völlig aus. Wann du "Local", "Dim" oder "Global" verwendest, kannst du in der Hilfe nachlesen.;Includes
[/autoit]
#include <GUIConstants.au3>
#include <ie.au3>
#include <guilist.au3>
#include <guilistview.au3>
#include <array.au3>
#include <INet.au3>
; Variablen definieren
Dim $console -
I am very gerührt.

Schön, wenn ich dir helfen konnte. -
So, jetzt hab ich eine funktionierende Lösung für dich.
[autoit]
Mit _GUICtrlListViewSetItemSelState( ) kannst du den Eintrag markieren - ist dann aber grau markiert. Also noch ein {DOWN} hinterher und schon ist es blau markiert
_GUICtrlListViewSetItemSelState($listview, $index, 1, 1)
[/autoit]
Send("{DOWN}") -
Hi huggy,
da will ich doch mal der erste Gratulant sein.Alles Gute, viele Geschenke und und und ....
:birthday:

-
Zitat Hilfe:
ZitatAlles anzeigen_GUICtrlListViewSetHotItem
--------------------------------------------------------------------------------Sets the hot item for a list-view control
#Include <GuiListView.au3>
_GUICtrlListViewSetHotItem($h_listview, $i_index)Parameters
$h_listview control id/control hWnd
$i_index Zero-based index of the item to be set as the hot itemReturn Value
Returns the index of the item that was previously hot
$LV_ERR is returned if no item previously hotHier ein Bsp.:
[autoit]#Include <GuiListView.au3>
[/autoit][autoit][/autoit][autoit]For $i = 0 To _GUICtrlListViewGetItemCount($listview)-1
[/autoit]
If _GUICtrlListViewGetItemText($listview, $i) = $vergleichsbegriff Then
_GUICtrlListViewSetHotItem($listview, $i)
EndIf
ExitLoop
Next -
Hier die Funktion für SMTP-Mail von Jos:
Spoiler anzeigen
[autoit]Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", _
[/autoit]
$s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Username = "", $s_Password = "",$IPPort=25, $ssl=0)
$objEmail = ObjCreate("CDO.Message")
$objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
$objEmail.To = $s_ToAddress
Local $i_Error = 0
Local $i_Error_desciption = ""
If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
$objEmail.Subject = $s_Subject
If StringInStr($as_Body,"<") and StringInStr($as_Body,">") Then
$objEmail.HTMLBody = $as_Body
Else
$objEmail.Textbody = $as_Body & @CRLF
EndIf
If $s_AttachFiles <> "" Then
Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
For $x = 1 To $S_Files2Attach[0]
$S_Files2Attach[$x] = _PathFull ($S_Files2Attach[$x])
If FileExists($S_Files2Attach[$x]) Then
$objEmail.AddAttachment ($S_Files2Attach[$x])
Else
$i_Error_desciption = $i_Error_desciption & @lf & 'File not found to attach: ' & $S_Files2Attach[$x]
SetError(1)
return 0
EndIf
Next
EndIf
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
;Authenticated SMTP
If $s_Username <> "" Then
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
EndIf
If $Ssl Then
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
EndIf
;Update settings
$objEmail.Configuration.Fields.Update
; Sent the Message
$objEmail.Send
if @error then
SetError(2)
return $oMyRet[1]
EndIf
EndFunc ;==>_INetSmtpMailCom
Arbeitet mit den meisten SMTP-Mail Accounts. Also unabhängig von Outlook. -
Hier meine Lösung für dich:
Spoiler anzeigen
[autoit]#include <IE.au3>
[/autoit]
Dim $oIE=_IECreate("http://",0,1)
Dim $counter=0, $LastRandom = 1
While 1
_IELoadWait($oIE) ; warten bis Seite geladen
$counter=$counter+1
If $counter<3 Then
$seite=Random(1,4,1)
If $seite=1 And $seite <> $LastRandom Then
$oDocLinks = _IELinkGetCollection ($oIE); gibt links als Collection aus
For $olink IN $oDocLinks
if StringInStr ( $olink.outerText , "items") Then ; der anzuklickende Link
$zeit=Random(40312,47623,1)
sleep($zeit) ; gibt zufallswert aus und Sleep übernimmt den Wert
$olink.click() ; der Klick auf den Link
ExitLoop
EndIf
Next
$LastRandom = $seite
ElseIf $seite=2 And $seite <> $LastRandom Then
$oDocLinks = _IELinkGetCollection ($oIE); gibt links als Collection aus
For $olink IN $oDocLinks
if StringInStr ( $olink.outerText , "modifikationen") Then ; der anzuklickende Link
$zeit=Random(35001,55131,1)
sleep($zeit) ; gibt zufallswert aus und Sleep übernimmt den Wert
$olink.click() ; der Klick auf den Link
ExitLoop
EndIf
Next
$LastRandom = $seite
ElseIf $seite=3 And $seite <> $LastRandom Then
$oDocLinks = _IELinkGetCollection ($oIE); gibt links als Collection aus
For $olink IN $oDocLinks
if StringInStr ( $olink.outerText , "die story") Then ; der anzuklickende Link
$zeit=Random(40878,49851,1)
sleep($zeit) ; gibt zufallswert aus und Sleep übernimmt den Wert
$olink.click() ; der Klick auf den Link
ExitLoop
EndIf
Next
$LastRandom = $seite
ElseIf $seite=4 And $seite <> $LastRandom Then
$oDocLinks = _IELinkGetCollection ($oIE); gibt links als Collection aus
For $olink IN $oDocLinks
if StringInStr ( $olink.outerText , "underground") Then ; der anzuklickende Link
$zeit=Random(38543,51923,1)
sleep($zeit) ; gibt zufallswert aus und Sleep übernimmt den Wert
$olink.click() ; der Klick auf den Link
ExitLoop
EndIf
Next
$LastRandom = $seite
Else ; ElseIf-Zweig konnte nicht gewählt werden, da $seite = $LastRandom
$counter -= 1 ; Counter zurücksetzen, da in diesem Durchlauf nix passierte
EndIf
EndIf
WEndIch glaube der Counter ist wichtig, darum setze ich ihn bei Leerlauf zurück.
-
Führe eine zusätzliche Variable, z.B. $LastRandom .
Wenn Zufallszahl = $LastRandom -> Zufallszahl erneut ermitteln. -
Hi,
ich hab mich auch mal dran gemacht.
Beim Betrachten der Aufgabe denkt man schon, das ist doch Pillepalle. Na gut, der Algorithmus ist nicht schwierig.
Wie üblich liegen 90 % der Arbeit darin alle möglichen (und unmöglichen) Eigaben und Fehler abzufangen.
Um das Endprodukt DAU-sicher zu machen, ist es doch viel umfangreicher geworden als ich dachte.
Man könnte natürlich noch die verschiedenen Gewinnkategorien in unterschiedlichen Farben darstellen - aber das war mir dann doch zuviel.EDIT: Hab noch eine Fehlermöglichkeit abgefangen (Eintrag löschen bei aktiver Ergebnisliste). Und noch 'ne Fehlerquelle abgefangen (Löschen bei leerer Liste).
Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiListView.au3>
Opt("GUIOnEventMode", 1)Dim $arAlleSN, $arTreffer[1], $Fehler = 0, $SN
[/autoit] [autoit][/autoit] [autoit]
Dim $alleRichtig = 0, $dreiRichtig = 0, $zweiRichtig = 0, $einRichtig = 0, $lastEntry, $new = 0
Dim $rot = 0xFF0000
$arAlleSN = IniReadSection(@ScriptDir & "\SN10Euro.INI", "serien")
$arTreffer[0] = 0
If @error = 1 Then $Fehler = 1$Form1 = GUICreate("100.000 für 10", 636, 344, -1, -1)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, "Ende")
$ListView1 = GUICtrlCreateListView("Seriennummern", 17, 19, 353, 305)
_GUICtrlListViewSetColumnWidth(-1, 0, 349)
$Group0 = GUICtrlCreateGroup(" Modus ", 384, 17, 240, 40)
$Radio1 = GUICtrlCreateRadio("Erfassen", 400, 30, 80)
GUICtrlSetOnEvent(-1, "RadioErfassen")
$Radio2 = GUICtrlCreateRadio("Vergleichen", 520, 30, 80)
GUICtrlSetOnEvent(-1, "RadioVergleichen")
GUICtrlSetState(-1, $GUI_CHECKED)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group1 = GUICtrlCreateGroup(" Seriennummer ", 384, 59, 240, 57)
$Input1 = GUICtrlCreateInput("", 395, 81, 220, 21, $ES_UPPERCASE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button1 = GUICtrlCreateButton("Vergleichen", 384, 128, 70, 21, 0)
GUICtrlSetOnEvent(-1, "Vergleichen")
$Group2 = GUICtrlCreateGroup(" Ergebnis ", 384, 158, 240, 167)
$Label0 = GUICtrlCreateLabel("Hauptgewinn", 465, 180, 90, 17)
GUICtrlSetColor($Label0, $rot)
GUICtrlSetStyle(-1, $WS_DISABLED)
$Label1 = GUICtrlCreateLabel("letzte 3 Ziffern richtig", 396, 214, 102, 17)
GUICtrlSetStyle(-1, $WS_DISABLED)
$Label2 = GUICtrlCreateLabel("letzte 2 Ziffern richtig", 396, 252, 102, 17)
GUICtrlSetStyle(-1, $WS_DISABLED)
$Label3 = GUICtrlCreateLabel("letzte Ziffer richtig", 396, 290, 87, 17)
GUICtrlSetStyle(-1, $WS_DISABLED)
$Input2 = GUICtrlCreateInput("", 550, 211, 45, 21, BitOR($ES_RIGHT,$ES_AUTOHSCROLL,$ES_READONLY))
$Input3 = GUICtrlCreateInput("", 550, 249, 45, 21, BitOR($ES_RIGHT,$ES_AUTOHSCROLL,$ES_READONLY))
$Input4 = GUICtrlCreateInput("", 550, 287, 45, 21, BitOR($ES_RIGHT,$ES_AUTOHSCROLL,$ES_READONLY))
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button2 = GUICtrlCreateButton("Ende", 554, 128, 70, 21, 0)
GUICtrlSetOnEvent(-1, "Ende")
$Button3 = GUICtrlCreateButton("Löschen", 469, 128, 70, 21, 0)
GUICtrlSetOnEvent(-1, "DeleteSN")If $Fehler = 1 Then
[/autoit] [autoit][/autoit] [autoit]
$lastEntry = 0
Else
$lastEntry = StringTrimLeft($arAlleSN[$arAlleSN[0][0]][1], 2)
_ListAllSN()
EndIf
If Not FileExists(@ScriptDir & "\SN10Euro.INI") Then
GUICtrlSetState($Button3, $GUI_DISABLE)
Else
GUICtrlSetState($Button3, $GUI_ENABLE)
EndIfGUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]
ControlFocus("", "", $Input1)While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc _ListAllSN()
[/autoit] [autoit][/autoit] [autoit]
If IsArray($arAlleSN) Then
For $i = 1 To $arAlleSN[0][0]
_GUICtrlListViewInsertItem($ListView1, -1, $arAlleSN[$i][1])
Next
EndIf
EndFuncFunc RadioErfassen()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetData($Button1, "Erfassen")
If Not FileExists(@ScriptDir & "\SN10Euro.INI") Then
GUICtrlSetState($Button3, $GUI_DISABLE)
Else
GUICtrlSetState($Button3, $GUI_ENABLE)
EndIf
GUICtrlSetStyle($Label0, $WS_DISABLED)
GUICtrlSetStyle($Label1, $WS_DISABLED)
GUICtrlSetStyle($Label2, $WS_DISABLED)
GUICtrlSetStyle($Label3, $WS_DISABLED)
_GUICtrlListViewDeleteAllItems($ListView1)
If $Fehler = 0 Then _ListAllSN()
ControlFocus("", "", $Input1)
GUICtrlSetData($Input2, "")
GUICtrlSetData($Input3, "")
GUICtrlSetData($Input4, "")
EndFuncFunc RadioVergleichen()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetData($Button1, "Vergleichen")
ControlFocus("", "", $Input1)
EndFuncFunc Vergleichen()
[/autoit] [autoit][/autoit] [autoit]
If GUICtrlRead($Radio2) = 1 Then ; vergleichen
If $Fehler = 1 Then
MsgBox(48, 'ACHTUNG', "Es sind noch keine Seriennummern zum Vergleich hinterlegt!")
Return
EndIf
_vergleich()
_GUICtrlListViewDeleteAllItems($ListView1)
_treffer()
Else ; erfassen
$SN = GUICtrlRead($Input1)
If $SN <> "" Then
_GUICtrlListViewInsertItem($ListView1, -1, $SN)
IniWrite(@ScriptDir & "\SN10Euro.INI", "serien", "sn" & $lastEntry +1, $SN)
$lastEntry += 1
$Fehler = 0
$new = 1
GUICtrlSetState($Button3, $GUI_ENABLE)
Else
MsgBox(0, 'ACHTUNG!', "Bitte eine Seriennummer für Vergleich eingeben!")
EndIf
EndIf
ControlFocus("", "", $Input1)
EndFuncFunc DeleteSN()
[/autoit] [autoit][/autoit] [autoit]
Dim $tmp
If $new = 1 Then $arAlleSN = IniReadSection(@ScriptDir & "\SN10Euro.INI", "serien")
$tmp = _GUICtrlListViewGetItemText($ListView1)
If $tmp <> "" And MsgBox(292,"Löschen","Soll die Seriennummer:" & @LF & $tmp & @LF & "wirklich gelöscht werden?") = 6 Then
For $i = 1 To $arAlleSN[0][0]
If $arAlleSN[$i][1] = $tmp Then
$arAlleSN[$i][1] = ""
ExitLoop
EndIf
Next
FileDelete(@ScriptDir & "\SN10Euro.INI")
$lastEntry = 0
For $i = 1 To $arAlleSN[0][0]
If $arAlleSN[$i][1] <> "" Then
IniWrite(@ScriptDir & "\SN10Euro.INI", "serien", "sn" & $lastEntry +1, $arAlleSN[$i][1])
$lastEntry += 1
$Fehler = 0
EndIf
Next
_GUICtrlListViewDeleteAllItems($ListView1)
$arAlleSN = IniReadSection(@ScriptDir & "\SN10Euro.INI", "serien")
_ListAllSN()
If Not FileExists(@ScriptDir & "\SN10Euro.INI") Then GUICtrlSetState($Button3, $GUI_DISABLE)
EndIf
EndFuncFunc _vergleich()
[/autoit] [autoit][/autoit] [autoit]
$SN = GUICtrlRead($Input1)
If $new = 1 Then $arAlleSN = IniReadSection(@ScriptDir & "\SN10Euro.INI", "serien")
For $i = 1 To $arAlleSN[0][0]
If $arAlleSN[$i][1] = $SN Then
$alleRichtig += 1
_ArrayAdd($arTreffer, $arAlleSN[$i][1] & " / Volltreffer = 100.000 €")
$arTreffer[0] += 1
ElseIf StringRight($arAlleSN[$i][1], 3) = StringRight($SN, 3) Then
$dreiRichtig += 1
_ArrayAdd($arTreffer, $arAlleSN[$i][1] & " / 3 R = 10.000 €")
$arTreffer[0] += 1
ElseIf StringRight($arAlleSN[$i][1], 2) = StringRight($SN, 2) Then
$zweiRichtig += 1
_ArrayAdd($arTreffer, $arAlleSN[$i][1] & " / 2 R = 1.000 €")
$arTreffer[0] += 1
ElseIf StringRight($arAlleSN[$i][1], 1) = StringRight($SN, 1) Then
$einRichtig += 1
_ArrayAdd($arTreffer, $arAlleSN[$i][1] & " / 1 R = 100 €")
$arTreffer[0] += 1
EndIf
Next
EndFuncFunc _treffer()
[/autoit] [autoit][/autoit] [autoit]
For $i = 1 To $arTreffer[0]
_GUICtrlListViewInsertItem($ListView1, -1, $arTreffer[$i])
Next
If $alleRichtig = 1 Then GUICtrlSetStyle($Label0, $GUI_SS_DEFAULT_LABEL)
GUICtrlSetState($Button3, $GUI_DISABLE)
GUICtrlSetStyle($Label1, $GUI_SS_DEFAULT_LABEL)
GUICtrlSetStyle($Label2, $GUI_SS_DEFAULT_LABEL)
GUICtrlSetStyle($Label3, $GUI_SS_DEFAULT_LABEL)
GUICtrlSetData($Input2, $dreiRichtig)
GUICtrlSetData($Input3, $zweiRichtig)
GUICtrlSetData($Input4, $einRichtig)
ReDim $arTreffer[1]
$arTreffer[0] = 0
$dreiRichtig = 0
$zweiRichtig = 0
$einRichtig = 0
EndFuncFunc Ende()
[/autoit]
Exit
EndFunc