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

  • GDIPlus verschwindet

    • Oscar
    • 9. September 2014 um 17:51

    Man benutzt dazu am besten einen BackBuffer. Man zeichnet in diesen Buffer und bei WM_PAINT zeichnet man den Buffer auf die GUI.
    Hier mal ein kleines Beispiel dazu:

    Spoiler anzeigen
    [autoit]


    #include <GDIPlus.au3>
    #include <WindowsConstants.au3>

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

    _GDIPlus_Startup()
    Global $iSize = 30, $iGuiSize = 600
    $hGUI = GUICreate('GDI+', $iGuiSize, $iGuiSize)
    GUISetState()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iGuiSize, $iGuiSize, $hGraphic)
    $hGraphicBuff = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    For $y = 0 To Int($iGuiSize / $iSize) - 1
    For $x = 0 To Int($iGuiSize / $iSize) - 1
    _GDIPlus_GraphicsDrawRect($hGraphicBuff, $x * $iSize, $y * $iSize, $iSize, $iSize)
    Next
    Next
    _GDIPlus_GraphicsDrawImage($hGraphic, $hBitmap, 0, 0)

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

    GUIRegisterMsg($WM_PAINT, 'WM_PAINT')

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

    Do
    Until GUIGetMsg() = -3

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

    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphicBuff)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()

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

    Func WM_PAINT($hWnd, $Msg, $wParam, $lParam)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hBitmap, 0, 0)
    EndFunc ;==>WM_PAINT

    [/autoit]
  • Video-Archiv

    • Oscar
    • 8. September 2014 um 18:44

    Wenn Du Dir die Mühe machen willst, bitte!

    Wenn ich das richtig in Erinnerung habe, müsste das im Wesentlichen zwei Funktionen betreffen:

    [autoit]


    _WinAPI_LoadIconWithScaleDown()
    _FileListToArrayRec()

    [/autoit]


    Alles andere gab es wohl schon in v3.3.8.1.

  • Video-Archiv

    • Oscar
    • 7. September 2014 um 19:18

    Das mit den fehlenden Includes liegt daran, dass Du nicht die aktuelle (v3.3.12.0) AutoIt-Version benutzt. Dort sind diese Includes dabei.

    Die AntiVir-Meldung ist (mal wieder) eine Falschmeldung!
    Du musst die Exe aber nicht benutzen. Das Script befindet sich im ZIP-Archiv. Damit kannst Du Dir eine eigene Exe compilieren.

  • Video-Archiv

    • Oscar
    • 6. September 2014 um 19:58

    Inspiriert durch diesen Beitrag: [ offen ] Umsteiger sucht Hilfe - Grundlagen und weil ich so ein Programm ganz brauchbar finde, habe ich mich mal rangesetzt und das Programm geschrieben.
    Herausgekommen ist das "Video-Archiv":

    Funktionen:
    - Man kann alle möglichen (*.avi;*.flv;*.mkv;*.mov;*.mpg;*.mpeg;*.mp4;*.wmv) Videodateien in das Archiv einlesen.
    - Ganze Video-Ordner (rekursiv) einlesen lassen.
    - Markierte Einträge aus dem Archiv entfernen lassen.
    - Ein Doppelklick auf einen Eintrag und das Video wird gestartet (wenn VLC installiert ist, dann wird das Video mit VLC im Vollbild-Modus gestartet. Wenn kein VLC installiert ist, dann wird das Video per ShellExecute gestartet).
    - Das Archiv sortieren lassen oder per Drag 'n Drop selbst sortieren.
    - Das Archiv abspeichern mit wählbarem Dateinamen (Endung: ".via").
    - und Archiv laden natürlich.

    Neu in Version 1.1 :
    - Letztes geladenes und gespeichertes Archiv wird beim Neustart automatisch geladen (Video-Archiv.ini).
    - Dateiendung, Erstellungsdatum und Dateigröße werden jetzt in der Liste angezeigt.
    - Wurde das Archiv verändert, dann wird eine Warnmeldung (noch nicht gespeichert) ausgegeben, wenn man das Programm schließt.
    - Mit einem Rechtsklick auf einen Eintrag (Contextmenü), kann man sich nun Detail-Informationen zu dem Film anzeigen lassen (Ausgabe von MediaInfo.dll).
    - Außerdem kann man ein Explorerfenster mit dem Film-Verzeichnis öffnen lassen.
    - Wird ein ganzer Ordner (rekursiv) eingelesen, dann erscheint ein Warte-Cursor und ein Warte-Hinweis (längere Ladedauer).
    - Es wird nun überprüft, ob eine Datei bereits in der Liste vorhanden ist. Wenn bereits vorhanden, dann wird sie nicht erneut aufgenommen.

    Screenshot:
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Alle Dateien (Script, Icons, Exe, Dll) befinden sich im ZIP-Archiv (Anhang).

    Dateien

    Video-Archiv_11.zip 2,24 MB – 430 Downloads
  • Internet sperren, Netzwerk erreichbarkeit erhalten

    • Oscar
    • 6. September 2014 um 16:09

    Rechner aufgeschraubt, Batterie raus (BIOS-Reset), neu konfigurieren und trotzdem von CD starten. ;)
    Ok, jetzt kommt: "Rechnerschloß am Gehäuse." :D

  • Internet sperren, Netzwerk erreichbarkeit erhalten

    • Oscar
    • 6. September 2014 um 16:02

    Vor allem, wenn sie wirklich ins Internet wollen, dann starten sie halt ein Linux von CD und umgehen so alle Beschränkungen, die Du in Windows eingebaut hast.
    Der einzig wirkliche Schutz, ist der im Router (wie schon erwähnt).

  • Internet sperren, Netzwerk erreichbarkeit erhalten

    • Oscar
    • 5. September 2014 um 16:36

    Naja, die meisten "Kinder" (so ab 12 aufwärts) legen den Prozess lahm und surfen munter weiter. :D
    Ich denke, so eine "Kindersicherung" sollte man nicht auf einen Rechner laufen lassen, sondern den Router entsprechend konfigurieren (Passwortschutz nicht vergessen).

  • Pixelsearch-Move?!

    • Oscar
    • 31. August 2014 um 10:52

    Ich hab' den Thread mal aktiviert, obwohl das schon nach einem Bot aussieht.
    Also beschreib doch erstmal, was das werden soll. Vorher gibt's hier keine Hilfe.

  • _DateImage

    • Oscar
    • 31. August 2014 um 10:38

    Das stimmt!
    Ich hätte das vielleicht noch erwähnen sollen. Das Script läuft erst ab v3.3.12.0 wegen _DateToMonth, aber auch wegen _DateDayOfWeek und $MB_ICONERROR, $MB_ICONINFORMATION bei der MsgBox.
    _DateDayOfWeek liefert aber mittlerweile auch die deutschen (bzw. lokalisierten) Wochentagsnamen.
    Für mich überwiegen die Vorteile der neuen Version, weswegen ich die Script-Breaking-Changes in Kauf nehme und ggf. meine Scripte anpasse.

  • _StringBetween @error - Stack Overflow - Funktion in Funktion

    • Oscar
    • 31. August 2014 um 10:27

    Vor allem verstehe ich nicht, wie jemand, der mehr als vier Jahre hier angemeldet ist, trotzdem noch solch mangelhafte Problembeschreibungen abliefert. :huh:

  • Eingabe Dateiname prüfen

    • Oscar
    • 31. August 2014 um 10:19

    Um das RegExp-Pattern einfach zu halten, könnte man alle erlaubten Zeichen aus dem String löschen und danach auf einen Leerstring testen:

    Spoiler anzeigen
    [autoit]


    $erlaubte_zeichen = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_ 1234567890" & "ÄÖÜäöüß\-\."

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

    $teststring = "Blablub12345.txt"
    $test = String_enthaelt_erlaubte_Zeichen($teststring, $erlaubte_zeichen)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $test = ' & $test & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

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

    $teststring = "Blablub12345.jpg"
    $test = String_enthaelt_erlaubte_Zeichen($teststring, $erlaubte_zeichen)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $test = ' & $test & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

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

    $teststring = 'test*.exe'
    $test = String_enthaelt_erlaubte_Zeichen($teststring, $erlaubte_zeichen)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $test = ' & $test & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

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

    Func String_enthaelt_erlaubte_Zeichen($string, $erlaubt = "1234567890") ;return 1, wenn alle Zeichen im String erlaubt sind
    If $string = "" Or $erlaubt = "" Then Return False
    Return StringRegExpReplace($string, "[" & $erlaubt & "]", "") = ""
    EndFunc ;==>String_enthaelt_erlaubte_Zeichen

    [/autoit]
  • _DateImage

    • Oscar
    • 30. August 2014 um 16:48

    Diese UDF erstellt ein Bild mit dem Datum (Wochentag, Tag. Monat, Jahr). Also quasi ein Kalenderblatt als Anzeige für das Datum.
    Da es sich um ein ganz normales Pic-Control (Größe: 72x72 Pixel) handelt, kann man es auch mit GUICtrlSetPos verschieben, mit GUICtrlSetState anzeigen/verstecken und mit GuiCtrlSetOnEvent (bzw. GuiGetMsg-Abfrage) mit einem KlickEvent belegen.
    Zum erstellen gibt es:

    [autoit]

    $ControlID = _DateImage_Create($iLeft, $iTop, $sDate, $iColor)

    [/autoit]

    Zum ändern des Datums/der Farbe:

    [autoit]

    _DateImage_SetData($ControlID, $sDate, $iColor)

    [/autoit]

    Screenshot:
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    UDF
    [autoit]


    #include-once
    #include <Date.au3>
    #include <DateTimeConstants.au3>
    #include <GDIPlus.au3>
    #include <MsgBoxConstants.au3>
    #include <WinAPI.au3>
    _GDIPlus_Startup()
    OnAutoItExitRegister('_DateImage_BitmapDispose')
    Global $__g_sDateImage_Version = '1.0.0.0'
    Global $__g_sDateImage_Date = '30.08.2014'
    Global $__g_hDateImage_Image = _GDIPlus_BitmapCreateFromMemory(_DateImage_Calendar())
    If @error Then Exit MsgBox($MB_ICONERROR, 'DateImage-UDF', 'Fehler! "date_big.ico" konnte nicht gelesen werden!')

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

    Func _DateImage_BitmapDispose()
    _GDIPlus_BitmapDispose($__g_hDateImage_Image)
    _GDIPlus_Shutdown()
    EndFunc ;==>_DateImage_BitmapDispose

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

    Func _DateImage_Create($iLeft = 0, $iTop = 0, $sDate = '', $iColor = '')
    Local $idPicControl = GUICtrlCreatePic('', $iLeft, $iTop, 72, 72)
    If $idPicControl = 0 Then Return SetError(1, 0, 0)
    If $sDate = '' Or $sDate = Default Then $sDate = StringFormat('%04i/%02i/%02i', @YEAR, @MON, @MDAY)
    If $iColor = '' Or $iColor = Default Then $iColor = 0xFF000088
    _DateImage_SetData($idPicControl, $sDate, $iColor)
    Return $idPicControl
    EndFunc ;==>_DateImage_Create

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

    Func _DateImage_SetData($ControlID, $sDate = '', $iColor = '')
    Local $hWnd = GUICtrlGetHandle($ControlID)
    If Not IsHWnd($hWnd) Then Return SetError(1, 0, 0)
    If $sDate = '' Or $sDate = Default Then $sDate = StringFormat('%04i/%02i/%02i', @YEAR, @MON, @MDAY)
    If $iColor = '' Or $iColor = Default Then $iColor = 0xFF000088
    Local Const $STM_SETIMAGE = 0x0172
    Local Const $IMAGE_BITMAP = 0
    Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    Local $hBrush = _GDIPlus_BrushCreateSolid($iColor)
    Local $hFormat = _GDIPlus_StringFormatCreate()
    _GDIPlus_StringFormatSetAlign($hFormat, 1)
    Local $hFamily = _GDIPlus_FontFamilyCreate('Times New Roman')
    Local $hFont = _GDIPlus_FontCreate($hFamily, 12, 1)
    Local $tLayout = _GDIPlus_RectFCreate(2, 10, 68, 60)
    Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics(72, 72, $hGraphic)
    Local $hGfxCtx = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    Local $aDate, $aTime
    _DateTimeSplit($sDate, $aDate, $aTime)
    Local $iWeekday = _DateToDayOfWeek($aDate[1], $aDate[2], $aDate[3])
    Local $sMonth = _DateToMonth($aDate[2], $DMW_LOCALE_SHORTNAME)
    Local $sDay = StringFormat('%s.\n%2i. %s\n%04i', _DateDayOfWeek($iWeekday, $DMW_LOCALE_SHORTNAME), $aDate[3], $sMonth, $aDate[1])
    _GDIPlus_GraphicsDrawImageRect($hGfxCtx, $__g_hDateImage_Image, 0, 0, 72, 72)
    Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $sDay, $hFont, $tLayout, $hFormat)
    _GDIPlus_GraphicsDrawStringEx($hGfxCtx, $sDay, $hFont, $aInfo[0], $hFormat, $hBrush)
    Local $hBMP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
    _WinAPI_DeleteObject(GUICtrlSendMsg($ControlID, $STM_SETIMAGE, $IMAGE_BITMAP, $hBMP))
    _WinAPI_DeleteObject($hBMP)
    _GDIPlus_GraphicsDispose($hGfxCtx)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_GraphicsDispose($hGraphic)
    EndFunc ;==>_DateImage_SetData

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

    Func _DateImage_Info()
    MsgBox($MB_ICONINFORMATION, 'DateImage-UDF', StringFormat('Autor:\tOscar (http://www.autoit.de)\nVersion:\t%s\nDatum:\t%s', $__g_sDateImage_Version, $__g_sDateImage_Date))
    EndFunc ;==>_DateImage_Info

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

    ;Code below was generated by: 'File to Base64 String' Code Generator v1.18 Build 2014-08-02
    Func _DateImage_Calendar($bSaveBinary = False, $sSavePath = @ScriptDir)
    Local $Calendar
    $Calendar &= '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'
    $Calendar &= 'PwA/AD8APwA/AD8APwA/AO8/ADYA/xH0EeXwAT8APwD/PwA/AD8APwA/AD8APwA/AH8/AD8APwA/ADQA/xHzEeb85OE/AD8APwA/AD8APwD/PwA/AD8APwA/AD8APwA/APc2AP8R9RHgPwA/AD8APwA/PwA/AD8APwA/AD4AuLIw4P/m5EswAQCqp8Cj/wAAABYBBgEWnQEA5QA2AQeWj+Pf/wHH/wD+ANVH5OLf/wD/APf/APwA10fe/wB/AH8AfwDvfwB/AHYA9SPjYAN/AH8Af38AfwB/AH8AfwBzAPYj4f7dfwB/AH8AfwB/AH8AfwD/dAD1Ix8AHwAfAB8AHwAfAA8fAA8ACQD5EQww4f8AIUHh/wYq3P8ECCswACzd/wgtoOD/By3icADh8wD+LHEBPwA/AD8APwA/AD8A/z8APwA/AD8APwAzAD8OsQ8PMRCxEDER9REYQOX/AFNx6/8XQOT/ABpC5f8ZQur/AAwrpv8KK6r/AA0sp/8aQ+r/gBtD5f8cQ+Q/AP84AD8CvwE/AL8BvwF/AbkB7z8CvwM9AD8O6rIPMRCxEAMxEfURGUbr/3iSEPT/F0VwEEjs/wAXRvP/b3WQ/wCVjHf/U1p1/wAZSPX/HEnt//gdSes/ADgAPwK/AT8A/78BvwF/AbkBPwK/Az0APw55MA5I7TIQsRAxEfQRFQAXS/H/mrD4/wAQRfD/E0jy/wAMRfr/p5+L/wDAu7H/dGxZ/wAPSP3/FEnz//gVSfE/ADgAPwK/AT8A/78BvwF/AbkBPwK/Az0APw74/f8T8AIxELEQMRGxEQEwAA0XUPf/p70Q/P+lvDEA/f+fALn//5+Yif/QAMzH/21mWP+iwL3//6a9/jICPwD/NwA/Ar8BPwC/Ab8BfwG5AY8/Ar8DPQA/Dv//pfACHzEQ8QExEbERMAAEF1ck/f8xABVVMBRU/wD/CU///6CYiAD/5eHc/25mVwD/DVP//xRV///yAT8ANwA/Ar8BPwC/Ab8B/38BuQE/Ar8DPQA/DjcO9RAPsREwAA8AcBOgmov/gP789/9vaFp1FP8PAA8ADwAPAA8ADwAPAA8ADw8ADwAPAD4OQ7AA9/9vaFr/AAAMAA0AMCUABIN/ff7/BQwBHih2pQD/cX8APwD/PwA/AD8APwA/AD8APwAfACMfABIA+D//AQD8HwFsAQ=='
    $Calendar = _WinAPI_Base64Decode($Calendar)
    Local $tSource = DllStructCreate('byte[' & BinaryLen($Calendar) & ']')
    DllStructSetData($tSource, 1, $Calendar)
    Local $tDecompress
    _WinAPI_LZNTDecompress($tSource, $tDecompress, 21662)
    $tSource = 0
    Local $bString = Binary(DllStructGetData($tDecompress, 1))
    If $bSaveBinary Then
    Local $hFile = FileOpen($sSavePath & "\calendar.ico", 18)
    FileWrite($hFile, $bString)
    FileClose($hFile)
    EndIf
    Return $bString
    EndFunc ;==>_date_blank

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

    Func _WinAPI_Base64Decode($sB64String)
    Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0)
    If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "")
    Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]")
    $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0)
    If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "")
    Return DllStructGetData($bBuffer, 1)
    EndFunc ;==>_WinAPI_Base64Decode

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

    Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iBufferSize)
    $tOutput = DllStructCreate("byte[" & $iBufferSize & "]")
    If @error Then Return SetError(1, 0, 0)
    Local $aRet = DllCall("ntdll.dll", "uint", "RtlDecompressBuffer", "ushort", 0x0002, "struct*", $tOutput, "ulong", $iBufferSize, "struct*", $tInput, "ulong", DllStructGetSize($tInput), "ulong*", 0)
    If @error Then Return SetError(2, 0, 0)
    If $aRet[0] Then Return SetError(3, $aRet[0], 0)
    Return $aRet[6]
    EndFunc ;==>_WinAPI_LZNTDecompress

    [/autoit]
    Beispiel
    [autoit]


    #include <GUIConstantsEx.au3>
    #include '_DateImage.au3'
    ;~ _DateImage_Info()
    Global $sDate = StringFormat('%04i/%02i/%02i', @YEAR, @MON, @MDAY)
    Global $iColor = 0xCC008800 ; <- Die Farbe für die Schrift im ARGB-Format

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

    Global $hGui = GUICreate('Datumsanzeige', 400, 300)
    GUISetBkColor(0xA0A0C0)
    Global $idDateImage = _DateImage_Create(300, 20, $sDate, $iColor)
    GUISetState()

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

    Sleep(1000)
    $sDate = StringFormat('%04i/%02i/%02i', 2014, 12, 31)
    _DateImage_SetData($idDateImage, $sDate, $iColor)

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

    GUICtrlSetPos($idDateImage, 170, 70)

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

    Sleep(500)
    GUICtrlSetState($idDateImage, $GUI_HIDE)
    Sleep(500)
    GUICtrlSetState($idDateImage, $GUI_SHOW)

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

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $idDateImage
    $sDate = _InputDateBox(0, '', '', $sDate)
    _DateImage_SetData($idDateImage, $sDate)
    EndSwitch
    WEnd

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

    ;===============================================================================
    ; Function Name: _InputDateBox([$iFormat][, $sTitle][, $sText][, $sDefaultDate][, $hParent])
    ; Description: Fragt den Benutzer nach Datum oder Datum und Uhrzeit und gibt dies als String zurück
    ; Parameter(s): $iFormat = 0 oder 1
    ; bei 0 wird nur nach dem Datum gefragt (Uhrzeit wird dann als "00:00:00" zurückgegeben)
    ; bei 1 wird nach Datum und Uhrzeit gefragt
    ; Requirement: -
    ; Return Value(s): bei Erfolg = String in Form von: "YYYY/MM/DD hh:mm:ss"
    ; bei Abbruch = Leerstring und @error = 1
    ; Author(s): Oscar (http://www.autoit.de)
    ;===============================================================================
    Func _InputDateBox($iFormat = 1, $sTitle = '', $sText = '', $sDefaultDate = '', $hParent = '')
    If $iFormat < 0 Or $iFormat > 1 Then $iFormat = 1
    If $sTitle = '' Or $sTitle = Default Then $sTitle = 'Datum-Box'
    If $sText = '' Or $sText = Default Then $sText = 'Bitte Datum auswählen!'
    If $iFormat Then $sText = 'Bitte Datum und Uhrzeit auswählen!'
    Local $iOnEventMode = Opt('GUIOnEventMode', 0), $sRetDate = '', $iError = 0
    Local $hGui = GUICreate($sTitle, 220 + $iFormat * 85, 130, Default, Default, Default, 8, $hParent)
    GUISetBkColor(0xCCCCCC, $hGui)
    GUISetIcon('shell32.dll', 24, $hGui)
    GUICtrlCreateGroup($sText, 10, 20, 200 + $iFormat * 85, 70)
    GUICtrlSetFont(-1, 10, 400, 0, 'Arial', 5)
    GUICtrlCreateIcon('shell32.dll', -21, 20, 48, 32, 32)
    Local $idDate = GUICtrlCreateDate($sDefaultDate, 65, 49, 135 + $iFormat * 85, 30)
    Local $hWnd = GUICtrlGetHandle($idDate)
    GUICtrlSetFont(-1, 14, 400, 0, 'Verdana', 5)
    If $iFormat Then
    Local $DTM_SETFORMAT_ = 0x1032
    Local $sFormat = 'dd.MM.yyyy HH:mm:ss'
    GUICtrlSendMsg($idDate, $DTM_SETFORMAT_, 0, $sFormat)
    Else
    GUICtrlSetStyle($idDate, 0)
    EndIf
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    Local $idOk = GUICtrlCreateButton('Ok', 60 + $iFormat * 85, 100, 60, 25, 1) ; <- Value 1 = $BS_DEFPUSHBUTTON
    Local $idCancel = GUICtrlCreateButton('Abbrechen', 130 + $iFormat * 85, 100, 80, 25)
    GUISetState(@SW_SHOW, $hGui)
    While True
    Switch GUIGetMsg()
    Case $idCancel, -3 ; <- Value -3 = $GUI_EVENT_CLOSE
    $iError = 1
    ExitLoop
    Case $idOk
    $sRetDate = StringRegExpReplace(GUICtrlRead($idDate), '(\d{2})\.(\d{2})\.(\d{4}).*', '$3/$2/$1')
    If $iFormat Then
    $sRetDate &= StringRegExpReplace(GUICtrlRead($idDate), '\d{2}\.\d{2}\.\d{4} (\d{2}):(\d{2}):(\d{2})', ' $1:$2:$3')
    Else
    $sRetDate &= ' 00:00:00'
    EndIf
    ExitLoop
    EndSwitch
    WEnd
    GUIDelete($hGui)
    Opt('GUIOnEventMode', $iOnEventMode)
    Return SetError($iError, 0, $sRetDate)
    EndFunc ;==>_InputDateBox

    [/autoit]

    Dateien

    _DateImage_Screenshot.png 14,92 kB – 0 Downloads _DateImage.au3 8,41 kB – 233 Downloads
  • Minimieren als TrayIcon

    • Oscar
    • 27. August 2014 um 19:23

    Zum speichern von Einstellungen und Daten ist eigentlich das Anwendungsverzeichnis des Benutzers vorgesehen (dort brauchst Du keine zusätzlichen Rechte).
    Bei AutoIt gibt es dazu das Makro: @AppDataDir.
    Im Anwendungsverzeichnis erstellst Du ein Verzeichnis für Dein Programm:

    [autoit]

    DirCreate(@AppDataDir & '\DeinProgramm\')

    [/autoit]


    und schreibst dann die Daten in das erstellte Verzeichnis.

  • String nach 30 Zeichen splitten?

    • Oscar
    • 27. August 2014 um 18:21

    BugFix : Und was passiert, wenn das Leerzeichen erst nach den 30 Zeichen kommt (ok, in der Realität sehr unwahrscheinlich ^^ )?

  • String nach 30 Zeichen splitten?

    • Oscar
    • 27. August 2014 um 17:55

    Ich habe das jetzt mal als Funktion (Array als Rückgabe) geschrieben:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    Local $string = "Hallo Autoit.de, das ist ein Beispielstring der aufgeteilt gehört, aber erst nach z.B: 30 Zeichen, hier wird er leider nach allen 9 geteilt."
    Local $aResult = _StringSplitAtPos($string, 24, 1)
    _ArrayDisplay($aResult)

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

    Func _StringSplitAtPos($sText, $iPos, $iFlag = 1)
    Local $sSeparatorChar = Opt('GUIDataSeparatorChar')
    If $iPos >= StringLen($sText) Then Return SetError(0, 0, StringSplit($sText, $sSeparatorChar, $iFlag))
    Local $sReturn, $iFound, $iSplit
    Do
    $iFound = 0
    Do
    $iSplit = $iFound
    $iFound = StringInStr($sText, ' ', 2, 1, $iFound + 1)
    Until $iFound > $iPos Or $iFound = 0
    If $iSplit = 0 Then $iSplit = $iPos
    $sReturn &= StringLeft($sText, $iSplit) & $sSeparatorChar
    $sText = StringMid($sText, $iSplit + 1)
    Until StringLen($sText) <= $iPos
    Return SetError(0, 0, StringSplit($sReturn & $sText, $sSeparatorChar, $iFlag))
    EndFunc ;==>_StringSplitAtPos

    [/autoit]

    Edit: Kleinen Fehler beseitigt!
    Edit2: Noch einen Fehler beseitigt!

  • Datei "session.txt" (in einem fest definierten Verzeichnis) überwachen und Folgeaktion auslösen

    • Oscar
    • 26. August 2014 um 15:14

    Ich würde _WinAPI_ShellChangeNotifyRegister benutzen. :D

  • Links zu Webseiten in einer Gui anzeigen

    • Oscar
    • 25. August 2014 um 17:37

    Hier mal ein Scriptbeispiel, wie man Links zu Webseiten am besten in eine Gui einbauen kann.
    Mit MouseHover-Tooltip und Mouse-Hover-Icons:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>

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

    Global $sLink1 = 'http://www.autoit.de'
    Global $sLink2 = 'http://www.autoitscript.com'

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

    Global $hGui = GUICreate('Test', 400, 300)

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

    Global $idIcon1 = GUICtrlCreateIcon('shell32.dll', -14, 20, 46, 32, 32)
    Global $idLabel1 = GUICtrlCreateLabel('www.autoit.de', 60, 50, 116, 22)
    GUICtrlSetFont(-1, 14, 400, 4, 'Arial', 5)
    GUICtrlSetColor(-1, 0x0000CC)
    GUICtrlSetCursor(-1, 0)
    GUICtrlSetTip(-1, $sLink1)

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

    Global $idIcon2 = GUICtrlCreateIcon('shell32.dll', -14, 20, 116, 32, 32)
    Global $idLabel2 = GUICtrlCreateLabel('www.autoitscript.com', 60, 120, 170, 22)
    GUICtrlSetFont(-1, 14, 400, 4, 'Arial', 5)
    GUICtrlSetColor(-1, 0x0000CC)
    GUICtrlSetCursor(-1, 0)
    GUICtrlSetTip(-1, $sLink2)

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

    GUISetState()

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

    Global $aCursorInfo
    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE ; Gui schließen
    Exit
    Case $idLabel1 ; Link1 angeklickt
    ShellExecute($sLink1) ; Link1 aufrufen
    Case $idLabel2 ; Link2 angeklickt
    ShellExecute($sLink2) ; Link2 aufrufen
    Case $GUI_EVENT_MOUSEMOVE ; bei einer Mausbewegung
    $aCursorInfo = GUIGetCursorInfo($hGui) ; CursorInfo holen
    If Not @error Then
    Switch $aCursorInfo[4] ; Die ID über dessen Control-Element sich die Maus befindet
    Case $idLabel1, $idIcon1
    GUICtrlSetImage($idIcon1, 'shell32.dll', -15)
    Case $idLabel2, $idIcon2
    GUICtrlSetImage($idIcon2, 'shell32.dll', -15)
    Case Else
    GUICtrlSetImage($idIcon1, 'shell32.dll', -14)
    GUICtrlSetImage($idIcon2, 'shell32.dll', -14)
    EndSwitch
    EndIf
    EndSwitch
    WEnd

    [/autoit]
  • Autoit Backup Ordner

    • Oscar
    • 25. August 2014 um 11:16

    Stimmt! Es funktioniert doch nicht!
    Ich hatte gedacht, dass es funktioniert, weil ich keine Änderung am Script vorgenommen habe. Dann wird kein backup erzeugt, aber sobald man am Script etwas ändert und Tidy aufruft, wird wieder ein Backup erstellt.
    Nach diversen Versuchen musste ich feststellen, dass die "0" als Parameter auch nicht für "kein Backup" steht, sondern für "all", also beliebig viele. :(

  • Autoit Backup Ordner

    • Oscar
    • 25. August 2014 um 09:40

    Die Muster-Ini liegt in: "%LOCALAPPDATA%\AutoIt v3\SciTE\Tidy\"
    In dieses Verzeichnis muss dann auch die richtige Inidatei "Tidy.ini".
    Ich habe es mal damit getestet:

    Spoiler anzeigen
    Code
    [ProgramSettings]
    tabchar=0
    
    
    Skip_CommentBlock=0
    
    
    proper=1
    
    
    properconstants=0
    
    
    vars=3
    
    
    delim=1
    
    
    endfunc_comment=1
    
    
    endregion_comment=1
    
    
    region_indent=1
    
    
    Gen_Doc=0
    Gen_Doc_Show=0
    
    
    KeepNVersions=0
    
    
    backupDir=
    
    
    Remove_Empty_Lines=
    
    
    ShowConsoleInfo=
    
    
    End_With_NewLine=1
    Alles anzeigen


    SciTE neustarten, falls es gerade geöffnet war und schon werden keine Backups mehr angelegt.

    Dateien

    Tidy.ini 299 Byte – 368 Downloads
  • neues PC Gehäuse gesucht

    • Oscar
    • 24. August 2014 um 19:39
    Zitat von Lottich

    An der Wand, wo das Mainboard drauf geschraubt wird, befindet sich eine art Öffnung mit Löchern rings herum. Die Standardbefestigung für herkömmliche Prozessorkühlungen muss vom Mainboard demontiert werden. Solche größeren Kühlkörper sind schon dafür vorgesehen, mit dem Gehäuse verbunden zu werden, deshalb ist das auch genormt, sodass die Löcher der alten Befestigung mit den Bohrungen des Gehäuses übereinstimmt. Und die Halterung für den großen Kühler ist idR auch immer beim Kühlerkauf dabei. Ich hoffe ich hab mich grad richtig erinnert.


    Achso, also auf der Mainboardseite. Da gibt es diverse Löcher. Ob das jetzt aber dafür genau passend ist, kann ich nicht sagen.
    Aber vermutlich sind die ja genormt. :S
    Ich hatte erst gedacht, das der Kühlkörper auf der anderen Seite noch irgendwie befestigt wird, um die Hebelkräfte auszugleichen, aber das würde wahrscheinlich gar nicht gehen, weil die Gehäuse ja alle unterschiedlich Breiten haben.

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™