1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Oscar

Beiträge von Oscar

  • Wie kann ich eine zufällige 4stellige Zahl erstellen?

    • Oscar
    • 18. April 2009 um 13:10

    Hier mal eine mögliche Lösung (kommentiert, damit Du auch was lernst):

    Spoiler anzeigen
    [autoit]


    Global $aNumbers = StringSplit(FileRead(@ScriptDir & '\numbers.txt'), @CRLF, 1) ; Array mit bereits vorhandenen Nummern erstellen

    [/autoit] [autoit][/autoit] [autoit]

    Do
    $sRandom = StringFormat('%04s', Random(0, 9999, 1)) ; 4stellige Zufallszahl erzeugen
    Until Not _Double($sRandom) ; Funktion zum überprüfen aufrufen. Falls doppelt (True), Schleife wiederholen

    [/autoit] [autoit][/autoit] [autoit]

    $hFile = FileOpen(@ScriptDir & '\numbers.txt', 1) ; Datei zum schreiben öffnen (Append-Mode)
    If $hFile <> -1 Then ; überprüfen, ob Datei erfolgreich geöffnet werden konnte
    FileWriteLine($hFile, $sRandom) ; Zufallszahl in neue Zeile schreiben
    FileClose($hFile) ; Datei schließen
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, 'Zufallszahl', $sRandom) ; Zahl ausgeben

    [/autoit] [autoit][/autoit] [autoit]

    Func _Double($sNumber)
    For $i = 1 To $aNumbers[0] ; Alle Zahlen im Array durchgehen
    If $sNumber = $aNumbers[$i] Then Return True ; Wenn Zahl im Array vorhanden, dann Funktion verlassen und True zurückgeben
    Next
    Return False ; Zahl war nicht vorhanden, Funktion verlassen und False zurückgeben
    EndFunc

    [/autoit]
  • Controllkilck ?

    • Oscar
    • 18. April 2009 um 11:12

    - Starte mal das Programm "Au3Info.exe" aus dem AutoIt-Ordner.
    - Dann Ziehst Du das "Fadenkreuz" vom "Finder Tool" auf den Button, den Du ansteuern willst.
    - Danach wählst Du den TAB "Summary" aus, markierst den gesamten Text, kopierst ihn in die Zwischenablage und postest ihn hier.

    Und dann können wir Dir auch weiterhelfen. :)

  • Problem mit SimpleSort

    • Oscar
    • 18. April 2009 um 11:07

    Was ist das für ein Programm, das Du da ansteuern willst?
    Und wie sieht Dein komplettes Script aus?
    Mit diesem Codeschnipsel von oben kann man nur wenig anfangen...

  • Problem mit SimpleSort

    • Oscar
    • 18. April 2009 um 10:03

    So ist die If-Anweisung auch falsch.
    Entweder so (ohne Klammern):

    [autoit]

    If _GUICtrlListView_GetItemText($list, 1, 0) <> "AnvilGrass01" Then

    [/autoit]


    oder so (mit Klammern):

    [autoit]

    If Not (_GUICtrlListView_GetItemText($list, 1, 0) = "AnvilGrass01") Then

    [/autoit]
  • Wochentag- Feiertagsermittlung

    • Oscar
    • 18. April 2009 um 09:52

    Hab' mir das Script gerade mal angesehen. Stimmt, wenn man in der Funktion _WTag() bei der If-Anweisung:

    [autoit]

    If _DateIsLeapYear(GUICtrlRead($InYear)) Then

    [/autoit]


    ein Not einfügt,

    [autoit]

    If Not _DateIsLeapYear(GUICtrlRead($InYear)) Then

    [/autoit]


    funktioniert alles! :thumbup:

    Edit: Die übergeordnete If-Anweisung solltest Du auch noch etwas korrigieren, damit die Meldung "Tag für Berechnung auf 29 korrigiert!", obwohl man den 29. angeklickt hat, verschwindet:

    [autoit]


    If $mon = 2 and $day > (28 + _DateIsLeapYear(GUICtrlRead($InYear))) Then
    If Not _DateIsLeapYear(GUICtrlRead($InYear)) Then
    $day = 28
    GUICtrlSetState($aRadioT[27],$gui_checked)
    Else
    $day = 29
    GUICtrlSetState($aRadioT[28],$gui_checked)
    EndIf
    GUICtrlSetData($MsgTag,"'Tag' für Berechnung auf "& $day & " korrigiert!")
    EndIf

    [/autoit]
  • Wochentag- Feiertagsermittlung

    • Oscar
    • 18. April 2009 um 08:25

    Die Eingabe des Datums ist zwar etwas unkonventionell, aber eigentlich ganz cool, weil man das Jahr einfach verändern kann.

    Allerdings hat sich dort ein Bug eingeschlichen, denn in einem Schaltjahr kann ich den 29. Februar nicht auswählen ("Tag für Berechnung auf 28 korrigiert!") und in einem "normalen" Jahr kann ich den 29. Februar auswählen, erhalte aber als Wochentag eine "0" und die Meldung: "Tag für Berechnung auf 29 korrigiert!".

  • Wochentag- Feiertagsermittlung

    • Oscar
    • 17. April 2009 um 22:19

    BugFix, bei Deiner alten Version stand bei den unveränderlichen Feiertagen immer der jeweilige Wochentag dabei. Das fand ich ganz praktisch!

    Ansonsten aber ein schönes Script! :thumbup:

    Edit: Genaugenommen wäre es ganz gut, wenn bei allen Feiertagen der jeweilige Wochentag mit dabei stehen würde. :)

  • Sithwecker doch es läuft nicht mit den Checkboxen

    • Oscar
    • 17. April 2009 um 22:11

    Schau Dir mal FileInstall an.

  • Sithwecker doch es läuft nicht mit den Checkboxen

    • Oscar
    • 17. April 2009 um 22:08

    So ungefähr:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    $sithpic = @MyDocumentsDir & "\DarthVaderROTSV1.jpg"
    Opt("guioneventmode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Sithwecker by sithlord95", 258, 312, 190, 125)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_ende")
    GUISetBkColor(0x000000)
    $Input1 = GUICtrlCreateInput(@HOUR & ":" & @MIN & ":" & @SEC, 0, 24, 209, 21)
    GUICtrlSetBkColor(-1, 0xFF0000)
    $Label1 = GUICtrlCreateLabel("Trage die Weckzeit ein", 0, 0, 212, 17)
    GUICtrlSetBkColor(-1, 0xFF0000)
    $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 120, 80, 17, 17)
    $Label4 = GUICtrlCreateLabel("Mit Messagebox?", 0, 56, 212, 17)
    GUICtrlSetBkColor(-1, 0xFF0000)
    $Label2 = GUICtrlCreateLabel("Mit Beeptönen?", 0, 104, 212, 17)
    GUICtrlSetBkColor(-1, 0xFF0000)
    $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 120, 128, 17, 17)
    $Button1 = GUICtrlCreateButton("Starten", 48, 152, 161, 33, 0)
    $Pic1 = GUICtrlCreatePic($sithpic, 0, 192, 257, 116)
    GUISetState(@SW_SHOW)
    GUICtrlSetOnEvent($Button1, "_start")
    $start = 0
    While 1
    If $start = 1 And GUICtrlRead($Input1) = @HOUR & ":" & @MIN & ":" & @SEC Then
    If BitAND(GUICtrlRead($Checkbox2), $GUI_CHECKED) Then
    Beep(1500, 500)
    Beep(2000, 500)
    Beep(1000, 1000)
    EndIf
    If BitAND(GUICtrlRead($Checkbox1), $GUI_CHECKED) Then
    MsgBox(0, "Weckzeit", "Die Weckzeit ist erreicht :P ")
    EndIf
    $start = 0
    GUICtrlSetState($Button1, $GUI_ENABLE)
    EndIf
    Sleep(50)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _start()
    GUICtrlSetState($Button1, $GUI_DISABLE)
    $start = 1
    EndFunc ;==>_start

    [/autoit] [autoit][/autoit] [autoit]

    Func _ende()
    Exit
    EndFunc ;==>_ende

    [/autoit]

    Edit: Mist, schon wieder zu spät... :rolleyes:

  • Sithwecker doch es läuft nicht mit den Checkboxen

    • Oscar
    • 17. April 2009 um 21:48

    Na dann kommt hier noch ein Tip, damit Du Dein Script debuggen kannst:
    Den Status der Checkboxen musst Du mit:

    [autoit]

    $Status = GUICtrlRead($Checkbox1)

    [/autoit]


    auslesen und dann mit:

    [autoit]

    If BitAnd($Status, $GUI_CHECKED) Then ...

    [/autoit]


    testen.

    Oder Kurzform:

    [autoit]

    If BitAnd(GUICtrlRead($Checkbox1), $GUI_CHECKED) Then ...

    [/autoit]
  • Anwendungspfad anhand der PID ermitteln

    • Oscar
    • 17. April 2009 um 21:39

    Testprogramm:

    [autoit]


    Local $lpTargetPath
    $ret = DllCall("kernel32.dll", "long", "QueryDosDevice", "str", "c:", "str", $lpTargetPath, "long", 256)
    ConsoleWrite($ret[2] & @CR)

    [/autoit]

    Die Ausgabe für meine CF-Karte (im Cardreader, über USB am Mainboard) sieht ähnlich aus:
    "\Device\Harddisk4\DP(1)0-0+a"

    Bei meinen 4 Festplatten kommt aber immer das Volume, z.B.:
    "\Device\HarddiskVolume4"

  • Anwendungspfad anhand der PID ermitteln

    • Oscar
    • 17. April 2009 um 21:06

    Ich kann Dir ja mal die Ausgabe auf meinem Rechner beschreiben:

    Ohne die zusätzlichen Klammern:
    $DevicePath[0] = "\Device\HarddiskVolume3\Programme"
    Das Array $ret liefert in $ret[2] aber nur:
    "\Device\HarddiskVolume3"
    folglich trift die If-Bedingung nie zu und DeviceLetter ist ein Leerstring.

    Mit den zusätzlichen Klammern:
    $DevicePath[0] = "\Device\HarddiskVolume3"
    und der Rest funktioniert. :thumbup:

  • Anwendungspfad anhand der PID ermitteln

    • Oscar
    • 17. April 2009 um 20:37

    BugFix, der Fehler liegt am StringRegExp. Dort wird zuviel in das Array aufgenommen.
    Ändere das mal in:

    [autoit]

    $DevicePath = StringRegExp($path, "(\\Device\\\w*)\\[\w\d\+\-()]*", 1)

    [/autoit]


    dann stimmt das bei mir.

  • Controllkilck ?

    • Oscar
    • 17. April 2009 um 19:44
    Zitat von Bytekiller

    wie heißt der befehl um ein minimiertes fenster zu öffnen ?

    [autoit]

    GUISetState(@SW_RESTORE)

    [/autoit]
  • Hacker gesucht!

    • Oscar
    • 17. April 2009 um 16:20

    Wie willst Du das Programm starten?
    Man kann doch einfach im abgesicherten Modus starten, das Programm aus dem AutoStart entfernen und gut ist?! :S

  • Resoursenfresser

    • Oscar
    • 16. April 2009 um 17:44

    Beim MessageLoop-Mode sorgt bereits GUIGetMsg für eine geringe CPU-Last. Dort ist der Sleep-Befehl nicht nötig.

    Wenn Du aber den OnEvent-Mode benutzt, wird die Endlosschleife endlos durchlaufen (wie der Name schon sagt) und das einzige, was der Prozessor in Deiner While...WEnd-Schleife zu tun hat, sind zwei If-Abfragen zu bearbeiten. Ohne ein Sleep in der Schleife führt das zu 100% Prozessorlast (50% bzw. entsprechend weniger bei Dual- bzw. MultiProzessor-Systemen).

  • Resoursenfresser

    • Oscar
    • 16. April 2009 um 17:28

    Um die CPU-Last zu reduzieren, einfach ein Sleep(50) in die While...WEnd-Schleife.

  • Array: Dopplungen löschen, aber nur hintereinander

    • Oscar
    • 16. April 2009 um 17:24

    Ich hatte das Script kurz nach dem erstellen noch mal ediert. Hast Du möglicherweise noch das erste Script benutzt?
    Weil, mit dem Obenstehenden funktioniert das.

  • Wenn ich ''x'' klicke dann ''y'' klicken?

    • Oscar
    • 16. April 2009 um 17:16

    Das sieht mir auch sehr nach Bot aus. Forenregeln lesen!
    Thread closed!

  • Array: Dopplungen löschen, aber nur hintereinander

    • Oscar
    • 16. April 2009 um 16:57

    Meinst Du so:

    [autoit]


    #include <Array.au3>
    Global $array[5][2] = [[0,1],[3,1],[3,1],[2,1],[0,1]]
    For $i = UBound($array) - 1 To 1 Step -1
    If $array[$i][0] = $array[$i-1][0] And $array[$i][1] = $array[$i-1][1] Then _ArrayDelete($array, $i)
    Next
    _ArrayDisplay($array)

    [/autoit]

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™