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. autoBert

Beiträge von autoBert

  • [GDI+/GDI/Sonstiges] VSync nachrüsten mit D2D

    • autoBert
    • 21. Mai 2016 um 04:10
    Zitat von Andy

    Vergrößere ich das Fenster im GDI+-Script auf das 1,5-fache, bricht die Framerate auf knapp die Hälfte zusammen, anders gesagt benötigt _GDIPlus_GraphicsDrawImage() statt 10ms nun 25...

    10*1,5 = 25, wann wurde das neu festgelegt :?:

    http://www.der-postillon.com/2012/08/mathem…-von-x-ein.html

  • AutoIt / SciTE / Probleme mit code.page ANSI UTF8 / ss und ß / _ArraySearch

    • autoBert
    • 20. Mai 2016 um 15:20

    Für diesen Zweck solltest du UTF 16 Little Endian nehmen:

    Code
    --> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop
    Index 0: a_ausser
    Index 1: a_außer
    Index 2: b_ausser
    Index 3: b_außer
    Index 4: c_ausser
    Index 5: c_außer
    BinarySearchIndex: 2
    BinarySearchIndex: 2
    Export und Import
    Index 0: 6
    Index 1: a_ausser
    Index 2: a_außer
    Index 3: b_ausser
    Index 4: b_außer
    Index 5: c_ausser
    Index 6: c_außer
    BinarySearchIndex: 3
    BinarySearchIndex: 3
    Interessante Ausgaben: ÄÖÜäöüß
    +>15:17:13 AutoIt3.exe ended.rc:0
    +>15:17:13 AutoIt3Wrapper Finished.
    >Exit code: 0    Time: 7.91
    Alles anzeigen

    Dateien

    test.au3 4,04 kB – 371 Downloads
  • GUI mit Fernbedienung Steuern

    • autoBert
    • 20. Mai 2016 um 14:13

    Und auf PC-Seite hast du einen Art Dongle, der die Fernsteuerungsbefehle empfängt? An welchem Anschluß (USB, COM, LPT) ist der denn?

  • 2 Textdateien vergleichen und Änderung in Datei1 auswechslen

    • autoBert
    • 18. Mai 2016 um 15:01
    Zitat von ruby

    die Zuordnung gleicher Titel (Nr.) über die 1. Spalte ist gewährleistet.


    Dann nimm mein Skript aus 2 Textdateien vergleichen und Änderung in Datei1 auswechslen

    Die Dateinamen mußt du noch auf deine Bedürfnisse anpassen.

  • 2 Textdateien vergleichen und Änderung in Datei1 auswechslen

    • autoBert
    • 18. Mai 2016 um 13:13

    Die Zuordnung gleicher Titel über die Spalte 0 ist gewährleistet?

    Wenn ja, ist es ganz einfach:

    AutoIt: ArrayCompare
    #include <Array.au3>
    #include <File.au3>
    Global $aDat1, $aDat2
    _FileReadToArray('Datei1.txt',$aDat1,$FRTA_NOCOUNT,'|')
    _FileReadToArray('Datei2.txt',$aDat2,$FRTA_NOCOUNT,'|')
    ;_ArrayDisplay($aDat1,'Datei1')
    ;_ArrayDisplay($aDat2,'Datei2')
    For $i=0 To UBound($aDat2)-1
    	$iRow1=_ArraySearch($aDat1,$aDat2[$i][0])
    	If $aDat2[$i][1]<>$aDat1[$iRow1][1] Then
    		;ConsoleWrite($iRow1&': ' & $aDat2[$iRow1][1] & '<=' & $aDat2[$i][1]&@CRLF)
    		$aDat1[$iRow1][1]= $aDat2[$i][1]
    	EndIf
    Next
    $sNeu=_ArrayToString($aDat1)
    $hNeu=FileOpen('Datei1.neu',$FO_OVERWRITE +  $FO_UNICODE)
    FileWrite($hNeu,$sNeu)
    FileClose($hNeu)
    _FileReadToArray('Datei1.Neu',$aDat1,$FRTA_NOCOUNT,'|')
    _ArrayDisplay($aDat1,'Datei1.Neu')
    Alles anzeigen

    Die neue geänderte Datei befindet heißt Datei1.Neu. Benutzt habe ich Datei1.txt und Datei2.txt. Als Regel habe ich genommen: wenn ein Eintrag in Datei2 Spalte 1 (genannt Titel) sich von dem über Spalte 0 (genannt ID) korrespondierenden Eintrag in Datei1 unterscheidet wird der Titel der 2. Datei genommen. Bedingung für diese Vorgehensweise ist jedoch die 100% Sicherheit gleiche ID bedeutet gleicher Film auf gleichem Medium. Sollen Spalten 2 (Medium) und Spalte 3 (jugendfrei Ja/Nein?) auch übernommen werden mußt du dies noch ergänzen. Die Spaltenbenennung ist willkürlich und passt evtl. bei der letzten Spalte nicht. Da sie aber nur dem Zweck dient über die gleiche Spalte zu reden ist dies aber egal.

  • 2 Textdateien vergleichen und Änderung in Datei1 auswechslen

    • autoBert
    • 18. Mai 2016 um 12:34
    Zitat von ruby

    Also man kann die Datei2 einfach über Datei1 kopien, wie Du vorgeschlagen hast.

    Überkopieren kannst du schon, du hast dann eine 1:1 Kopie. Das ganze ist mehr als Ironie zu verstehen, denn außer dem Wort Kopie konnte ich keine anderen Abweichungen zwischen 1 und 2 erkennen. Wenn also die 2. Zeile in Datei 1 geschrieben werden soll, warum dann nicht alle? Mittlerweile sehe ich das in der 2. Datei zusätzlich 123 am Ende des Titels steht. Somit wird es möglich, einzelne Zeilen auszutauschen. Wenn aber

    Zitat von ruby

    In Datei2 heissen die Wörter Kopie natürlich auch dvd oder vhs so wie in Datei1.

    unterscheidet sich Datei 1 von Datei 2 nach dieser Aktion nur noch im Namen (einmal Datei 1 das andere mal Datei 2), die unterschiedlichen Inhalte in 1 wurden ja mit denen von 2 überschrieben.

  • 2 Textdateien vergleichen und Änderung in Datei1 auswechslen

    • autoBert
    • 18. Mai 2016 um 11:28

    Da mußt du schon genaue Regeln aufstellen, denn alle Zeilen in Datei 2 enthalten das Wort Kopie anstelle DVD in Datei 1. Warum muß also genau Zeile 2 ausgetauscht werden und nicht alle? Letzeres wäre die einfachste Lösung einfach Datei 2 über Datei 1 kopieren.
    Du siehst also solange du deine Änderungswünsche nicht in exakte Regeln fassen kannst, kann dir auch niemand helfen.

  • FileFindNextFile findet nicht alles

    • autoBert
    • 17. Mai 2016 um 13:46

    Anscheinend hast du einen Pfad ausgewählt, in dem die Unterordner leer sind. Das Beispiel aus der Hilfe mit deinen Parametern findet erfolgreich alle Dateien im ...\AutoIt3 Ordner:

    C
    #include <Array.au3> ; Only required to display the arrays
    #include <File.au3>
    #include <MsgBoxConstants.au3>
    
    
    Example()
    
    
    Func Example()
    	Local $sAutoItDir = StringLeft(@AutoItExe, StringInStr(@AutoItExe, "\", Default, -1))
    	If StringRight($sAutoItDir, 5) = "beta\" Then
    		$sAutoItDir = StringTrimRight($sAutoItDir, 5)
    	EndIf
    	ConsoleWrite($sAutoItDir & @CRLF)
    
    
    	; A sorted list of all files and folders in the AutoIt installation
    	Local $aArray = _FileListToArrayRec($sAutoItDir, "*", $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_FULLPATH)
    	_ArrayDisplay($aArray, "Sorted tree")
    EndFunc   ;==>Example
    Alles anzeigen


    68_Sorted tree.jpg

  • Windows 10 und WinWaitActive

    • autoBert
    • 16. Mai 2016 um 16:32

    benutze doch die Word.au3 zum automatisieren von Word.

  • Neuling: Tastaturbefehl für Funktion in Programm von fremden Rechner starten.

    • autoBert
    • 16. Mai 2016 um 09:47

    Imho sollten Neulinge ersteinmal eine Art Prüfung ablegen bevor sie ihre Programmierkünste an fremden Rechnern austesten. Und falls ich die Überschrift so richtig deute, daß du mit einem auf deinem Rechner laufenden Skript die F5-Taste eines anderen Rechners im dort gerade aktiven Programm auslösen willst. Nein, daß geht nicht ohne ein Skript auf dem fremden Rechner.

  • Windows 10 und WinWaitActive

    • autoBert
    • 16. Mai 2016 um 08:42

    WinWaitActive funktioniert bei mir unter WIn10 x64 mit AutoIt 3.3.14.2.

    Ich denke, daß du Fehler in der falschen Funktion suchst. Aber ohne Skript ...

  • _ExcelReadCell

    • autoBert
    • 15. Mai 2016 um 17:52

    Hallo wuff100,

    du scheinst nicht die aktuellste Excel.au3 zu benutzen. In dieser gibt es nämlich kein ExcelReadCell dafür aber _Excel_RangeRead. In dieser Funktion kann man auch festlegen welche Rückgabe ( 1 - Value, 2 - Formula, 3 - The displayed text, 4 - Value2.) man habe möchte.

  • mcd Dateien in Dateistruktur finden > öffnen > "speichern unter" html & xmcd > in gleichen Ordner wie Original

    • autoBert
    • 14. Mai 2016 um 08:06

    Hallo reselty,

    Herzlich willkommen im Forum. Deine Aufgabe ist mit AutoIt gut zu bewerkstelligen. Um diese zu lösen benötigst du die Funktionen:

    AutoIt
    _FileListToArrayRec
    For ... Next
    FileCopy ; bzw.
    FileMove 
    ;evtl. zum festlegen des Rootpfades:
    FileSelectFolder
    ;evtl. für Debugzwecke:
    _ArrayDisplay
    ConsoleWrite

    schau dir am besten in der Hilfe die Erklärung zu den Funktionen und die Beispiele dazu an, damit du ein Verständnis dafür bekommst. Auch die Kapitel in Language Reference bis einschließlich Loop Statements solltest du durcharbeiten.

    mfg (auto)Bert

  • FotoSort

    • autoBert
    • 12. Mai 2016 um 14:34

    Liegt daran daß das Skript entwickelt wurde als es 3.3.14.2 noch gar nicht gab. Mein Versuch:

    C
    #include <Array.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiStatusBar.au3>
    #include <Misc.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    
    
    #NoTrayIcon
    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=icons\prog.ico
    #AutoIt3Wrapper_Outfile=FotoSort.exe
    #AutoIt3Wrapper_Res_Description=FotoSort
    #AutoIt3Wrapper_Res_Fileversion=1.4.0.0
    #AutoIt3Wrapper_Res_LegalCopyright=Oscar (www.autoit.de)
    #AutoIt3Wrapper_Res_Language=1031
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
    
    
    Opt('GUIOnEventMode', 1)
    Opt('GUICloseOnESC', 0)
    
    
    Global $ghGDIPDll=$__g_hGDIPDll	;<============
    
    
    OnAutoItExitRegister('_End')
    _GDIPlus_Startup()
    Global $aDecoders = _GDIPlus_Decoders(), $sPattern = ''
    
    
    Global $sTitle = 'FotoSort'
    Global $sVersion = '1.4.0.0'
    Global $sDate = '20.04.2013'
    
    
    Global $sAppDir = @AppDataDir & '\' & $sTitle & '\'
    If Not FileExists($sAppDir) Then DirCreate($sAppDir)
    Global $sInifile = $sAppDir & 'FotoSort.ini'
    
    
    Global $sIconDir = @ScriptDir & '\icons\'
    If Not FileExists($sIconDir) Then DirCreate($sIconDir)
    If Not FileExists($sIconDir & 'pattern.ico') Then _patternico(True, $sIconDir)
    If Not FileExists($sIconDir & 'white.ico') Then _whiteico(True, $sIconDir)
    If Not FileExists($sIconDir & 'black.ico') Then _blackico(True, $sIconDir)
    If Not FileExists($sIconDir & 'prog.ico') Then _progico(True, $sIconDir)
    If Not FileExists($sIconDir & 'rotate.ico') Then _rotateico(True, $sIconDir)
    If Not FileExists($sIconDir & 'delete.ico') Then _deleteico(True, $sIconDir)
    
    
    Global $iPreviewLeft = 10
    Global $iPreviewTop = 70
    Global $iPreviewWidth = 480
    Global $iPreviewHeight = 480
    Global $iFullscreenRatio = @DesktopWidth / @DesktopHeight
    Global $iGuiWidth = $iPreviewWidth + 510
    Global $iGuiHeight = $iPreviewHeight + 150
    Global $aParts[3] = [$iGuiWidth / 2 + 140, $iGuiWidth / 2 + 290, $iGuiWidth / 2 + 500]
    Global $sSourcePath = IniRead($sInifile, 'Config', 'SourcePath', '')
    Global $fRecursion = IniRead($sInifile, 'Config', 'Recursion', 'False') = 'True'
    Global $fOverwrite = IniRead($sInifile, 'Config', 'Overwrite', 'False') = 'True'
    Global $sSaveFileFormat = IniRead($sInifile, 'Config', 'FileFormat', '')
    Global $aPicFilenames[1] = [0], $iCount = 0, $iPreviewAngle = 0, $sImgFileOld = '', $hPreviewBitmap, $AccelKeys[16][2]
    Global $iTimer = TimerInit()
    
    
    $hGui = GUICreate(StringFormat('%s  v%0.3s', $sTitle, $sVersion), $iGuiWidth, $iGuiHeight)
    GUISetFont(9, 400, 0, 'Verdana')
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui')
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_PrimaryClick')
    GUISetIcon($sIconDir & 'prog.ico', 0, $hGui)
    GUISetBkColor(0xCBCBCB)
    
    
    GUICtrlCreateGroup('Quellverzeichnis:', 8, 5, 484, 55)
    GUICtrlSetFont(-1, 10, 400, 0, 'Verdana', 5)
    $ID_SourceDir = GUICtrlCreateInput($sSourcePath, 16, 25, 434, 25, $ES_READONLY)
    GUICtrlSetFont(-1, 11, 400, 0, 'Arial', 5)
    GUICtrlSetBkColor(-1, 0xFFFFEE)
    $ID_SourceSel = GUICtrlCreateButton('...', 452, 25, 32, 24)
    GUICtrlSetFont(-1, 10, 400, 0, 'Verdana', 5)
    GUICtrlSetOnEvent(-1, '_SelectSourceDir')
    GUICtrlSetTip(-1, 'Quellverzeichnis auswählen!')
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    
    
    Global $aIDPicFormat[$aDecoders[0][0]], $aIDPicFormatContext[$aDecoders[0][0]]
    GUICtrlCreateGroup('Einstellungen:', 500, 5, 480, 255)
    GUICtrlSetFont(-1, 11, 400, 0, 'Arial', 5)
    $ID_RecursiveCheck = GUICtrlCreateCheckbox('Quellverzeichnis rekursiv einlesen', 510, 28, 460, 20)
    GUICtrlSetFont(-1, 11, 400, 0, 'Arial', 5)
    GUICtrlSetOnEvent(-1, '_RecursiveCheck')
    GUICtrlSetTip(-1, 'Das Quellverzeichnis wird rekursiv' & @CRLF & '(inkl. Unterverzeichnissen) eingelesen.')
    If $fRecursion Then GUICtrlSetState($ID_RecursiveCheck, $GUI_CHECKED)
    
    
    GUICtrlCreateLabel('', 510, 58, 460, 2, Default, $WS_EX_STATICEDGE)
    
    
    GUICtrlCreateLabel('Wenn die Datei im Zielverzeichnis bereits vorhanden ist, dann:', 510, 75, 460, 20)
    GUICtrlSetFont(-1, 11, 400, 4, 'Arial', 5)
    $ID_Overwrite = GUICtrlCreateRadio('vorhandene Datei überschreiben', 510, 100, 400, 20)
    GUICtrlSetFont(-1, 11, 400, 0, 'Arial', 5)
    GUICtrlSetOnEvent(-1, '_RenameCheck')
    $ID_Rename = GUICtrlCreateRadio('kopierte Datei umbenennen (Zähler anhängen)', 510, 125, 400, 20)
    GUICtrlSetFont(-1, 11, 400, 0, 'Arial', 5)
    GUICtrlSetOnEvent(-1, '_RenameCheck')
    If $fOverwrite Then
    	GUICtrlSetState($ID_Overwrite, $GUI_CHECKED)
    Else
    	GUICtrlSetState($ID_Rename, $GUI_CHECKED)
    EndIf
    
    
    GUICtrlCreateLabel('', 510, 160, 460, 2, Default, $WS_EX_STATICEDGE)
    
    
    GUICtrlCreateLabel('Dateiformate:', 510, 175, 90, 20)
    GUICtrlSetFont(-1, 11, 400, 4, 'Arial', 5)
    For $i = 1 To $aDecoders[0][0]
    	$aIDPicFormat[$i - 1] = GUICtrlCreateCheckbox($aDecoders[$i][5], 600 + Mod($i - 1, 5) * 70, 173 + Int(($i - 1) / 5) * 25, 55, 20)
    	GUICtrlSetOnEvent(-1, '_SelectFileFormat')
    	GUICtrlSetFont(-1, 11, 400, 0, 'Arial', 5)
    	GUICtrlSetTip(-1, 'Alle Dateien mit Dateiendung: ' & $aDecoders[$i][6])
    	If StringInStr($sSaveFileFormat, $aDecoders[$i][5]) Then GUICtrlSetState(-1, $GUI_CHECKED)
    	$aIDPicFormatContext[$i - 1] = GUICtrlCreateContextMenu($aIDPicFormat[$i - 1])
    	GUICtrlCreateMenuItem('Alle Dateiformate auswählen', $aIDPicFormatContext[$i - 1])
    	GUICtrlSetOnEvent(-1, '_SelectAllFileFormat')
    	GUICtrlCreateMenuItem('Kein Dateiformat auswählen', $aIDPicFormatContext[$i - 1])
    	GUICtrlSetOnEvent(-1, '_SelectNoneFileFormat')
    Next
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    
    
    GUICtrlCreateGroup('Zielverzeichnisse (1...5):', 500, 280, 482, 270)
    GUICtrlSetFont(-1, 10, 400, 0, 'Verdana', 5)
    Global $aIDCopyButton[5], $aIDDestPath[5], $aIDDestPathSel[5], $aDestPath[5]
    For $i = 0 To UBound($aIDDestPath) - 1
    	$aDestPath[$i] = IniRead($sInifile, 'Destpath', $i, '')
    	If $aDestPath[$i] = $sSourcePath Then $aDestPath[$i] = ''
    	$aIDCopyButton[$i] = GUICtrlCreateButton($i + 1, 510, 310 + $i * 50, 35, 24)
    	GUICtrlSetFont(-1, 10, 400, 0, 'Verdana', 5)
    	GUICtrlSetOnEvent(-1, '_CopyPic')
    	GUICtrlSetTip(-1, 'Aktuelles Bild ins Zielverzeichnis ' & $i + 1 & ' kopieren' & @CRLF & 'Tastenkürzel: [ALT] + [' & $i + 1 & ']')
    	$AccelKeys[$i][0] = '!' & $i + 1
    	$AccelKeys[$i][1] = $aIDCopyButton[$i]
    	$AccelKeys[$i + 5][0] = '!{NUMPAD' & $i + 1 & '}'
    	$AccelKeys[$i + 5][1] = $aIDCopyButton[$i]
    	$aIDDestPath[$i] = GUICtrlCreateInput($aDestPath[$i], 550, 310 + $i * 50, 390, 25, $ES_READONLY)
    	GUICtrlSetFont(-1, 11, 400, 0, 'Arial', 5)
    	GUICtrlSetBkColor(-1, 0xFFFFEE)
    	$aIDDestPathSel[$i] = GUICtrlCreateButton('...', 942, 310 + $i * 50, 32, 24)
    	GUICtrlSetFont(-1, 10, 400, 0, 'Verdana', 5)
    	GUICtrlSetOnEvent(-1, '_SelectDestDir')
    	GUICtrlSetTip(-1, 'Zielverzeichnis ' & $i + 1 & ' auswählen!' & @CRLF & 'Das Verzeichnis muss existieren.')
    Next
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    
    
    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
    _GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2)
    Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iGuiWidth, $iGuiHeight, $hGraphic)
    Global $hGraphicBuff = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    Global $ahBrush[4], $iBgColor = 0
    $ahBrush[0] = _GDIPlus_BrushCreateSolid(0xFFECECEC)
    $ahBrush[1] = _GDIPlus_BrushCreateSolid(0xFFDFDFDF)
    $ahBrush[2] = _GDIPlus_BrushCreateSolid(0xFF000000)
    $ahBrush[3] = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
    Global $hTexture = _CreatePatternTexture()
    Global $ID_Dummy = GUICtrlCreateLabel('', $iPreviewLeft, $iPreviewTop, $iPreviewWidth, $iPreviewHeight)
    GUICtrlSetTip(-1, 'Ein Doppelklick zeigt das Bild im Vollbildmodus an.' & @CRLF & '[ESC] beendet den Vollbildmodus.')
    
    
    $ID_Prev100 = GUICtrlCreateButton('-100', 10, $iGuiHeight - 60, 50, 25)
    GUICtrlSetOnEvent(-1, '_ChangeStatus')
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetTip(-1, '100 Bilder zurückspringen')
    
    
    $ID_Prev10 = GUICtrlCreateButton('-10', 70, $iGuiHeight - 60, 50, 25)
    GUICtrlSetOnEvent(-1, '_ChangeStatus')
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetTip(-1, '10 Bilder zurückspringen')
    
    
    $ID_Prev1 = GUICtrlCreateButton('-1', 130, $iGuiHeight - 60, 50, 25)
    GUICtrlSetOnEvent(-1, '_ChangeStatus')
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetTip(-1, '1 Bild zurückspringen' & @CRLF & 'Tastenkürzel: [ALT] + [<-]')
    $AccelKeys[10][0] = '!{LEFT}'
    $AccelKeys[10][1] = $ID_Prev1
    
    
    $ID_PicNum = GUICtrlCreateInput('', 190, $iGuiHeight - 60, 120, 25, BitOR($ES_NUMBER, $ES_CENTER))
    GUICtrlSetFont(-1, 11, 400, 0, 'Verdana', 5)
    GUICtrlSetOnEvent(-1, '_ChangeStatus')
    GUICtrlSetTip(-1, 'Hier wird direkt zu der eingebenen Bildnummer gesprungen' & @CRLF & 'Nummer eingeben + [ENTER]')
    
    
    $ID_Next1 = GUICtrlCreateButton('+1', 320, $iGuiHeight - 60, 50, 25)
    GUICtrlSetOnEvent(-1, '_ChangeStatus')
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetTip(-1, '1 Bild vorspringen' & @CRLF & 'Tastenkürzel: [ALT] + [->]')
    $AccelKeys[11][0] = '!{RIGHT}'
    $AccelKeys[11][1] = $ID_Next1
    
    
    $ID_Next10 = GUICtrlCreateButton('+10', 380, $iGuiHeight - 60, 50, 25)
    GUICtrlSetOnEvent(-1, '_ChangeStatus')
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetTip(-1, '10 Bilder vorspringen')
    
    
    $ID_Next100 = GUICtrlCreateButton('+100', 440, $iGuiHeight - 60, 50, 25)
    GUICtrlSetOnEvent(-1, '_ChangeStatus')
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetTip(-1, '100 Bilder vorspringen')
    
    
    $ID_ROT = GUICtrlCreateButton('', 510, $iGuiHeight - 70, 48, 42, $BS_ICON)
    GUICtrlSetImage(-1, $sIconDir & 'rotate.ico')
    GUICtrlSetOnEvent(-1, '_RotateRight')
    GUICtrlSetTip(-1, 'Bild um 90 Grad nach rechts drehen' & @CRLF & 'Tastenkürzel: [ALT] + [r]')
    GUICtrlSetState(-1, $GUI_DISABLE)
    $AccelKeys[12][0] = '!r'
    $AccelKeys[12][1] = $ID_ROT
    
    
    $ID_BgColor = GUICtrlCreateButton('', 570, $iGuiHeight - 70, 48, 42, $BS_ICON)
    GUICtrlSetImage(-1, $sIconDir & 'pattern.ico')
    GUICtrlSetOnEvent(-1, '_RotateBgColor')
    GUICtrlSetTip(-1, 'Hintergrundfarbe umschalten' & @CRLF & '(Schachbrettmuster, Weiß oder Schwarz)' & @CRLF & 'Tastenkürzel: [ALT] + [b]')
    $AccelKeys[13][0] = '!b'
    $AccelKeys[13][1] = $ID_BgColor
    
    
    $ID_DelPic = GUICtrlCreateButton('', 630, $iGuiHeight - 70, 48, 42, $BS_ICON)
    GUICtrlSetImage(-1, $sIconDir & 'delete.ico')
    GUICtrlSetOnEvent(-1, '_DeletePic')
    GUICtrlSetTip(-1, 'Das angezeigte Bild von Festplatte löschen!' & @CRLF & 'mit [SHIFT]-Taste = ohne Sicherheitsabfrage!' & @CRLF & 'Tastenkürzel: [ALT] + [d] bzw. [SHIFT] + [ALT] + [d]')
    $AccelKeys[14][0] = '!d'
    $AccelKeys[14][1] = $ID_DelPic
    $AccelKeys[15][0] = '+!d'
    $AccelKeys[15][1] = $ID_DelPic
    
    
    Global $aStatusIcons[2]
    $aStatusIcons[0] = _WinAPI_LoadShell32Icon(221)
    $aStatusIcons[1] = _WinAPI_LoadShell32Icon(219)
    $hStatus = _GUICtrlStatusBar_Create($hGui)
    _GUICtrlStatusBar_SetParts($hStatus, $aParts)
    _GUICtrlStatusBar_SetIcon($hStatus, 0, $aStatusIcons[0])
    GUISetAccelerators($AccelKeys, $hGui)
    GUISetState(@SW_SHOW, $hGui)
    _GDIPlus_GraphicsDrawRect($hGraphicBuff, $iPreviewLeft - 2, $iPreviewTop - 2, $iPreviewWidth + 3, $iPreviewHeight + 3)
    _GDIPlus_GraphicsDrawRect($hGraphicBuff, $iPreviewLeft - 1, $iPreviewTop - 1, $iPreviewWidth + 1, $iPreviewHeight + 1)
    _DrawBgColor($iPreviewLeft, $iPreviewTop, $iPreviewWidth, $iPreviewHeight)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hBitmap, 0, 0)
    If $sSourcePath <> '' Then _SelectFileFormat()
    GUIRegisterMsg($WM_PAINT, 'WM_PAINT')
    
    
    Global $hFullscreenGui = GUICreate($sTitle & ' - Fullscreen', @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP)
    Global $hFullscreenGraphic = _GDIPlus_GraphicsCreateFromHWND($hFullscreenGui)
    _GDIPlus_GraphicsSetSmoothingMode($hFullscreenGraphic, 2)
    Global $hFullscreenBitmap = _GDIPlus_BitmapCreateFromGraphics(@DesktopWidth, @DesktopHeight, $hFullscreenGraphic)
    Global $hFullscreenGraphicBuff = _GDIPlus_ImageGetGraphicsContext($hFullscreenBitmap)
    
    
    WinWaitClose($hGui)
    Exit
    
    
    Func _CloseGui()
    	GUIDelete($hGui)
    EndFunc   ;==>_CloseGui
    
    
    Func _End()
    	_WinAPI_DestroyIcon($aStatusIcons[0])
    	_WinAPI_DestroyIcon($aStatusIcons[1])
    	For $i = 0 To UBound($ahBrush) - 1
    		_GDIPlus_BrushDispose($ahBrush[$i])
    	Next
    	If $hTexture <> 0 Then _GDIPlus_BrushDispose($hTexture)
    	If $hPreviewBitmap <> 0 Then _GDIPlus_BitmapDispose($hPreviewBitmap)
    	If $hBitmap <> 0 Then _GDIPlus_BitmapDispose($hBitmap)
    	If $hGraphicBuff <> 0 Then _GDIPlus_BitmapDispose($hGraphicBuff)
    	If $hGraphic <> 0 Then _GDIPlus_GraphicsDispose($hGraphic)
    	If $hFullscreenBitmap <> 0 Then _GDIPlus_BitmapDispose($hPreviewBitmap)
    	If $hFullscreenGraphicBuff <> 0 Then _GDIPlus_BitmapDispose($hFullscreenGraphicBuff)
    	If $hFullscreenGraphic <> 0 Then _GDIPlus_GraphicsDispose($hFullscreenGraphic)
    	_GDIPlus_Shutdown()
    EndFunc   ;==>_End
    
    
    Func _PrimaryClick()
    	Local $aCursorInfo = GUIGetCursorInfo($hGui)
    	If @error Then Return
    	If $aCursorInfo[4] <> $ID_Dummy Then Return
    	Local $iDoubleClickSpeed = RegRead('HKCU\Control Panel\Mouse', 'DoubleClickSpeed')
    	If TimerDiff($iTimer) < $iDoubleClickSpeed Then
    		GUISetState(@SW_SHOW, $hFullscreenGui)
    		HotKeySet('{ESC}', '_CloseFullscreen')
    		_ShowFullscreenImage()
    	EndIf
    	$iTimer = TimerInit()
    EndFunc   ;==>_PrimaryClick
    
    
    Func _CloseFullscreen()
    	HotKeySet('{ESC}')
    	GUISetState(@SW_HIDE, $hFullscreenGui)
    EndFunc   ;==>_CloseFullscreen
    
    
    Func _ShowFullscreenImage()
    	Local $iVector, $iBitmapW, $iBitmapH, $iWidth, $iHeight, $aPixelFormat
    	$iBitmapW = _GDIPlus_ImageGetWidth($hPreviewBitmap)
    	$iWidth = $iBitmapW
    	$iBitmapH = _GDIPlus_ImageGetHeight($hPreviewBitmap)
    	$iHeight = $iBitmapH
    	$aPixelFormat = _GDIPlus_ImageGetPixelFormat($hPreviewBitmap)
    	If $iBitmapW > @DesktopWidth Or $iBitmapH > @DesktopHeight Then
    		If $iBitmapW >= $iBitmapH Then
    			$iBitmapH *= @DesktopWidth / $iBitmapW
    			$iBitmapW = @DesktopWidth
    			If $iBitmapH > @DesktopHeight Then
    				$iBitmapW *= @DesktopHeight / $iBitmapH
    				$iBitmapH = @DesktopHeight
    			EndIf
    		Else
    			$iBitmapW *= @DesktopHeight / $iBitmapH
    			$iBitmapH = @DesktopHeight
    			If $iBitmapW > @DesktopWidth Then
    				$iBitmapH *= @DesktopWidth / $iBitmapW
    				$iBitmapW = @DesktopWidth
    			EndIf
    		EndIf
    	EndIf
    	Switch $iBgColor
    		Case 0
    			_GDIPlus_GraphicsFillRect($hFullscreenGraphicBuff, 0, 0, @DesktopWidth, @DesktopHeight, $hTexture)
    		Case 1
    			_GDIPlus_GraphicsFillRect($hFullscreenGraphicBuff, 0, 0, @DesktopWidth, @DesktopHeight, $ahBrush[3])
    		Case 2
    			_GDIPlus_GraphicsFillRect($hFullscreenGraphicBuff, 0, 0, @DesktopWidth, @DesktopHeight, $ahBrush[2])
    	EndSwitch
    	_GDIPlus_GraphicsDrawImageRect($hFullscreenGraphicBuff, $hPreviewBitmap, @DesktopWidth / 2 - $iBitmapW / 2, @DesktopHeight / 2 - $iBitmapH / 2, $iBitmapW, $iBitmapH)
    	_GDIPlus_GraphicsDrawImage($hFullscreenGraphic, $hFullscreenBitmap, 0, 0)
    EndFunc   ;==>_ShowFullscreenImage
    
    
    Func _CreatePatternTexture() ; Danke an UEZ (www.autoit.de)
    	Local $iStep = 8
    	Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", 2 * $iStep, "int", 2 * $iStep, "int", 0, "int", $GDIP_PXF32ARGB, "ptr", 0, "int*", 0)
    	If not IsArray($aResult) Then Return SetError(1)		;<====== 
    	Local $hPatternBitmap = $aResult[6]
    	Local $hCtxt = _GDIPlus_ImageGetGraphicsContext($hPatternBitmap)
    	_GDIPlus_GraphicsFillRect($hCtxt, 0, 0, $iStep, $iStep, $ahBrush[0])
    	_GDIPlus_GraphicsFillRect($hCtxt, $iStep, 0, $iStep, $iStep, $ahBrush[1])
    	_GDIPlus_GraphicsFillRect($hCtxt, 0, $iStep, $iStep, $iStep, $ahBrush[1])
    	_GDIPlus_GraphicsFillRect($hCtxt, $iStep, $iStep, $iStep, $iStep, $ahBrush[0])
    	$aResult = DllCall($ghGDIPDll, "uint", "GdipCreateTexture", "handle", $hPatternBitmap, "int", 0, "int*", 0)
    	Local $hTexture = $aResult[3]
    	_GDIPlus_GraphicsFillRect($hGraphicBuff, $iPreviewLeft, $iPreviewTop, $iPreviewWidth, $iPreviewHeight, $hTexture)
    	_GDIPlus_GraphicsDispose($hCtxt)
    	_GDIPlus_BitmapDispose($hPatternBitmap)
    	Return $hTexture
    EndFunc   ;==>_CreatePatternTexture
    
    
    Func _DrawBgColor($iLeft, $iTop, $iWidth, $iHeight)
    	Switch $iBgColor
    		Case 0
    			_GDIPlus_GraphicsFillRect($hGraphicBuff, $iLeft, $iTop, $iWidth, $iHeight, $hTexture)
    		Case 1
    			_GDIPlus_GraphicsFillRect($hGraphicBuff, $iLeft, $iTop, $iWidth, $iHeight, $ahBrush[3])
    		Case 2
    			_GDIPlus_GraphicsFillRect($hGraphicBuff, $iLeft, $iTop, $iWidth, $iHeight, $ahBrush[2])
    	EndSwitch
    EndFunc   ;==>_DrawBgColor
    
    
    Func _DeletePic()
    	If Not _IsPressed('10') Then
    		If MsgBox(256 + 36, $sTitle, StringFormat('Soll die folgende Datei:\n"%s"\nwirklich gelöscht werden?', $aPicFilenames[$iCount]), 0, $hGui) = 7 Then Return
    	EndIf
    	_GDIPlus_BitmapDispose($hPreviewBitmap)
    	If FileDelete($aPicFilenames[$iCount]) Then
    		_ArrayDelete($aPicFilenames, $iCount)
    		$aPicFilenames[0] = UBound($aPicFilenames) - 1
    		If $iCount > $aPicFilenames[0] Then $iCount = $aPicFilenames[0]
    		_CheckButtons()
    		_ShowStatus()
    		_LoadImage($aPicFilenames[$iCount])
    		_ShowImage()
    	Else
    		_LoadImage($aPicFilenames[$iCount])
    		_ShowImage()
    		_GUICtrlStatusBar_SetText($hStatus, 'Die Datei konnte nicht gelöscht werden! Schreibgeschützt?', 0)
    		_GUICtrlStatusBar_SetIcon($hStatus, 0, $aStatusIcons[1])
    		_PlayDefaultSystemSound('SystemNotification')
    	EndIf
    EndFunc   ;==>_DeletePic
    
    
    Func _RotateBgColor()
    	$iBgColor += 1
    	If $iBgColor > 2 Then $iBgColor = 0
    	Switch $iBgColor
    		Case 0
    			GUICtrlSetImage($ID_BgColor, $sIconDir & 'pattern.ico')
    		Case 1
    			GUICtrlSetImage($ID_BgColor, $sIconDir & 'white.ico')
    		Case 2
    			GUICtrlSetImage($ID_BgColor, $sIconDir & 'black.ico')
    	EndSwitch
    	_ShowImage()
    EndFunc   ;==>_RotateBgColor
    
    
    Func _CopyPic()
    	Local $Ctrl_ID = (@GUI_CtrlId - $aIDCopyButton[0]) / 3
    	Local $sDestFilename = $aDestPath[$Ctrl_ID] & StringRegExpReplace($aPicFilenames[$iCount], '.+\\(.+)', '$1')
    	If Not FileExists($aDestPath[$Ctrl_ID]) Then
    		_GUICtrlStatusBar_SetText($hStatus, 'Das Zielverzeichnis existiert nicht!', 0)
    		_GUICtrlStatusBar_SetIcon($hStatus, 0, $aStatusIcons[1])
    		_PlayDefaultSystemSound('SystemNotification')
    	Else
    		_GUICtrlStatusBar_SetIcon($hStatus, 0, $aStatusIcons[0])
    		_GUICtrlStatusBar_SetText($hStatus, 'Bitte Warten! Bild wird kopiert...', 0)
    		If Not $fOverwrite Then $sDestFilename = _GetUniqueFileName($sDestFilename)
    		If Not @error And FileCopy($aPicFilenames[$iCount], $sDestFilename, Number($fOverwrite)) Then
    			_GUICtrlStatusBar_SetText($hStatus, 'Das Bild wurde erfolgreich kopiert.', 0)
    		Else
    			_GUICtrlStatusBar_SetText($hStatus, 'Fehler beim kopieren!', 0)
    			_GUICtrlStatusBar_SetIcon($hStatus, 0, $aStatusIcons[1])
    			_PlayDefaultSystemSound('SystemNotification')
    		EndIf
    	EndIf
    	_CheckButtons()
    EndFunc   ;==>_CopyPic
    
    
    Func _SelectSourceDir()
    	Local $sPath = FileSelectFolder('Bitte Quellverzeichnis auswählen', '', 6, $sSourcePath, $hGui)
    	If $sPath <> '' Then
    		If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    		$sSourcePath = $sPath
    		IniWrite($sInifile, 'Config', 'SourcePath', $sSourcePath)
    		GUICtrlSetData($ID_SourceDir, $sPath)
    		For $i = 0 To UBound($aIDCopyButton) - 1
    			If $aDestPath[$i] = $sPath Then
    				$aDestPath[$i] = ''
    				GUICtrlSetData($aIDDestPath[$i], '')
    				GUICtrlSetState($aIDCopyButton[$i], $GUI_DISABLE)
    			EndIf
    		Next
    		_ShowStatus()
    		_ReadDir()
    	EndIf
    EndFunc   ;==>_SelectSourceDir
    
    
    Func _SelectAllFileFormat()
    	For $i = 1 To $aDecoders[0][0]
    		GUICtrlSetState($aIDPicFormat[$i - 1], $GUI_CHECKED)
    	Next
    	_SelectFileFormat()
    EndFunc   ;==>_SelectAllFileFormat
    
    
    Func _SelectNoneFileFormat()
    	For $i = 1 To $aDecoders[0][0]
    		GUICtrlSetState($aIDPicFormat[$i - 1], $GUI_UNCHECKED)
    	Next
    	_SelectFileFormat()
    EndFunc   ;==>_SelectNoneFileFormat
    
    
    Func _SelectFileFormat()
    	$sSaveFileFormat = ''
    	$sPattern = ''
    	For $i = 1 To $aDecoders[0][0]
    		If BitAND(GUICtrlRead($aIDPicFormat[$i - 1]), $GUI_CHECKED) Then
    			$sSaveFileFormat &= $aDecoders[$i][5] & '|'
    			$sPattern &= StringRegExpReplace(StringReplace($aDecoders[$i][6], '*.', ''), ';', '|') & '|'
    		EndIf
    	Next
    	$sPattern = StringTrimRight($sPattern, 1)
    	IniWrite($sInifile, 'Config', 'FileFormat', $sSaveFileFormat)
    	_ReadDir()
    EndFunc   ;==>_SelectFileFormat
    
    
    Func _RecursiveCheck()
    	_ReadDir()
    EndFunc   ;==>_RecursiveCheck
    
    
    Func _RenameCheck()
    	If @GUI_CtrlId = $ID_Overwrite Then
    		$fOverwrite = True
    	Else
    		$fOverwrite = False
    	EndIf
    	IniWrite($sInifile, 'Config', 'Overwrite', $fOverwrite)
    EndFunc   ;==>_RenameCheck
    
    
    Func _ReadDir()
    	If $sPattern = '' Then
    		Global $aPicFilenames[1] = [0]
    		$iCount = 0
    		_ShowStatus()
    		WinSetTitle($hGui, '', StringFormat('%s  v%0.3s', $sTitle, $sVersion))
    		_GDIPlus_GraphicsFillRect($hGraphicBuff, $iPreviewLeft, $iPreviewTop, $iPreviewWidth, $iPreviewHeight)
    		_GDIPlus_GraphicsDrawImage($hGraphic, $hBitmap, 0, 0)
    		_GUICtrlStatusBar_SetText($hStatus, 'Kein Dateiformat ausgewählt!', 0)
    		_GUICtrlStatusBar_SetText($hStatus, '', 2)
    		_GUICtrlStatusBar_SetIcon($hStatus, 0, $aStatusIcons[1])
    		_PlayDefaultSystemSound('SystemNotification')
    		Return
    	EndIf
    	$fRecursion = BitAND(GUICtrlRead($ID_RecursiveCheck), $GUI_CHECKED) = $GUI_CHECKED
    	IniWrite($sInifile, 'Config', 'Recursion', $fRecursion)
    	GUISetCursor(15)
    	_GUICtrlStatusBar_SetIcon($hStatus, 0, $aStatusIcons[0])
    	_GUICtrlStatusBar_SetText($hStatus, 'Bitte Warten! Verzeichnis wird eingelesen...', 0)
    	$aPicFilenames = _RecursiveFileListToArray($sSourcePath, '(?i).+\.(' & $sPattern & ')', 1, 1, $fRecursion)
    	GUISetCursor(2)
    	$iPreviewAngle = 0
    	If IsArray($aPicFilenames) And $aPicFilenames[0] > 0 Then
    		$iCount = 1
    		_ShowStatus()
    		_LoadImage($aPicFilenames[$iCount])
    		_ShowImage()
    	Else
    		Global $aPicFilenames[1] = [0]
    		$iCount = 0
    		_ShowStatus()
    		WinSetTitle($hGui, '', StringFormat('%s  v%0.3s', $sTitle, $sVersion))
    		_LoadImage($aPicFilenames[$iCount])
    		_ShowImage()
    		_GUICtrlStatusBar_SetIcon($hStatus, 0, $aStatusIcons[1])
    		_GUICtrlStatusBar_SetText($hStatus, 'Keine Bilder im Quellverzeichnis vorhanden!', 0)
    		_GUICtrlStatusBar_SetText($hStatus, '', 2)
    		_PlayDefaultSystemSound('SystemNotification')
    	EndIf
    EndFunc   ;==>_ReadDir
    
    
    Func _SelectDestDir()
    	Local $Ctrl_ID = (@GUI_CtrlId - $aIDDestPathSel[0]) / 3
    	Local $sPath = FileSelectFolder('Bitte Zielverzeichnis auswählen', '', 7, $aDestPath[$Ctrl_ID], $hGui)
    	If $sPath <> '' And StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    	If $sPath <> '' And $sPath = $sSourcePath Then
    		_GUICtrlStatusBar_SetIcon($hStatus, 0, $aStatusIcons[1])
    		_GUICtrlStatusBar_SetText($hStatus, 'Das Zielverzeichnis darf nicht mit dem Quellverzeichnis übereinstimmen!', 0)
    		_PlayDefaultSystemSound('SystemNotification')
    		Return
    	EndIf
    	$aDestPath[$Ctrl_ID] = $sPath
    	IniWrite($sInifile, 'DestPath', $Ctrl_ID, $sPath)
    	GUICtrlSetData($aIDDestPath[$Ctrl_ID], $sPath)
    	_ShowStatus()
    EndFunc   ;==>_SelectDestDir
    
    
    Func _ChangeStatus()
    	Local $iChange
    	Switch @GUI_CtrlId
    		Case $ID_Prev1
    			$iChange = -1
    		Case $ID_Prev10
    			$iChange = -10
    		Case $ID_Prev100
    			$iChange = -100
    		Case $ID_Next1
    			$iChange = 1
    		Case $ID_Next10
    			$iChange = 10
    		Case $ID_Next100
    			$iChange = 100
    		Case $ID_PicNum
    			$iChange = GUICtrlRead($ID_PicNum)
    			If $iChange < 1 Or $iChange > $aPicFilenames[0] Then
    				_GUICtrlStatusBar_SetIcon($hStatus, 0, $aStatusIcons[1])
    				_GUICtrlStatusBar_SetText($hStatus, 'Falsche Eingabe!', 0)
    				_PlayDefaultSystemSound('SystemNotification')
    				Return
    			Else
    				$iCount = 0
    			EndIf
    	EndSwitch
    	$iPreviewAngle = 0
    	$iCount += $iChange
    	If $iCount < 1 Then $iCount = 1
    	If $iCount > $aPicFilenames[0] Then $iCount = $aPicFilenames[0]
    	GUISetState(@SW_LOCK, $hGui)
    	_ShowStatus()
    	_LoadImage($aPicFilenames[$iCount])
    	_ShowImage()
    	GUISetState(@SW_UNLOCK, $hGui)
    EndFunc   ;==>_ChangeStatus
    
    
    Func _LoadImage($sImgFile)
    	If $hPreviewBitmap <> 0 Then _GDIPlus_BitmapDispose($hPreviewBitmap)
    	$hPreviewBitmap = _GDIPlus_BitmapCreateFromFile($sImgFile)
    	If $hPreviewBitmap = 0 Then
    		_GDIPlus_GraphicsFillRect($hGraphicBuff, $iPreviewLeft, $iPreviewTop, $iPreviewWidth, $iPreviewHeight)
    		_GDIPlus_GraphicsDrawImage($hGraphic, $hBitmap, 0, 0)
    		_GDIPlus_BitmapDispose($hPreviewBitmap)
    		Return
    	EndIf
    EndFunc   ;==>_LoadImage
    
    
    Func _ShowImage()
    	If $hPreviewBitmap = 0 Then
    		_DrawBgColor($iPreviewLeft, $iPreviewTop, $iPreviewWidth, $iPreviewHeight)
    		_GDIPlus_GraphicsDrawImage($hGraphic, $hBitmap, 0, 0)
    		Return
    	EndIf
    	Local $iVector, $iBitmapW, $iBitmapH, $iWidth, $iHeight, $aPixelFormat
    	If $iPreviewAngle <> 0 Then _GDIplus_ImageRotateFlip($hPreviewBitmap, $iPreviewAngle)
    	$iBitmapW = _GDIPlus_ImageGetWidth($hPreviewBitmap)
    	$iWidth = $iBitmapW
    	$iBitmapH = _GDIPlus_ImageGetHeight($hPreviewBitmap)
    	$iHeight = $iBitmapH
    	$aPixelFormat = _GDIPlus_ImageGetPixelFormat($hPreviewBitmap)
    	If $iBitmapW > $iPreviewWidth Or $iBitmapH > $iPreviewHeight Then
    		If $iBitmapW >= $iBitmapH Then
    			$iBitmapH *= $iPreviewWidth / $iBitmapW
    			$iBitmapW = $iPreviewWidth
    			If $iBitmapH > $iPreviewHeight Then
    				$iBitmapW *= $iPreviewHeight / $iBitmapH
    				$iBitmapH = $iPreviewHeight
    			EndIf
    		Else
    			$iBitmapW *= $iPreviewHeight / $iBitmapH
    			$iBitmapH = $iPreviewHeight
    			If $iBitmapW > $iPreviewWidth Then
    				$iBitmapH *= $iPreviewWidth / $iBitmapW
    				$iBitmapW = $iPreviewWidth
    			EndIf
    		EndIf
    	EndIf
    	_GUICtrlStatusBar_SetIcon($hStatus, 0, $aStatusIcons[0])
    	_GUICtrlStatusBar_SetText($hStatus, StringFormat('Format:  %i x %i px ,  %i Bit', $iWidth, $iHeight, $aPixelFormat[1]), 2)
    	WinSetTitle($hGui, '', StringFormat('%s  v%0.3s    %i x %i (%.1f %%)', $sTitle, $sVersion, $iBitmapW, $iBitmapH, $iBitmapW / $iWidth * 100))
    	_DrawBgColor($iPreviewLeft, $iPreviewTop, $iPreviewWidth, $iPreviewHeight)
    	_GDIPlus_GraphicsDrawImageRect($hGraphicBuff, $hPreviewBitmap, $iPreviewLeft + $iPreviewWidth / 2 - $iBitmapW / 2, $iPreviewTop + $iPreviewHeight / 2 - $iBitmapH / 2, $iBitmapW, $iBitmapH)
    	_GDIPlus_GraphicsDrawImage($hGraphic, $hBitmap, 0, 0)
    EndFunc   ;==>_ShowImage
    
    
    Func WM_PAINT($hWnd, $Msg, $wParam, $lParam)
    	_WinAPI_RedrawWindow($hGui, 0, 0, $RDW_UPDATENOW)
    	_GDIPlus_GraphicsDrawImage($hGraphic, $hBitmap, 0, 0)
    	_WinAPI_RedrawWindow($hGui, 0, 0, $RDW_VALIDATE)
    	Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_PAINT
    
    
    Func _RotateRight()
    	$iPreviewAngle = 1
    	_ShowImage()
    	$iPreviewAngle = 0
    EndFunc   ;==>_RotateRight
    
    
    
    
    Func _ShowStatus()
    	If IsArray($aPicFilenames) Then
    		_GUICtrlStatusBar_SetIcon($hStatus, 0, $aStatusIcons[0])
    		_GUICtrlStatusBar_SetText($hStatus, (StringReplace($aPicFilenames[$iCount], $sSourcePath, '', 1)), 0)
    		_GUICtrlStatusBar_SetText($hStatus, StringFormat(' Bild %i von %i', $iCount, $aPicFilenames[0]), 1)
    		GUICtrlSetData($ID_PicNum, $iCount)
    	EndIf
    	_CheckButtons()
    EndFunc   ;==>_ShowStatus
    
    
    Func _CheckButtons()
    	If $aPicFilenames[0] > 0 Then
    		For $i = 0 To UBound($aIDCopyButton) - 1
    			If $aDestPath[$i] <> '' And FileExists($aDestPath[$i]) Then
    				GUICtrlSetState($aIDCopyButton[$i], $GUI_ENABLE)
    			Else
    				GUICtrlSetState($aIDCopyButton[$i], $GUI_DISABLE)
    			EndIf
    		Next
    		If BitAND(GUICtrlGetState($ID_DelPic), $GUI_DISABLE) Then GUICtrlSetState($ID_DelPic, $GUI_ENABLE)
    		If BitAND(GUICtrlGetState($ID_ROT), $GUI_DISABLE) Then GUICtrlSetState($ID_ROT, $GUI_ENABLE)
    		If $iCount > 100 Then
    			If BitAND(GUICtrlGetState($ID_Prev100), $GUI_DISABLE) Then GUICtrlSetState($ID_Prev100, $GUI_ENABLE)
    		Else
    			If BitAND(GUICtrlGetState($ID_Prev100), $GUI_ENABLE) Then GUICtrlSetState($ID_Prev100, $GUI_DISABLE)
    		EndIf
    		If $iCount > 10 Then
    			If BitAND(GUICtrlGetState($ID_Prev10), $GUI_DISABLE) Then GUICtrlSetState($ID_Prev10, $GUI_ENABLE)
    		Else
    			If BitAND(GUICtrlGetState($ID_Prev10), $GUI_ENABLE) Then GUICtrlSetState($ID_Prev10, $GUI_DISABLE)
    		EndIf
    		If $iCount > 1 Then
    			If BitAND(GUICtrlGetState($ID_Prev1), $GUI_DISABLE) Then GUICtrlSetState($ID_Prev1, $GUI_ENABLE)
    		Else
    			If BitAND(GUICtrlGetState($ID_Prev1), $GUI_ENABLE) Then GUICtrlSetState($ID_Prev1, $GUI_DISABLE)
    		EndIf
    		If $iCount < $aPicFilenames[0] Then
    			If BitAND(GUICtrlGetState($ID_Next1), $GUI_DISABLE) Then GUICtrlSetState($ID_Next1, $GUI_ENABLE)
    		Else
    			If BitAND(GUICtrlGetState($ID_Next1), $GUI_ENABLE) Then GUICtrlSetState($ID_Next1, $GUI_DISABLE)
    		EndIf
    		If $iCount <= $aPicFilenames[0] - 10 Then
    			If BitAND(GUICtrlGetState($ID_Next10), $GUI_DISABLE) Then GUICtrlSetState($ID_Next10, $GUI_ENABLE)
    		Else
    			If BitAND(GUICtrlGetState($ID_Next10), $GUI_ENABLE) Then GUICtrlSetState($ID_Next10, $GUI_DISABLE)
    		EndIf
    		If $iCount <= $aPicFilenames[0] - 100 Then
    			If BitAND(GUICtrlGetState($ID_Next100), $GUI_DISABLE) Then GUICtrlSetState($ID_Next100, $GUI_ENABLE)
    		Else
    			If BitAND(GUICtrlGetState($ID_Next100), $GUI_ENABLE) Then GUICtrlSetState($ID_Next100, $GUI_DISABLE)
    		EndIf
    	Else
    		For $i = 0 To UBound($aIDCopyButton) - 1
    			If BitAND(GUICtrlGetState($aIDCopyButton[$i]), $GUI_ENABLE) Then GUICtrlSetState($aIDCopyButton[$i], $GUI_DISABLE)
    		Next
    		If BitAND(GUICtrlGetState($ID_DelPic), $GUI_ENABLE) Then GUICtrlSetState($ID_DelPic, $GUI_DISABLE)
    		If BitAND(GUICtrlGetState($ID_ROT), $GUI_ENABLE) Then GUICtrlSetState($ID_ROT, $GUI_DISABLE)
    		If BitAND(GUICtrlGetState($ID_Prev100), $GUI_ENABLE) Then GUICtrlSetState($ID_Prev100, $GUI_DISABLE)
    		If BitAND(GUICtrlGetState($ID_Prev10), $GUI_ENABLE) Then GUICtrlSetState($ID_Prev10, $GUI_DISABLE)
    		If BitAND(GUICtrlGetState($ID_Prev1), $GUI_ENABLE) Then GUICtrlSetState($ID_Prev1, $GUI_DISABLE)
    		If BitAND(GUICtrlGetState($ID_Next1), $GUI_ENABLE) Then GUICtrlSetState($ID_Next1, $GUI_DISABLE)
    		If BitAND(GUICtrlGetState($ID_Next10), $GUI_ENABLE) Then GUICtrlSetState($ID_Next10, $GUI_DISABLE)
    		If BitAND(GUICtrlGetState($ID_Next100), $GUI_ENABLE) Then GUICtrlSetState($ID_Next100, $GUI_DISABLE)
    	EndIf
    EndFunc   ;==>_CheckButtons
    
    
    
    
    ;===============================================================================
    ; 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 (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
    
    
    ;===============================================================================
    ; Function Name:   _RecursiveFileListToArray($sPath[, $sPattern][, $iFlag][, $iFormat][, $fRecursion][, $sDelim])
    ; Description::    gibt Verzeichnisse (rekursiv) und/oder Dateien zurück, die einem RegExp-Pattern entsprechen
    ; Parameter(s):    $sPath = Startverzeichnis
    ;                  $sPattern = ein beliebiges RexExp-Pattern für die Auswahl
    ;                  $iFlag = Auswahl
    ;                           0 = Dateien & Verzeichnisse
    ;                           1 = nur Dateien
    ;                           2 = nur Verzeichnisse
    ;                  $iFormat = Rückgabeformat
    ;                             0 = String
    ;                             1 = Array mit [0] = Anzahl
    ;                             2 = Nullbasiertes Array
    ;                  $fRecursion = Verzeichnisse rekursiv durchsuchen
    ;                                False = Nein
    ;                                True = Ja
    ;                  $sDelim = Trennzeichen für die String-Rückgabe
    ; Requirement(s):  AutoIt 3.3.0.0
    ; Return Value(s): Array/String mit den gefundenen Dateien/Verzeichnissen
    ; Author(s):       Oscar (www.autoit.de)
    ;                  Anregungen von: bernd670 (www.autoit.de)
    ;                             und: AspirinJunkie (www.autoit.de)
    ;===============================================================================
    Func _RecursiveFileListToArray($sPath, $sPattern = '', $iFlag = 0, $iFormat = 1, $fRecursion = True, $sDelim = @CRLF, $fOpenDLL = True)
    	Local $hSearch, $sFile, $sReturn = '', $aD
    	Local Static $hDll
    	If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    	$hSearch = FileFindFirstFile($sPath & '*')
    	If @error Or $hSearch = -1 Then Return SetError(1, 0, $sReturn)
    	If $fOpenDLL Then $hDll = DllOpen('kernel32.dll')
    	While True
    		$sFile = FileFindNextFile($hSearch)
    		If @error Then ExitLoop
    		If @extended Then
    			$aD = DllCall($hDll, 'dword', 'GetFileAttributesW', 'wstr', $sPath & $sFile)
    			If @error Or BitAND($aD[0], 0x400) Then ContinueLoop
    			If StringRegExp($sPath & $sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 2) Then $sReturn &= $sPath & $sFile & '\' & $sDelim
    			If $fRecursion Then $sReturn &= _RecursiveFileListToArray($sPath & $sFile & '\', $sPattern, $iFlag, 0, True, $sDelim, False)
    			ContinueLoop
    		EndIf
    		If StringRegExp($sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 1) Then $sReturn &= $sPath & $sFile & $sDelim
    	WEnd
    	FileClose($hSearch)
    	If $fOpenDLL Then DllClose($hDll)
    	If $iFormat And $sReturn = '' Then Return SetError(0, 1, StringSplit($sReturn, '', $iFormat))
    	If $iFormat Then Return SetError(0, 2, StringSplit(StringTrimRight($sReturn, StringLen($sDelim)), $sDelim, $iFormat))
    	Return $sReturn
    EndFunc   ;==>_RecursiveFileListToArray
    
    
    ; #FUNCTION# ====================================================================================================================
    ; Name...........:    _PlayDefaultSystemSound()
    ; Description ...:    Spielt einen Systemklang, welcher in der Registry definiert ist.
    ; Syntax.........:    _PlayDefaultSystemSound($sSoundName, $iWait = 0)
    ; Parameters ....:    $sSoundName                - Name des SystemSound's
    ;                    | Default                   - Standardton Warnsignal / Default Beep
    ;                    | CriticalBatteryAlarm      - Alarm bei kritischem Batteriestand / when battery is critical
    ;                    | DeviceConnect            - Geräteanschluß / when a device is connect
    ;                    | DeviceDisconnect          - Gerätetrennung / when a device is disconnect
    ;                    | DeviceFail                - Geräteanschluß fehlgeschlagen / when a deviceconnect is fail
    ;                    | LowBatteryAlarm           - Alarm bei niedrigem Batteriestand / when battery is low
    ;                    | MailBeep                  - Posteingangsbenachrichtigung / when email is received
    ;                    | SystemAsterisk            - Stern / Asterisk
    ;                    | SystemExclamation         - Hinweis / when windows shows a warning
    ;                    | SystemExit                - Windows beenden / when Windows shuts down
    ;                    | SystemHand                - Kritischer Abbruch / when a critical stop occurs
    ;                    | SystemNotification        - Sprechblase / when a critical stop occurs
    ;                    | SystemStart               - Windows starten / when Windows starts up
    ;                    | WindowsLogoff             - beim Windows abmelden / when logging off Windows
    ;                    | WindowsLogon              - beim Windows anmelden / when logging on Windows
    ;                    | EmptyRecycleBin           - Löschen des Papierkorbs / when recycle bin is emptied
    ;                    | Navigating                - Browser Klick / navigating in browser
    
    
    ;                     $iWait                     - Warten bis SoundPlay beendet? (0 = nein / 1 = ja)
    ; Return values .:    -----
    ; Author ........:    funkey (AutoIt.de)
    ; ===============================================================================================================================
    Func _PlayDefaultSystemSound($sSoundName, $iWait = 0) ; funkey
    	Local $sKey = 'HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default'
    	If $sSoundName = 'EmptyRecycleBin' Or $sSoundName = 'Navigating' Then $sKey = 'HKEY_CURRENT_USER\AppEvents\Schemes\Apps\Explorer'
    	Local $sFile = StringReplace(RegRead($sKey & '\' & $sSoundName & '\.Default', ''), '%SystemRoot%', @WindowsDir)
    	If $sFile = "" Then
    		SoundPlay(StringReplace(RegRead($sKey & '\.Default\.Default', ''), '%SystemRoot%', @WindowsDir), $iWait)
    	Else
    		SoundPlay($sFile, $iWait)
    	EndIf
    EndFunc   ;==>_PlayDefaultSystemSound
    
    
    ;Code below was generated by: 'File to Base64 String' Code Generator v1.12 Build 2013-03-25
    
    
    Func _deleteico($bSaveBinary = False, $sSavePath = @ScriptDir)
    	Local $deleteico
    	$deleteico &= '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'
    	$deleteico &= 'GeUBsA+p/xwcS/8bABsi/x4aG/85AC83/0KRoP8+AOj+/0jq/f9rAJKq/21wc/9gAMbO/2DB9/9kDH+i/wf4B9Klbv8AqoJ+/35miv8gUlHM/zDgGiE3IP//Eir/MAj6/wAPJO3/TVTK/0BdXtf/FSdwCBkA7f8XHrn/MzQAZf9JSVP/XlcAXf9jZG3/X7sAy/9ptvf/d3UArf9xfX//YsIAyf9giev/ZlQGlv8H8Af8/Pz/6ADn7v+cfWX/eABonP9mben/XsBu//9KXP8wgfA9ATAIITX4/1dcuwD/wqqS/8yplQD/g3jJ/yk46gD/ESX6/x4qygD/Li9v/0tJXQD/WFRY/15ogQD/bWjg/3ZxrQD/bnx9/2KHxAD/Y1Th/4FkigH+B3JaTGPKytsA/5ibyv9zg9oA/4SO+P+Fkf8A/3SC/P9dbfxI/0dacFFM87AjtwD/w6OG/+i3cwD/4rh1/9izhgD/k4Oz/0ZP4gD/OEj8/zpF3gD/NzeH/0ZCXAD/VUxX/2FQsAD/a2yS/2RmdQD/VkHX/4JhwhD/vJ5x+gdHRW4AIl9ahq6IjduA/4iR8v+UnzBAAJ/8/4mX+v+BAI38/3B+//9eAGfn/4Bzmv/KAKR3/+W0bf/jALVv/+S2b//iALdv/+O2ev+oAI+Z/2Znxv9fAGv2/11q7v8+AECb/zc0W/9GAD9l/1FTav9YAFKn/3tgxP/VQKqF/9WtYvoHdAB3poZzfOv0bwB99/+Cjvr/jgCZ+v+Rm/r/iQCV+v+Cj/3/fgB/2P+skpf/1wCpbP/hsmj/4kCza//hs2o3ALQAav/mtnD/zqcAf/+ShKn/foEA5P+AivX/XV8AuP9GQG//bF4Adv+oh5r/2K0AdP/zwmf/y6IB+weZm7pgn6f4APFoeff/bHn1AP98ivf/hJL6AP+Kk///mI27AP++mnj/2qxpEP/gsGUwAGT/3+SwYzIA4LEwAPAAcQES4TAA5bKwALFu/wDLpIT/m4zE/wCOk/D/dnjf/wBiV5z/nHto/wDYqmD/7Llm/wzHnwAl+Ae/wuALAK+kro64vvv/CIaS9zIYoaHm/wCpkon/1qdl/wDbql7/3a1d/2Derlz/3nEAPADdoK1e/96scACs8wEA365f/9mqZ/8Aw52C/6eUuP+AgX/i/1tbzrAnAJH/v5Vi/8WbBlb/L/g326lY/+MAr1r/3atZ/95RMADdq1jwBVewAFgw/9+sWTYAsQHerB0wAa3wAXICtQFa/+EQrlj/2/ACr41ZwP+1k1z/4PAAMQSA67VZ/8WaUf8HAfgH4apT/+mxVhD/4qxUMABT/+JArVT/461TNgDkZq60AHQA5K9wArAA4jCtUv/ksAIxAOqyAFH/1KVX/15mAIn/enmF/+awAFP/5a9S//C3YFX/yJpM/wf4B/EAtFT/2aVP/9eEo04wAE3/16UwAAFxAKNM/9ikS/8k2KawAKZLMgDYpABN/9mkTv/WoxXxAErwAE7yANqnSgD/5KtH/2lwlBD/WnCqsANP/90AqUn/3ahO/+78tFD/B/gHDwAPAA8ADwD/DwAPAP8HDwAPAA8ADwAPAHsPAPoHNDEIPwA/AD8AJLAQR1l6XzYwNIH/AP//gf/8/wD/CvgIBvACBoAAAAAHNQYNABUn'
    	$deleteico = _Base64Decode($deleteico)
    	Local $tSource = DllStructCreate('byte[' & BinaryLen($deleteico) & ']')
    	DllStructSetData($tSource, 1, $deleteico)
    	Local $tDecompress
    	_WinAPI_LZNTDecompress($tSource, $tDecompress, 4286)
    	$tSource = 0
    	Local $bString = Binary(DllStructGetData($tDecompress, 1))
    	If $bSaveBinary Then
    		Local $hFile = FileOpen($sSavePath & "\delete.ico", 18)
    		FileWrite($hFile, $bString)
    		FileClose($hFile)
    	EndIf
    	Return $bString
    EndFunc   ;==>_deleteico
    
    
    Func _rotateico($bSaveBinary = False, $sSavePath = @ScriptDir)
    	Local $rotateico
    	$rotateico &= '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'
    	$rotateico &= 'AA8ABQANuINC4P/kx5v/8Qi/Bw8AHw8ADwAPAA8A9TG2g0MGsf8eBQBdsAIAOgD///D///8C4AAGwA///4ADsP//AAEEBgA2gAAGAsAABuAA/gMAwHT+AAIG4AE0AA4ABhAlAgb8Aw8PAgQDAwGAAA8AB/4PAAVNlwRJAk0AD/AAF/8HAAMBAHE='
    	$rotateico = _Base64Decode($rotateico)
    	Local $tSource = DllStructCreate('byte[' & BinaryLen($rotateico) & ']')
    	DllStructSetData($tSource, 1, $rotateico)
    	Local $tDecompress
    	_WinAPI_LZNTDecompress($tSource, $tDecompress, 4286)
    	$tSource = 0
    	Local $bString = Binary(DllStructGetData($tDecompress, 1))
    	If $bSaveBinary Then
    		Local $hFile = FileOpen($sSavePath & "\rotate.ico", 18)
    		FileWrite($hFile, $bString)
    		FileClose($hFile)
    	EndIf
    	Return $bString
    EndFunc   ;==>_rotateico
    
    
    Func _patternico($bSaveBinary = False, $sSavePath = @ScriptDir)
    	Local $patternico
    	$patternico &= 'ebFIAAABABAgIAFwIAAAqBAAABYAAMwAKAAYAJAAQAAYAVxhFQDMZmb/fQYCh8z+zG4HhkGBBfEB/3//P/8///8z/z//AP8//wH/AP8ffwD/fwB/AP8f/wD/AP8f/x9/AP9/AP8f/xX/AP8A/x9/AH8A/38A/x//AP8A/x//H38AfwD//x//Ff8AfwB/AP8P/w8/AP8/AD8APwA/AD8A/w9/AH8A/38AfwB/AH8A/w8/AD8APwD/PwA/AD8A/w9/AH8AfwB/AP9/AH8A/w8/AD8APwA/AD8A/z8A/w//CX8AfwB/AH8AfwD//w+/CT8APwA/AD8APwD/D///CX8AfwB/AH8AfwD/D/8P/z8APwA/AD8APwD/D/8PfwD/fwB/AH8AfwD/D/8PPwA/AP8/AD8APwA/AP8PfwB/AH8A/38AfwB/AP8PPwA/AD8APwD/PwA/AP8P/wl/AH8AfwB/AP9/AP8PPwA/AD8APwA/AD8AH/4PPwA/AD8ANQASsFBm/8xmNzAAAABVGFVVVHEOAQA='
    	$patternico = _Base64Decode($patternico)
    	Local $tSource = DllStructCreate('byte[' & BinaryLen($patternico) & ']')
    	DllStructSetData($tSource, 1, $patternico)
    	Local $tDecompress
    	_WinAPI_LZNTDecompress($tSource, $tDecompress, 4286)
    	$tSource = 0
    	Local $bString = Binary(DllStructGetData($tDecompress, 1))
    	If $bSaveBinary Then
    		Local $hFile = FileOpen($sSavePath & "\pattern.ico", 18)
    		FileWrite($hFile, $bString)
    		FileClose($hFile)
    	EndIf
    	Return $bString
    EndFunc   ;==>_patternico
    
    
    Func _whiteico($bSaveBinary = False, $sSavePath = @ScriptDir)
    	Local $whiteico
    	$whiteico &= 'cLFIAAABABAgIAFwIAAAqBAAABYAAMwAKAAYAJAAQAAYAVzhFQDMZmb/fQZ1AP8///8//x//Hz8A/x8/AP8fPwD/HwD/Dx8AHwAfAP8PHwAfAP//D/8PHwAfAP8PHwAfAB8A//8PHwAfAB8A/w8fAB8A/w///w8fAB8A/w8fAB8ADwAPAP//B/8HDwAPAA8ADwAPAP8H//8HDwAPAA8ADwAPAA8A/wf/DwAPAA8ADwAPAA8A/wcPAP8PAA8ADwAPAA8A/wcPAA8A/w8ADwAPAA8A/wcPAA8ADwD/DwAPAA8A/wcPAA8ADwAPAP8PAA8A/wcPAA8ADwAPAA8A/w8A/wf/Bw8ADwAPAA8ADwD//wf/Bw8ADwAPAA8ADwD/B///Bw8ADwAPAA8ADwAPAP8H/w8ADwAPAA8ADwAPAP8HDwD/DwAPAA8ADwAPAP8HDwAPAP8PAA8ADwAPAP8HDwAPAA8A/w8ADwAPAP0HPwA/AD8ANQAJsFBm/8xmNzAAfAA='
    	$whiteico = _Base64Decode($whiteico)
    	Local $tSource = DllStructCreate('byte[' & BinaryLen($whiteico) & ']')
    	DllStructSetData($tSource, 1, $whiteico)
    	Local $tDecompress
    	_WinAPI_LZNTDecompress($tSource, $tDecompress, 4286)
    	$tSource = 0
    	Local $bString = Binary(DllStructGetData($tDecompress, 1))
    	If $bSaveBinary Then
    		Local $hFile = FileOpen($sSavePath & "\white.ico", 18)
    		FileWrite($hFile, $bString)
    		FileClose($hFile)
    	EndIf
    	Return $bString
    EndFunc   ;==>_whiteico
    
    
    Func _blackico($bSaveBinary = False, $sSavePath = @ScriptDir)
    	Local $blackico
    	$blackico &= 'c7FIAAABABAgIAFwIAAAqBAAABYAAMwAKAAYAJAAQAAYAVzhFQDMZmb/fQYAhnID//8//z//H/8f/xL/H/8A/x///wB/AP8PfwB/AH8A/w9/AP9/AP8P/w9/AH8A/w9/AH8A/38A/w9/AH8AfwD/D38AfwD//w//D38AfwD/D38FfwA/AP8/AP8H/wc/AD8APwA/AD8A//8H/wc/AD8APwA/AD8APwD//wc/AD8APwA/AD8APwD/B/8/AD8APwA/AD8APwD/Bz8A/z8APwA/AD8APwD/Bz8APwD/PwA/AD8APwD/B78BPwA/AP8/AD8APwD/B78BPwA/AD8A/z8APwD/B/8HPwA/AD8APwD/PwD/B/8HPwA/AD8APwA/AP//B/8HPwA/AD8APwA/AD8A//8HPwA/AD8APwA/AD8A/wf/PwA/AD8APwA/AD8A/wc/AP8/AD8APwA/AD8A/wc/AD8A/z8APwA/AD8A/Qc/AD8APwABNQAJsFBm/8xmNzAAfAA='
    	$blackico = _Base64Decode($blackico)
    	Local $tSource = DllStructCreate('byte[' & BinaryLen($blackico) & ']')
    	DllStructSetData($tSource, 1, $blackico)
    	Local $tDecompress
    	_WinAPI_LZNTDecompress($tSource, $tDecompress, 4286)
    	$tSource = 0
    	Local $bString = Binary(DllStructGetData($tDecompress, 1))
    	If $bSaveBinary Then
    		Local $hFile = FileOpen($sSavePath & "\black.ico", 18)
    		FileWrite($hFile, $bString)
    		FileClose($hFile)
    	EndIf
    	Return $bString
    EndFunc   ;==>_blackico
    
    
    Func _progico($bSaveBinary = False, $sSavePath = @ScriptDir)
    	Local $progico
    	$progico &= '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'
    	$progico &= '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'
    	$progico &= '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'
    	$progico &= 'gABHpaKem7CtqgCxqqejlJmVjwBfko+IQJyZlQAuioeCF3Jvav4EH28PAA8ADwAPAA8ADwB/DwAPAA8ADwAPAA8AeJr8QB9B/+APQQCUQbDgAABBIAE0AAc/AMc/AD8AMQAf/0EgmDIA/XGYEDAAEZh/mA8ADwAHABBOTU0CMJcqNzZ0NUbgAAkfAg8AsIoeAGxsalV9e3qcAJWSkdy1sbD9QuHwRFJPS9DgATQHYgkIALCIFHNycUUAgX99i4KAfdAAhoJ/9qilov8IxcLAcIbF/6qoAqXwR8j/hX95/7A7NC/zIAMhDgRwhoJVsIvDpaOh7/FkKNTRzvJHmnCDkIyIiP+wMHOOi4kyhQKjMF2Efnn/SUIgO/8DAwNxigqzOLCv8PFZ8UExcIJ8QHj/mpWS/7FtpGFwc5iTj/9wljKDpRCin/+IMHlNRj4BtkC3tbP23dvbAP/S0dH/j4l+AP+nn5L/jIiFFXB/l7JMk7BefHd0AP8MCQf/qaalwTAChf9VTUX2AzBqAvYxN56Qf//BcgAo/7yMXP+UiAfwVHCbcX+sqaX/ggB9ev8RDgv/pgGwZpmVkf9kXlgT9gPwQ/bXcE6jhmkA/zUdF/9MQzkQ/4V1YvBFu//XENTT/7fxV398/wAOCgj/nZuZ/zibl5EwaLdeMFX23gDd3P+qopn/mACOhf85Lif/loyTkHBR8Ubf/8IwFYCEgn//BwUDcIngl/+blpOwYrdo8QsI8fDu8l6trar/orGwStLOzbBm2/BJCO3/yDCEiYeF/4gKCAewTKj/onClgm24bLq4tvbt8JVtsUfWMFjxY+TwgjFhfFxxaHIQ8VgxU9cwGqswpqL/d/Bw9g/DwQD21dPS/97b2gWwavCgL/7/+Pf3FP/isFJ8cG3LyscRcIC3/9AwIeXk4kT/yHANmpSP9gOSGI6L9rFxsSPQzcujch/xcujn5bB73/J7DuawVfBQMKWq/8K/QL36s7CssnZamWKWoAO8/tgwXnFr7gHwnOLh3/7NyscA6r+8udC2sq8At5yYk4inpZ8AZqyqpEmZlpAOG7BSNk8wUgSLh4EgKailoW6wHmiXAJONO5qYkyCE+IF8DF81DwAPAA8ADwABeEiHrEH8AaxB2MAArDBEMAADPwA/ACCsQQH/rHBGrEE='
    	$progico = _Base64Decode($progico)
    	Local $tSource = DllStructCreate('byte[' & BinaryLen($progico) & ']')
    	DllStructSetData($tSource, 1, $progico)
    	Local $tDecompress
    	_WinAPI_LZNTDecompress($tSource, $tDecompress, 7886)
    	$tSource = 0
    	Local $bString = Binary(DllStructGetData($tDecompress, 1))
    	If $bSaveBinary Then
    		Local $hFile = FileOpen($sSavePath & "\prog.ico", 18)
    		FileWrite($hFile, $bString)
    		FileClose($hFile)
    	EndIf
    	Return $bString
    EndFunc   ;==>_progico
    
    
    Func _Base64Decode($sB64String)
    	Local $struct = DllStructCreate("int")
    	Local $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $sB64String, "int", 0, "int", 1, "ptr", 0, "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0)
    	If @error Or Not $a_Call[0] Then Return SetError(1, 0, "")
    	Local $a = DllStructCreate("byte[" & DllStructGetData($struct, 1) & "]")
    	$a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $sB64String, "int", 0, "int", 1, "ptr", DllStructGetPtr($a), "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0)
    	If @error Or Not $a_Call[0] Then Return SetError(2, 0, "")
    	Return DllStructGetData($a, 1)
    EndFunc   ;==>_Base64Decode
    
    
    Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iBufferSize = 0x800000)
    	Local $tBuffer, $ret
    	$tOutput = 0
    	$tBuffer = DllStructCreate('byte[' & $iBufferSize & ']')
    	If @error Then Return SetError(1, 0, 0)
    	$ret = DllCall('ntdll.dll', 'uint', 'RtlDecompressBuffer', 'ushort', 0x0002, 'ptr', DllStructGetPtr($tBuffer), 'ulong', $iBufferSize, 'ptr', DllStructGetPtr($tInput), 'ulong', DllStructGetSize($tInput), 'ulong*', 0)
    	If @error Then Return SetError(2, 0, 0)
    	If $ret[0] Then Return SetError(3, $ret[0], 0)
    	$tOutput = DllStructCreate('byte[' & $ret[6] & ']')
    	If Not _WinAPI_MoveMemory(DllStructGetPtr($tOutput), DllStructGetPtr($tBuffer), $ret[6]) Then
    		$tOutput = 0
    		Return SetError(4, 0, 0)
    	EndIf
    	Return $ret[6]
    EndFunc   ;==>_WinAPI_LZNTDecompress
    Alles anzeigen

    läßt sich zwar kompilieren aber das Programm wird kurz nach Start geschlossen. @Oscar bzw. @UEZ die Func _CreatePatternTexture() verursacht imho dieses Problem.

  • Unterschiedliche Textfarben innerhalb einer ListView

    • autoBert
    • 12. Mai 2016 um 13:59

    Ich habe das Skript mit Hilfe von Melba23 & Co. weiterentwickelt:

    Spoiler anzeigen
    C
    ;https://autoit.de/index.php/Thread/84279-Unterschiedliche-Textfarben-innerhalb-einer-ListView/?postID=674295#post674295
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <array.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <WindowsConstants.au3>
    #include <FontConstants.au3>
    
    
    Global $iDllGDI = DllOpen("gdi32.dll")
    
    
    $aColBK = IniReadSection(@ScriptDir & "\lv_format.ini", "ColBKColor")
    _ArrayDelete($aColBK, 0)
    ;_ArrayDisplay($aColBK)
    $aRowBK = IniReadSection(@ScriptDir & "\lv_format.ini", "RowBKColor")
    _ArrayDelete($aRowBK, 0)
    ;_ArrayDisplay($aColBK)
    $aColText = IniReadSection(@ScriptDir & "\lv_format.ini", "ColTextColor")
    _ArrayDelete($aColText, 0)
    ;_ArrayDisplay($aColBK)
    $aRowText = IniReadSection(@ScriptDir & "\lv_format.ini", "RowTextColor")
    _ArrayDelete($aRowText, 0)
    ;_ArrayDisplay($aRowText)
    
    
    Global $bColorHeader = True ;wenn true werden auch die Spaltenüberschriften mit eingefärbt.
    
    
    
    
    $GUI = GUICreate("Listview Farbig", 1024, 300, 0, 0) ;<==== Breite geändert
    $cListView = GUICtrlCreateListView("", 2, 2, 1020, 294, -1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT)) ;<==== Breite geändert
    ;_GUICtrlListView_SetExtendedListViewStyle($cListView, $LVS_EX_FULLROWSELECT) ; BitOR($LVS_EX_DOUBLEBUFFER, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
    $hListView = GUICtrlGetHandle($cListView)
    For $i = 1 To 31
    	_GUICtrlListView_InsertColumn($hListView, $i - 1, $i, 25)
    	_GUICtrlListView_SetColumnWidth($hListView, $i - 1, 32) ;<==== eingefügt für Spaltenbreite
    Next
    ;get handle to child SysHeader32 control of ListView
    Global $hHeader = HWnd(GUICtrlSendMsg($cListView, $LVM_GETHEADER, 0, 0))
    ;Turn off theme for header
    DllCall("uxtheme.dll", "int", "SetWindowTheme", "hwnd", $hHeader, "wstr", "", "wstr", "")
    ;subclass ListView to get at NM_CUSTOMDRAW notification sent to ListView
    ;Global $wProcNew = DllCallbackRegister("_LVWndProc", "ptr", "hwnd;uint;wparam;lparam")
    ;Global $wProcOld = _WinAPI_SetWindowLong($hListView, $GWL_WNDPROC, DllCallbackGetPtr($wProcNew))
    
    
    ;Optional: Flat Header - remove header 3D button effect
    Global $iStyle = _WinAPI_GetWindowLong($hHeader, $GWL_STYLE)
    _WinAPI_SetWindowLong($hHeader, $GWL_STYLE, BitOR($iStyle, $HDS_FLAT))
    
    
    ; Get the font of the Header control (credit KaFu)
    Local $hDC = _WinAPI_GetDC($hHeader)
    Local $hFont = _SendMessage($hHeader, $WM_GETFONT)
    Local $hObject = _WinAPI_SelectObject($hDC, $hFont)
    Local $tLogFont = DllStructCreate($tagLOGFONT)
    
    
    _WinAPI_GetObject($hFont, DllStructGetSize($tLogFont), DllStructGetPtr($tLogFont))
    _WinAPI_SelectObject($hDC, $hObject)
    _WinAPI_ReleaseDC($hHeader, $hDC)
    
    
    Local $iWeight = DllStructGetData($tLogFont, "Weight") ; Bold
    DllStructSetData($tLogFont, "Weight", BitOR($iWeight, $FW_BOLD))
    $hHdrFont = _WinAPI_CreateFontIndirect($tLogFont)
    
    
    
    
    For $i = 0 To 21 ; alle Item/SubItem erstellen
    	_GUICtrlListView_AddItem($hListView, "Item: " & $i, $i)
    	For $j = 1 To 30
    		_GUICtrlListView_AddSubItem($hListView, $i, "Sub: " & $j, $j)
    	Next
    Next
    If $bColorHeader Then
    	$iCols = _GUICtrlListView_GetColumnCount($hListView)
    	Global Const $tagNMCUSTOMDRAW = "struct;" & $tagNMHDR & ";dword dwDrawStage;handle hdc;" & $tagRECT & _
    			";dword_ptr dwItemSpec;uint uItemState;lparam lItemlParam;endstruct"
    
    
    	Global $aHdrData[$iCols][3] ;Headerdata erstellen wird beim einfärben benötigt
    	For $i = 0 To $iCols - 1
    		$aHdrData[$i][0] = _GUICtrlListView_GetColumn($hListView, $i)[5]
    		$iIndex = _ArraySearch($aColText, $i, 0, 0, 0, 0, 1, 0)
    		If $iIndex <> -1 Then
    			$aHdrData[$i][1] = RGB2BGR($aColText[$iIndex][1])
    		Else
    			$aHdrData[$i][1] = 0x000000
    		EndIf
    		$iIndex = _ArraySearch($aColBK, $i, 0, 0, 0, 0, 1, 0)
    		If $iIndex <> -1 Then
    			$aHdrData[$i][2] = RGB2BGR($aColBK[$iIndex][1])
    		Else
    			$aHdrData[$i][2] = 0xFFFFFF
    		EndIf
    	Next
    EndIf
    
    
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    GUISetState()
    
    
    While True
    	$msg = GUIGetMsg()
    	Switch $msg
    		Case -3
    			ExitLoop
    	EndSwitch
    WEnd
    
    
    Func WM_NOTIFY($hWnd, $msg, $wParam, $lParam)
    	Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
    	$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    	$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    	$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    	$iCode = DllStructGetData($tNMHDR, "Code")
    	Switch $hWndFrom
    		Case $hHeader
    			If $bColorHeader Then
    				;ConsoleWrite('Header: ' & $iCode & @CRLF)
    				Switch $iCode
    					Case $NM_CUSTOMDRAW
    						Local $tNMCustomDraw = DllStructCreate($tagNMCUSTOMDRAW, $lParam)
    						Local $dwDrawStage = DllStructGetData($tNMCustomDraw, "dwDrawStage")
    						Switch $dwDrawStage ; Holds a value that specifies the drawing stage
    							Case $CDDS_PREPAINT ; Before the paint cycle begins
    								Return $CDRF_NOTIFYITEMDRAW ; Notify parent window of any item related drawing operations
    
    
    							Case $CDDS_ITEMPREPAINT ; Before an item is drawn: Default painting (frames and background)
    								Return $CDRF_NOTIFYPOSTPAINT ; Notify parent window of any post item related drawing operations
    
    
    							Case $CDDS_ITEMPOSTPAINT ; After an item is drawn: Custom painting (item texts)
    								Local $tRECT = DllStructCreate($tagRECT)
    								Local $iIndex = DllStructGetData($tNMCustomDraw, "dwItemSpec") ; Item index
    								Local $hDC = DllStructGetData($tNMCustomDraw, "hdc") ; Device context
    								_WinAPI_SelectObject($hDC, $hHdrFont) ; Set text font
    								_WinAPI_SetBkMode($hDC, $TRANSPARENT) ; Transparent background
    								_WinAPI_SetTextColor($hDC, $aHdrData[$iIndex][1]) ; Set text colour
    								; Get header section size
    								DllStructSetData($tRECT, 1, DllStructGetData($tNMCustomDraw, 6) + 1)
    								DllStructSetData($tRECT, 2, DllStructGetData($tNMCustomDraw, 7) + 1)
    								DllStructSetData($tRECT, 3, DllStructGetData($tNMCustomDraw, 8) - 2)
    								DllStructSetData($tRECT, 4, DllStructGetData($tNMCustomDraw, 9) - 2)
    								; Set and draw back colour
    								Local $hBrush = _WinAPI_CreateSolidBrush($aHdrData[$iIndex][2])
    								_WinAPI_FillRect($hDC, $tRECT, $hBrush)
    								; Write text
    								If $iIndex < _GUICtrlListView_GetColumnCount($cListView) Then
    									_WinAPI_DrawText($hDC, $aHdrData[$iIndex][0], $tRECT, $DT_CENTER + $DT_VCENTER)
    								EndIf
    								Return $CDRF_NEWFONT ; $CDRF_NEWFONT must be returned after changing font or colors
    						EndSwitch
    				EndSwitch
    			EndIf
    		Case $hListView
    			;ConsoleWrite('Listview' & @CRLF)
    			Switch $iCode
    				Case $NM_CUSTOMDRAW
    					Local $tNMCustomDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
    					Local $iDrawStage, $iItem, $iSubitem, $hDC, $tRECT
    					$iDrawStage = DllStructGetData($tNMCustomDraw, 'dwDrawStage')
    					Switch $iDrawStage
    						Case $CDDS_ITEMPREPAINT
    							Return $CDRF_NOTIFYSUBITEMDRAW
    						Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
    							; Item/SubItem das aktuell gezeichnet werden soll ermitteln
    							$iItem = DllStructGetData($tNMCustomDraw, 'dwItemSpec')
    							$iSubitem = DllStructGetData($tNMCustomDraw, 'iSubItem')
    							Switch $iItem ; Zeilenwahl
    								Case -1 ;kommt nicht vor ist aber notwendig, damit case else verwendet werden kann
    								Case Else
    									$iIndex = _ArraySearch($aRowBK, $iItem, 0, 0, 0, 0, 1, 0)
    									If $iIndex = -1 Then ;nicht im Array für spezielle Zeilen also weiß
    										DllStructSetData($tNMCustomDraw, 'clrTextBk', RGB2BGR(0xFFFFFF))
    									Else
    										DllStructSetData($tNMCustomDraw, 'clrTextBk', RGB2BGR($aRowBK[$iIndex][1]))
    										;ConsoleWrite('Item '&$iItem&' BK: '&$aRowBK[$iIndex][1] & @CRLF)
    									EndIf
    									$iIndex = _ArraySearch($aRowText, $iItem, 0, 0, 0, 0, 1, 0)
    									If $iIndex = -1 Then ;nicht im Array für spezielle Zeilen also schwarz
    										DllStructSetData($tNMCustomDraw, 'clrText', RGB2BGR(0x000000))
    									Else
    										DllStructSetData($tNMCustomDraw, 'clrText', RGB2BGR($aRowText[$iIndex][1]))
    										;ConsoleWrite('Item '&$iItem&' Text: '&$aRowText[$iIndex][1] & @CRLF)
    									EndIf
    							EndSwitch
    							Switch $iSubitem
    								Case -1 ;kommt nicht vor ist aber notwendig, damit case else verwendet werden kann
    								Case Else
    									$iIndex = _ArraySearch($aColBK, $iSubitem, 0, 0, 0, 0, 1, 0)
    									If $iIndex <> -1 Then
    										DllStructSetData($tNMCustomDraw, 'clrTextBk', RGB2BGR($aColBK[$iIndex][1]))
    										;ConsoleWrite('SubItem '&$iSubitem&' BK: '&$aColBK[$iIndex][1] & @CRLF)
    									EndIf
    									$iIndex = _ArraySearch($aColText, $iSubitem, 0, 0, 0, 0, 1, 0)
    									If $iIndex <> -1 Then
    										DllStructSetData($tNMCustomDraw, 'clrText', RGB2BGR($aColText[$iIndex][1]))
    										;ConsoleWrite('SubItem '&$iSubitem&' Text: '&$aColText[$iIndex][1] & @CRLF)
    									EndIf
    							EndSwitch
    							Return $CDRF_NEWFONT
    					EndSwitch
    			EndSwitch
    	EndSwitch
    	Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_NOTIFY
    
    
    Func RGB2BGR($iColor)
    	Local $sH = Hex($iColor, 6)
    	Return '0x' & StringRight($sH, 2) & StringMid($sH, 3, 2) & StringLeft($sH, 2)
    EndFunc   ;==>RGB2BGR
    Alles anzeigen


    66_Listview Farbig.jpg
    es lohnt sich im Entwicklerforum vorbeizuschauen, im dortigen Thema sind einige gute Lösungen im Zusammenhang mit LV-Headern verlinkt bzw. direkt gepostet, die Lösung von @UEZ verdient hier besondere Erwähnung

  • Compilierte Exe funktioniert nicht

    • autoBert
    • 12. Mai 2016 um 11:23

    Ohne das Skript zu sehen wird es schwierig den Fehler zu finden. Ich tippe aber darauf das die Fremd-Funktion welche die Daten einsammelt bei dem anderen Rechner nicht aktiviert ist.

  • Möglich oder Nicht ?

    • autoBert
    • 12. Mai 2016 um 09:08

    wieviele Steamaccounts hast du denn, daß das verwalten automatisiert werden soll?.

    Schau dir in der Hilfe die Funktionen der IE.au3 an. Falls du genügend Wissen über HTML und den Aufbau des DOM-Objektes hast ist es möglich das du es schaffst.

    Lies dir am besten die Forenregeln durch.

  • AutoIT und Excel

    • autoBert
    • 11. Mai 2016 um 21:45

    Ich denke gmmg war etwas zu optimistisch bzw. hat sich falsch ausgedrückt. Afaik funktioniert die Excel-UDF nur mit einem lokal installierten Excel. Ich lasse mich hierzu aber gerne von @water dem Autor der UDF korrigieren. Anders sieht es bei ADO aus, hier würde ein lokal installierter ADO-Datenbanktreiber genügen um zumindestest die Daten (auch remote) auszulesen, im Wiki des Entwicklerforums gibt es dazu ein Beispiel, (auch von @water).

    Edit: ist das gleiche Problem mit dem Unterschied das ein ADO-Treiber ohne zusätzliche Lizenzkosten installiert werden kann.

    mfg (auto)Bert

  • Priorität von HotKeySet

    • autoBert
    • 11. Mai 2016 um 18:17

    $hWnd=WinGetHandle("[ACTIVE]") speichert das im moment aktive Fensterhandle.

    WinActivate($hWnd) macht das Fenster mir diesem Handle zum aktiven.

  • Priorität von HotKeySet

    • autoBert
    • 11. Mai 2016 um 13:17
    Zitat von Code4Fun

    D.h. wenn ich meine Anwendung vor allen anderen Anwendungen starte, sollte ich doch gute Chancen haben, das meine F1 - F5 Belegung akzeptiert wird, oder?

    Zitat von Dt. Hilfeübersetzung

    Bemerkungen
    Wenn zwei Skripte den gleichen HotKey (Tastenkombination) setzen, sollte man vermeiden, beide Skripte parallel auszuführen.
    (Das zweite Skript kann den HotKey nicht abfangen, solange das erste Skript nicht beendet wurde oder den Hotkey freigegeben hat, bevor das zweite Skript diesen setzt.)

    Ein HotKey unterbricht "typischerweise" das aktive Autoit Skript und führt die angegebene Funktion bis zu deren Schluss aus, es sei denn, deren Ausführung wird ebenfalls unterbrochen.

    Folgende Ausnahmen existieren:
    1) Wenn die aktuelle Funktion eine "blockierende" Funktion ist (Tastenbetätigungen werden unterdrückt), dann werden die Tastendrücke gepuffert und sofort nach der blockierenden Funktion ausgeführt. MsgBox und FileSelectFolder sind Beispiele für blockierende Funktionen. Teste das Verhalten anhand des SHIFT+ALT+D Beispiels.
    2) Wenn das Autoit Skript durch einen Klick auf das TrayIcon (Pause) pausiert wurde, werden alle HotKeys ignoriert.

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™