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

  • MouseMove Frage

    • Oscar
    • 10. Dezember 2014 um 18:47

    Wieso eine Eingabe über mehrere Input-Controls, wenn Du einfach GUICtrlCreateDate (siehe mein obiges Beispiel) benutzen kannst?
    Dort gibt es das Problem gar nicht. Es wird nämlich immer richtig zurückgegeben. Und es sind auch vom Anwender keine Falscheingaben möglich.

  • Dateiname beim Kopieren notfalls ändern?

    • Oscar
    • 8. Dezember 2014 um 19:57

    Ich hatte mal eine kleine Funktion geschrieben, mit der man einen Dateinamen zurückbekommt, der noch nicht existiert (Zähler angehängt).
    Diese Funktion kannst Du vor dem FileMove mit dem Zielnamen aufrufen und mit dem zurückgegebenen Dateinamen dann FileMove aufrufen.

    Spoiler anzeigen
    [autoit]


    $sFilename = @AutoItExe
    $sFilename = _GetUniqueFileName($sFilename)
    If @error Then
    ConsoleWrite('Fehler = ' & @error & @CR)
    Else
    ConsoleWrite('Dateiname = "' & $sFilename & '"' & @CR)
    EndIf

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

    ;===============================================================================
    ; Function Name: _GetUniqueFileName($sPath)
    ; Description:: Wenn der Dateiname bereits existiert wird ein Zähler
    ; in Form von: "_(1)" an den Dateinamen angehängt.
    ; Parameter(s): $sPath = kompletter Pfad der Datei
    ; Requirement(s): -
    ; Return Value(s): bei Erfolg = der (neue) Dateiname
    ; bei Fehler wird @error = 1 (Pfad falsch angegeben)
    ; Author(s): Oscar (http://www.autoit.de)
    ;===============================================================================
    Func _GetUniqueFileName($sPath)
    Local $aPath, $sNumber = '', $iCount = 0
    $aPath = StringRegExp($sPath, '(.+\\)(.+?)(?:_\(\d*\))*(\..+)', 3)
    If @error Then Return SetError(1, 0, 0)
    While FileExists($aPath[0] & $aPath[1] & $sNumber & $aPath[2])
    $iCount += 1
    $sNumber = '_(' & $iCount & ')'
    WEnd
    Return $aPath[0] & $aPath[1] & $sNumber & $aPath[2]
    EndFunc ;==>_GetUniqueFileName

    [/autoit]
  • Pseudo Desktop - Konstruktive Kritik :-)

    • Oscar
    • 6. Dezember 2014 um 16:02
    Zitat von klaros

    Ach übrigens!
    Durch den Start einer Anwendung wird bei mir sehr wohl die Startleiste wieder eingeblendet und verschwindet wieder, wenn ich die Anwendung schließe.
    Ist das bei dir nicht so? (Auf meinem Rechner habe ich Win 8.1)


    Bei mir mit Win 7, 64 Bit bleibt die Taskleiste und der Startbutton ausgeblendet, während der gesamten Laufzeit des Programms.

    Das starten mehrerer Programme ist eigentlich sogar einfacher (funktioniert allein durch weglassen einiger Befehle).
    Hier mal die MultiTasking-Version:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include '_GuiCtrlSetImageEx.au3'

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

    OnAutoItExitRegister('_OnExit')
    Opt('GUIOnEventMode', 1)
    Opt('WinTitleMatchMode', 4)
    _myTaskHS(True) ; Taskleiste und Startbutton verstecken

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

    Global $iGuiWidth = Int(@DesktopWidth / 2) ; halbe Desktopbreite als Gui-Breite
    Global $iGuiHeight = Int(@DesktopHeight / 2) ; halbe Desktophöhe als Gui-Höhe
    Global $aBkColor[4] = [0x84b5d6, 0xfacd94, 0xd69cd7, 0xe6f791] ; die Hintergrundfarben für die 4 virtuellen Desktops
    Global $sImagePath = @ScriptDir & '\img\' ; Pfad für die Icondateien
    Global $iIconSize = 128 ; Größe der Icons
    Global $ahGui[4] ; Array für die Gui-Handles
    Global $hMainGui = GUICreate('VDesktop', 0, 0, 0, 0) ; Hauptfenster erstellen
    GUISetOnEvent($GUI_EVENT_CLOSE, '_GuiDelete')
    GUISetState(@SW_SHOW, $hMainGui) ; Hauptfenster anzeigen
    For $i = 0 To 3
    $ahGui[$i] = GUICreate('Desktop' & $i + 1, $iGuiWidth, $iGuiHeight, Mod($i, 2) * $iGuiWidth, Int($i / 2) * $iGuiHeight, $WS_POPUP, -1, $hMainGui) ; Gui erstellen
    GUISetBkColor($aBkColor[$i], $ahGui[$i]) ; Hintergrundfarbe setzen
    GUISetOnEvent($GUI_EVENT_CLOSE, '_GuiDelete')
    GUISetState(@SW_SHOW, $ahGui[$i]) ; Gui anzeigen
    GUICtrlCreateLabel($i + 1, 4, 4, 28, 28) ; Label zur Anzeige der VDesktop-Nummer (jeweils oben links)
    GUICtrlSetFont(-1, 20, 600, 0, 'Verdana', 5)
    GUICtrlSetColor(-1, 0x444444)
    Next

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

    ; das folgende Array $aApp beeinhaltet alle Daten für die Anwendungen:
    ; 1. Wert = der virtuelle Desktop
    ; 2. und 3. Wert = die Koordinaten (Left/Top) für das Icon
    ; 4. Wert = das PNG-Bild, das für die Anwendung angezeigt werden soll
    ; 5. Wert = Pfad zu der Anwendung
    ; 6. Wert = die Fensterklasse (das ist die sicherste Methode, das richtige Fenster zu erkennen)
    Global $aApp[4][6] = [ _
    [0, 30, 30, 'calc.png', 'calc.exe', '[CLASS:CalcFrame]'], _
    [1, 30, 30, 'firefox.png', @ProgramFilesDir & '\Mozilla Firefox\firefox.exe', '[CLASS:MozillaWindowClass]'], _
    [2, 30, 30, 'notepad.png', 'notepad.exe', '[CLASS:Notepad]'], _
    [3, 30, 30, 'paint.png', @WindowsDir & '\system32\mspaint.exe', '[CLASS:MSPaintApp]']]

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

    Global $aidApp[UBound($aApp)], $iGui

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

    For $i = 0 To UBound($aApp) - 1
    $iGui = $aApp[$i][0] ; auf welchem VDesktop soll das Icon erstellt werden?
    GUISwitch($ahGui[$iGui]) ; auf diese Gui switchen
    $aidApp[$i] = GUICtrlCreatePic('', $aApp[$i][1], $aApp[$i][2], $iIconSize, $iIconSize) ; an den gespeicherten Koordinaten ein Pic-Control erstellen
    GUICtrlSetCursor(-1, 0) ; den Mauszeiger beim drüberfahren in eine Hand umwandeln
    GUICtrlSetOnEvent(-1, '_StartApp') ; beim anklicken des Icons wird diese Funktion ausgeführt
    _GuiCtrlSetImageEx(-1, $sImagePath & $aApp[$i][3]) ; hier wird das PNG-Bild geladen und dem Pic-Control zugewiesen
    Next
    _SetGuiOnTop(1) ; Die VDesktops OnTop setzen
    _SetGuiOnTop(0) ; Die VDesktops nicht mehr OnTop setzen

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

    WinWaitClose($hMainGui) ; warten, bis das Hauptfenster geschlossen wurde
    Exit

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

    Func _OnExit()
    _myTaskHS(False) ; Taskleiste und Startbutton wieder anzeigen
    EndFunc ;==>_OnExit

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

    Func _GuiDelete()
    For $hGui In $ahGui
    GUIDelete($hGui)
    Next
    GUIDelete($hMainGui)
    EndFunc ;==>_GuiDelete

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

    Func _StartApp()
    Local $hWnd, $iIndex = @GUI_CtrlId - $aidApp[0] ; den Index der angeklickten Anwendung ermitteln
    If Not WinExists($aApp[$iIndex][5]) Then ; wenn das Fenster noch nicht existiert, dann...
    Run($aApp[$iIndex][4]) ; die App starten
    If @error Then Return ; wenn beim starten ein Fehler aufgetreten ist, dann Funktion abbrechen
    $hWnd = WinWait($aApp[$iIndex][5]) ; auf das Fenster warten (Handle wird zurückgegeben)
    Else
    $hWnd = WinGetHandle($aApp[$iIndex][5]) ; das Fenster existiert bereits (Handle holen)
    EndIf
    WinSetOnTop($hWnd, '', 1) ; Fenster OnTop setzen
    WinSetState($hWnd, '', @SW_SHOW) ; App anzeigen
    EndFunc ;==>_StartApp

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

    Func _SetGuiOnTop($iFlag = 0)
    For $hGui In $ahGui
    WinSetOnTop($hGui, '', $iFlag)
    Next
    EndFunc ;==>_SetGuiOnTop

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

    Func _myTaskHS($f_hide = False)
    Local $h_task = WinGetHandle('[CLASS:Shell_TrayWnd]')
    If Not $h_task Then Return SetError(1, 0, 0)
    Local $h_start = 0
    Local $a_wlist = WinList('[CLASS:Button]')
    If Not IsArray($a_wlist) Then Return SetError(2, 0, 0)
    For $iwin = 1 To $a_wlist[0][0]
    If _WinAPI_GetParent($a_wlist[$iwin][1]) = $h_task Then
    $h_start = $a_wlist[$iwin][1]
    ExitLoop
    EndIf
    Next
    If Not $h_start Then Return SetError(3, 0, 0)
    If $f_hide Then
    _WinAPI_ShowWindow($h_start, @SW_HIDE)
    _WinAPI_ShowWindow($h_task, @SW_HIDE)
    Else
    _WinAPI_ShowWindow($h_start, @SW_SHOW)
    _WinAPI_ShowWindow($h_task, @SW_SHOW)
    EndIf
    EndFunc ;==>_myTaskHS

    [/autoit]

    Wie bereits gesagt, ich wusste nicht, welche Features gewünscht sind. Ich habe keine Erfahrung mit geistig Behinderten und wie sie mit Computerprogrammen umgehen.
    Falls Du bei dem Programm noch Hilfe brauchst, solltest Du vielleicht mal etwas ausführlicher auf die speziellen Anforderungen eingehen.

  • MouseMove Frage

    • Oscar
    • 5. Dezember 2014 um 18:17

    Und weil morgen Nikolaus ist, gibt's von mir ein komplettes Beispielscript: :)

    Spoiler anzeigen
    [autoit]


    #include <Date.au3>
    #include <DateTimeConstants.au3>
    #include <GUIConstantsEx.au3>

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

    GUICreate("Auto-Mouse-Move", 380, 140)
    Global $idBegin = GUICtrlCreateDate("", 90, 20, 80, 30, $DTS_TIMEFORMAT)
    GUICtrlSetFont(-1, 14)
    GUICtrlSendMsg($idBegin, $DTM_SETFORMATW, 0, "HH:mm")
    GUICtrlCreateLabel('-', 190, 18, 30, 30)
    GUICtrlSetFont(-1, 20)
    Global $idEnd = GUICtrlCreateDate("", 220, 20, 80, 30, $DTS_TIMEFORMAT)
    GUICtrlSetFont(-1, 14)
    GUICtrlSendMsg($idEnd, $DTM_SETFORMATW, 0, "HH:mm")
    Global $idActivateAMM = GUICtrlCreateCheckbox('Aktiviere Auto-Mouse-Move', 100, 80, 200, 20)
    GUICtrlSetFont(-1, 10)
    GUISetState(@SW_SHOW)

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

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $idActivateAMM
    If BitAND(GUICtrlRead($idActivateAMM), $GUI_CHECKED) Then
    AdlibRegister('_MoveMouse', 500)
    Else
    AdlibUnRegister('_MoveMouse')
    EndIf
    EndSwitch
    WEnd

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

    Func _MoveMouse()
    Local $sTimeBegin = StringFormat('%04i/%02i/%02i ', @YEAR, @MON, @MDAY) & GUICtrlRead($idBegin) & ':00'
    Local $sTimeEnd = StringFormat('%04i/%02i/%02i ', @YEAR, @MON, @MDAY) & GUICtrlRead($idEnd) & ':00'
    $sTimeEnd = _DateAdd('D', Abs(_DateDiff('D', $sTimeBegin, $sTimeEnd)), $sTimeEnd)
    Local $sNow = _NowCalc()
    If _DateDiff('s', $sTimeBegin, $sNow) > 0 And _DateDiff('s', $sTimeEnd, $sNow) < 0 Then
    Local $aPos = MouseGetPos()
    MouseMove($aPos[0] + 2, $aPos[1] + 2)
    MouseMove($aPos[0] - 2, $aPos[1] - 2)
    MouseMove($aPos[0], $aPos[1])
    EndIf
    EndFunc ;==>_MoveMouse

    [/autoit]
  • MouseMove Frage

    • Oscar
    • 4. Dezember 2014 um 17:58

    Wie KloMeister schon schreibt, vergleichst Du zwei Strings miteinander. Dabei wird von links nach rechts verglichen und nicht nach Uhrzeit (das Format kennt AutoIt nicht).
    Also würde ich für die Eingabe nicht eine InputBox verwenden, sondern eine GUI mit GUICtrlCreateDate (Beispiel 3 in der Hilfe zeigt, wie man dann auch nur die Uhrzeit eingeben kann).
    Das schließt dann auch gleich Fehleingaben aus.
    Wenn Du dann die Uhrzeiten im Format "HH:MM:SS" speicherst, kannst Du _DateDiff für den Vergleich verwenden.
    Auf jeden Fall solltest Du auch beachten, dass die Anfangszeit größer als die Endzeit sein kann (Übernachtmodus).

  • Pseudo Desktop - Konstruktive Kritik :-)

    • Oscar
    • 4. Dezember 2014 um 17:45
    Zitat von klaros


    Was sich mir nicht so schnell erschließen wird, wo dein Codse pragmatischer / effizienter / sicherer ist.
    Bzw. wo in meinen Code die heftigsten Fallstricke sind, mit denen du "nicht leben" kannst.

    Ich habe die Kacheln als einzelne Fenster erstellt. Das hat den Vorteil, dass man die Koordinaten für die Anwendungen jeweils Kachelbezogen angeben kann.
    So ist es auch ganz einfach eine Anwendung auf eine andere Kachel zu verlegen. Die Koordinaten bleiben gleich, nur der Eintrag für die Kachel wird geändert.

    Ich persönlich bevorzuge auch den OnEventMode (gerade bei mehreren GUIs). Dieser Modus führt dazu, dass man mehr in Funktionen schreibt (IMHO weniger
    fehleranfällig oder zumindest leichter zu debuggen).

    Die Taskleiste und den Startbutton habe ich bei meiner Variante ausgeblendet (bei Programmende werden sie wieder angezeigt).
    Ich habe das jetzt so geschrieben habe, dass nur eine Anwendung gleichzeitig gestartet werden kann (Programm wartet auf das beenden der Anwendung).
    Ich weiß nicht, ob das so gewünscht ist oder nicht. Wenn nicht, lässt sich das auch ändern.

  • Pseudo Desktop - Konstruktive Kritik :-)

    • Oscar
    • 3. Dezember 2014 um 20:08

    Die Idee finde ich ganz witzig, aber die Umsetzung gefällt mir nicht so sehr.
    Ich habe Dir mal einen neuen Anfang geschrieben. Du darfst das Script gern benutzen und das Ganze erweitern.
    Ich hoffe, Du verstehst das Script (ich habe diverse Kommentare eingefügt).
    Falls es noch Fragen gibt, helfe ich gern weiter.

  • PHP-Funktion/Script nach Autoit portieren

    • Oscar
    • 2. Dezember 2014 um 17:42

    Die Funktion "Base64Decode" ist nicht von mir. Die hatte ich irgendwann mal archiviert.
    Die PHP-Funktion habe ich Dir mal in AutoIt umgeschrieben:

    Spoiler anzeigen
    [autoit]


    $string = 'ByJG+vcfheXXp0poGT3hdPKtcgg='
    ConsoleWrite($string & @CR)
    $string = Base64Decode($string)
    ConsoleWrite(Base16Encode($string) & @CR)

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

    Func Base64Decode($s)
    ; by Eddy
    Local $key = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=', _
    $t = '', $p = -8, $a = 0, $c, $d, $len = StringLen($s)
    For $i = 1 to $len
    $c = StringInStr($key, StringMid($s, $i, 1), 1) - 1
    If $c < 0 Then ContinueLoop
    $a = BitOR(BitShift($a, -6), BitAND($c, 63))
    $p = $p + 6
    If $p >= 0 Then
    $d = BitAND(BitShift($a, $p), 255)
    If $c <> 64 Then $t = $t & Chr($d)
    $a = BitAND($a, 63)
    $p = $p - 8
    EndIf
    Next
    Return $t
    EndFunc ;==>Base64Decode

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

    Func Base16Encode($str)
    Local $aKey = StringSplit('abcdefghijklmnop', '', 2), $char, $ret = ''
    For $i = 1 To StringLen($str)
    $char = Asc(StringMid($str, $i, 1))
    $ret &= $aKey[BitShift(BitAND($char, 0xF0), 4)]
    $ret &= $aKey[BitAND($char, 0x0F)]
    Next
    Return $ret
    EndFunc

    [/autoit]
  • Timer Problem

    • Oscar
    • 1. Dezember 2014 um 13:00

    Schau Dir mal Zeile 16 an. Ohne den Counter würde die Berechnung nicht funktionieren.
    Und da es hier ja nur einen Timer gibt (der immer weiter läuft) muss die Abfrage über diese Berechnung geschehen.

  • Timer Problem

    • Oscar
    • 1. Dezember 2014 um 12:24

    Statt mehrerer Timer kann man auch einfach mit einem einzigen Timer arbeiten.
    Ich habe Dir mal ein Beispiel geschrieben (mit entsprechenden Kommentaren):

    Spoiler anzeigen
    [autoit]


    Global $iTimer = TimerInit(), $iTimerDiff = 0

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

    ; das folgende Array $aFunktions ist ein 2D-Array mit jeweils 3 Werten:
    ; 1. Wert = die aufzurufene Funktion,
    ; 2. Wert = Wann die Funktion aufgerufen werden soll (in Millisekunden)
    ; 3. Wert = Wird als Counter benutzt (wie oft die Funktion aufgerufen wurde)
    Global $aFunktions[3][3] = [['_VPNStatus', 5000, 1], ['_CheckDrives', 20000, 1], ['_SendToNSA', 60000, 1]]

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

    HotKeySet('{ESC}', '_Exit') ; <- um das Programm beenden zu können

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

    ConsoleWrite('!> Programm gestartet!' & @CR)

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

    While Sleep(250) ; Sleep-Befehl, um den Prozessor zu entlasten. Kann auch auf bis zu 10 ms reduziert werden (je nach Aufrufhäufigkeit der Funktionen)
    $iTimerDiff = TimerDiff($iTimer)
    For $i = 0 To UBound($aFunktions) - 1 ; hier werden alle Funktionen aus dem Array überprüft
    If $iTimerDiff / $aFunktions[$i][1] > $aFunktions[$i][2] Then ; ist die TimerDifferenz geteilt durch die Millisekunden größer als der Counter, dann...
    ConsoleWrite(StringFormat('+> Zeit: %i Sek., Aufruf Nr.: %i, Starte Funktion: "%s"\n', Int($iTimerDiff / 1000), $aFunktions[$i][2], $aFunktions[$i][0]))
    $aFunktions[$i][2] += 1 ; den Counter erhöhen
    Call($aFunktions[$i][0]) ; und die Funktion aufrufen
    EndIf
    Next
    WEnd

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

    Func _Exit()
    If MsgBox(4, 'Timer', 'Programm wirklich beenden?') = 7 Then Return
    ConsoleWrite('!> Programm beendet!' & @CR)
    Exit
    EndFunc ;==>_Exit

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

    Func _VPNStatus()
    ConsoleWrite('-> Funktion VPNStatus ausgeführt!' & @CR)
    EndFunc ;==>_VPNStatus

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

    Func _CheckDrives()
    ConsoleWrite('-> Funktion _CheckDrives ausgeführt!' & @CR)
    EndFunc ;==>_CheckDrives

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

    Func _SendToNSA()
    ConsoleWrite('-> Funktion _SendToNSA ausgeführt! ;-)' & @CR)
    EndFunc ;==>_SendToNSA

    [/autoit]
  • StringRegExp-Problem (Gruppe wiederholen)

    • Oscar
    • 30. November 2014 um 19:25

    BugFix : Interessante Lösung, aber eigentlich zu aufwendig. Dann kann ich das gleich mit den StringFunktionen auseinandernehmen.

    Andy: Das ist zwar nicht ganz, was ich will, aber die Werte kann ich dann mit StringSplit trennen.
    Vorne noch eine Klammer um die Buchstaben (die brauche ich auch):

    [autoit]

    '(\w+)((?:\|\d*){20})\|.+?\R'

    [/autoit]


    So reicht mir das dann schon. Danke, für eure Hilfe!

  • StringRegExp-Problem (Gruppe wiederholen)

    • Oscar
    • 30. November 2014 um 12:34

    Ich brauche mal eure Hilfe bei einem RegExp-Problem. Und zwar möchte ich eine Gruppe in dem Pattern wiederholen, aber ich weiß nicht, wie ich das hinkriege.
    Hier mal das Beispielscript (auskommentiert, wie es gehen würde, aber das muss doch auch einfacher möglich sein):

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    $sInput = 'aaa|41|63|43|70|58|52|||||||||||||||3|0|327|54.500|1|7.50|7.50|aaa' & @CRLF
    $sInput &= 'bbb|||||||||||||||||||||2|0|327|54.500|1|7.50|7.50|aaa' & @CRLF
    $sInput &= 'ccc|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|1|0|327|54.500|1|7.50|7.50|aaa' & @CRLF

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

    ; das gibt mir nur den ersten Wert aus. Ich brauche aber zusätzlich die ersten 20 Werte nach den Buchstaben
    $aOut = StringRegExp($sInput, '(\w+)\|(\d*?)\|.+?\R', 3)

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

    ; das folgende würde vom Ergebnis passen, aber geht das nicht einfacher?
    ;~ $aOut = StringRegExp($sInput, '(\w+)\|(\d*?)\|(\d*?)\|(\d*?)\|(\d*?)\|(\d*?)\|(\d*?)\|(\d*?)\|(\d*?)\|(\d*?)\|(\d*?)\|(\d*?)\|(\d*?)\|(\d*?)\|(\d*?)\|(\d*?)\|(\d*?)\|(\d*?)\|(\d*?)\|(\d*?)\|(\d*?)\|.+?\R', 3)

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

    _ArrayDisplay($aOut)

    [/autoit]
  • SerialKeyGenerator mit Array und Random erstellen.

    • Oscar
    • 28. November 2014 um 19:06

    [verschoben nach H&U]

    Zum erstellen von Seriennummern hatte ich mal vor langer Zeit ein Script geschrieben, das außerdem gleich verhindert, dass doppelte Nummern generiert werden.

    Spoiler anzeigen
    [autoit]


    #include <Crypt.au3>
    $iTimer = TimerInit()
    _GenSerials(10000, @ScriptDir & '\_Nummern.txt', @ScriptDir & '\_MD5Checksummen.txt')
    If @error Then MsgBox(0, 'Fehler aufgetreten!', 'Fehlernummer: ' & @error)
    ConsoleWrite(TimerDiff($iTimer) & @CR)

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

    #cs
    ======================================================================================================================
    Function Name: _GenSerials($iCount, $sSerialFile, $sMD5File)
    Description: Seriennummern nach folgendem Muster "AAAA-BBBB-CCCC-DDDD-EEEE" generieren (keine Doppelten)
    Parameter(s): $iCount = Anzahl der Seriennummern
    $sSerialFile = Datei, in der die Seriennummern gespeichert werden
    $sMD5File = Datei, in der die MD5-Hashwerte gespeichert werden
    Author(s): Oscar (http://www.autoit.de)
    ======================================================================================================================
    #ce
    Func _GenSerials($iCount, $sSerialFile, $sMD5File)
    If $iCount < 1 Or Not IsNumber($iCount) Then Return SetError(1, 0, 0)
    Local $hFile1 = FileOpen($sSerialFile, 2)
    Local $hFile2 = FileOpen($sMD5File, 2)
    Local $sChars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789' ; I und 1 sowie O und 0 weggelassen, wegen Verwechslungsgefahr
    Local $iCharCount = StringLen($sChars)
    Local $oDictionary = ObjCreate('Scripting.Dictionary') ; zum Vergleich auf Doppelte (ist viel schneller als StringInStr)
    If $hFile1 <> -1 And $hFile2 <> -1 Then
    Local $sSerialOut = '', $sMD5Out = '', $iTimer = TimerInit()
    For $i = 1 To $iCount
    If TimerDiff($iTimer) > 250 Then
    $iTimer = TimerInit()
    ToolTip('Generiere Seriennummer: ' & $i, @DesktopWidth/2-100, 0)
    EndIf
    Do
    Local $sTmp = ''
    For $j = 1 To 20
    $sTmp &= StringMid($sChars, Random(1, $iCharCount, 1), 1)
    If $j/4 = Int($j/4) And $j < 20 Then $sTmp &= '-'
    Next
    Until Not $oDictionary.Exists($sTmp)
    $oDictionary.Add($sTmp, 0)
    $sSerialOut &= $sTmp & @CRLF
    $sMD5Out &= _Crypt_HashData($sTmp, $CALG_MD5) & @CRLF
    Next
    FileWrite($hFile1, StringTrimRight($sSerialOut, 2))
    FileClose($hFile1)
    FileWrite($hFile2, StringTrimRight($sMD5Out, 2))
    FileClose($hFile2)
    Return 1
    Else
    Return SetError(2, 0, 0)
    EndIf
    EndFunc

    [/autoit]
  • Gedankenfehler?!?

    • Oscar
    • 28. November 2014 um 17:21

    FileOpen benötigt ein gesetztes Bit 4 (Wert = 16), um im BinärModus zu schreiben.

  • Raupi hat Geburtstag!

    • Oscar
    • 27. November 2014 um 19:13

    Na dann: Herzlichen Glückwunsch nachträglich! :party:

  • nach ProcessClose verbleibt Symbol in Taskleiste

    • Oscar
    • 17. November 2014 um 14:58

    Musst Du das Programm denn unbedingt mit ProcessClose beenden?
    Funktioniert WinClose nicht?

  • _Arraydisplay an Textdatei anfügen

    • Oscar
    • 17. November 2014 um 12:39

    Du kannst die Arrays nicht einfach mit "&" verketten. Das funktioniert nur mit Strings.
    Ich verstehe aber auch nicht, warum Du das nicht gleich mit StringRegExpReplace machst.
    Beispiel:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>

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

    $Form1 = GUICreate("Form1", 440, 256, 422, 225)
    $btnDatei = GUICtrlCreateButton("Textdatei generieren", 216, 152, 123, 41)
    GUISetState(@SW_SHOW)

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

    $Text = "Suche1Hans MüllerEnde1,Suche2HauptstrasseEnde2,Suche366554Ende3,Suche4HamelnEnde4"; hier kommen die Ergebnisse her!

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

    $Adresse = StringRegExpReplace($Text, 'Suche1(.*?)Ende1,Suche2(.*?)Ende2,Suche3(.*?)Ende3,Suche4(.*?)Ende4', '$1;$2;$3;$4')
    $datei = "test.txt"

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $btnDatei
    FileWrite($datei, $Adresse & @CRLF) ;in Datei schreiben
    ShellExecute($datei)

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

    EndSwitch
    WEnd

    [/autoit]
  • _Arraydisplay an Textdatei anfügen

    • Oscar
    • 17. November 2014 um 11:05

    Bitte das Script posten! Ansonsten kann das niemand nachvollziehen.

  • Programme durch ausschalten des Monitors beenden

    • Oscar
    • 17. November 2014 um 05:26

    Schau Dir mal _Timer_GetIdleTime an.
    Wenn der zurückgegebene Wert den Wert des Screenblankers überschreitet, dann kannst Du die Programme beenden.
    Ist der Wert kleiner, startest Du die Programme.

  • ListViewItem bei Rechtsklick lesen

    • Oscar
    • 15. November 2014 um 07:49

    In der Hilfe zu "_GUICtrlListView_Create" steht ein Beispiel. Daraus kann man sich etwas passendes basteln:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <GuiImageList.au3>
    #include <GuiListView.au3>
    #include <WindowsConstants.au3>

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

    Global $g_hListView

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

    Example()

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

    Func Example()
    Local $hGUI, $hImage
    $hGUI = GUICreate("(UDF Created) ListView Create", 400, 300)

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

    $g_hListView = _GUICtrlListView_Create($hGUI, "", 2, 2, 394, 268)
    _GUICtrlListView_SetExtendedListViewStyle($g_hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
    GUISetState(@SW_SHOW)

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

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    ; Load images
    $hImage = _GUIImageList_Create()
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($g_hListView, 0xFF0000, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($g_hListView, 0x00FF00, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($g_hListView, 0x0000FF, 16, 16))
    _GUICtrlListView_SetImageList($g_hListView, $hImage, 1)

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

    ; Add columns
    _GUICtrlListView_InsertColumn($g_hListView, 0, "Column 1", 100)
    _GUICtrlListView_InsertColumn($g_hListView, 1, "Column 2", 100)
    _GUICtrlListView_InsertColumn($g_hListView, 2, "Column 3", 100)

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

    ; Add items
    _GUICtrlListView_AddItem($g_hListView, "Row 1: Col 1", 0)
    _GUICtrlListView_AddSubItem($g_hListView, 0, "Row 1: Col 2", 1)
    _GUICtrlListView_AddSubItem($g_hListView, 0, "Row 1: Col 3", 2)
    _GUICtrlListView_AddItem($g_hListView, "Row 2: Col 1", 1)
    _GUICtrlListView_AddSubItem($g_hListView, 1, "Row 2: Col 2", 1)
    _GUICtrlListView_AddItem($g_hListView, "Row 3: Col 1", 2)

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

    ; Loop until the user exits.
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
    EndFunc ;==>Example

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

    Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $wParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
    ; Local $tBuffer
    $hWndListView = $g_hListView
    If Not IsHWnd($g_hListView) Then $hWndListView = GUICtrlGetHandle($g_hListView)

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

    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $NM_RCLICK ; Sent by a list-view control when the user clicks an item with the right mouse button
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
    Local $iIndex = DllStructGetData($tInfo, "Index")
    Local $iSubItem = DllStructGetData($tInfo, "SubItem")
    MsgBox(0, 'RMB', 'Index: ' & $iIndex & @CR & 'SubItem: ' & $iSubItem)
    Return 0 ; allow the default processing
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/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™