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

  • FileCommander

    • Oscar
    • 17. August 2015 um 15:54

    Dank der Änderungen von "autoBert" ist das Script jetzt auch unter der aktuellen Version von AutoIt lauffähig. Neue Version in Post#1.

    Vielen Dank, autoBert! :)

    Es wird aber wohl bald auch eine komplett überarbeitete (in großen Teilen neu geschriebene) Version vom FileCommander geben.
    Fragt aber nicht nach einem Datum. :D

  • GUI resizen und Button neu erstellen

    • Oscar
    • 17. August 2015 um 15:46

    Ja, Du vermutest richtig, dass dieses Thema im Zusammenhang mit dem FileCommander steht.
    Wobei mir der Zusammenhang mit den Resizing-Problemen und dem GUISetState nicht wirklich einleuchtet.

    Allerdings ist die Methode, die ich dort verwende, die aus der Funktion "_CreateButton2" in Post#1. Also ein Workaround.
    Das wollte ich in der Neufassung ja besser machen. Weil sich das mit der Neufassung aber noch etwas hinziehen kann, werde ich erstmal die von Dir geänderte Version im FileCommander-Thread posten.
    Vielen Dank für die Mühe der Fehlersuche und die Änderungen.

  • Ganz einfache Frage (Variable/String) multiplizieren + sleep

    • Oscar
    • 16. August 2015 um 15:27

    Eine MsgBox zeigt nicht alle Zeichen an.
    Eventuell liest Du da aus dem Quelltext ein (unsichtbares) Zeichen vor den Zahlen aus.
    Die Umwandlung in eine Zahl funktioniert dann nicht. Für eine genauere Auskunft benötigen wir den HTML-Quelltext.

  • GUI resizen und Button neu erstellen

    • Oscar
    • 16. August 2015 um 14:35

    Direkt beim maximieren noch nicht, aber wenn man dann auf "Button neu erstellen 1" klickt, sind die Button verschwunden (Win 7, 64 Bit).

  • GUI resizen und Button neu erstellen

    • Oscar
    • 16. August 2015 um 14:03

    Das funktioniert fast gut!
    Beim maximieren des Fensters sind die Button jedoch verschwunden.

    Aber ich fürchte, die Probleme mit dem resizen werden noch schlimmer. Nachdem bei meinem Programm nun noch mehr Gui-Elemente dazugekommen sind, wird das Ganze chaotisch (egal mit welchen Werten/Kombinationen).
    Mit einer älteren Version von AutoIt hat das mal geklappt, aber jetzt geht das nicht mehr. GUICtrlSetResizing muss fehlerhaft sein oder ich bin zu blöd das System dahinter zu verstehen. :huh:

    Notgedrungen habe ich mich jetzt doch für die Kanashius-Methode entschieden und positioniere alle Gui-Elemente über WM_SIZE und GuiCtrlSetPos neu.
    Danke, an alle Beteiligten für eure Bemühungen/Lösungsvorschläge!

  • Verschlüsselungsalgorithmus (Idee)

    • Oscar
    • 16. August 2015 um 10:47

    Ok, das wäre eine Möglichkeit.
    Man tauscht eine bestimmte Bildersammlung aus und verwendet je nach Datum oder zusätzlicher Nachricht ein bestimmtes Bild zum ver-/entschlüsseln. Hört sich ganz gut an! :)

    [Paranoid on]Als OTP dürfte man eigentlich jedes Bild nur einmal verwenden, aber dann müsste man auch die verwendeten Rechner unangreifbar machen.[Paranoid off]

  • GUI resizen und Button neu erstellen

    • Oscar
    • 16. August 2015 um 10:24

    UEZ: Dein Beispiel kann ich jetzt nicht testen, weil ich nicht weiß, was Du im Hauptscript noch geändert hast (Variable: $iSE)?

    Das mit den "Dummy"-Button ist auch keine Alternative, weil ja eigentlich mehr Button angezeigt werden sollen, wenn mehr Platz zur Verfügung steht.
    Oder man müsste zwei komplette GUIs erstellen und dann im DoubleBuffering-Verfahren arbeiten. Hmm...vielleicht doch etwas Overkill... :D

  • Verschlüsselungsalgorithmus (Idee)

    • Oscar
    • 16. August 2015 um 10:17

    Genaugenommen handelt es sich ja um ein OTP. Die Sicherheit ist also schon sehr hoch, wenn da nicht das Problem mit der "Passwort"-Weitergabe wäre. Stichwort: Sicherer Übertragungsweg.
    Du musst dem Empfänger ja genau dieses Bild zukommen lassen, damit er die Nachricht entschlüsseln kann und genau da gibt es dann die Schwachstelle.
    Persönliche Übergabe? Hmm...dann kannst Du ihm auch gleich die Nachricht übergeben.
    Wie also soll die Übergabe des "Passwort"-Bildes erfolgen?

  • GUI resizen und Button neu erstellen

    • Oscar
    • 15. August 2015 um 19:45

    Hmmm...ich muss mal schauen, ob ich nicht doch mit meinem Workaround (Button2) leben kann...

    Es ist schon etwas eigenartig, dass die Button da so (scheinbar) willkürlich verschoben werden.

    Oder...ich müsste genügend "Dummy"-Button erstellen und sie dann nur entsprechend ein-/ausblenden, dann brauche ich die Button nicht zu löschen/neu zu erstellen.
    Das wäre noch eine Möglichkeit! Muss ich mal testen...

  • GUI resizen und Button neu erstellen

    • Oscar
    • 15. August 2015 um 18:59

    Auch beim andocken an den rechten Rand stimmen die Positionen nicht mehr, sobald man nach dem neu erstellen die GUI resized.
    Das passt zwar für den Moment des Erstellens, aber nicht mehr beim resizen. Das ist ja das Problem...

    Das Ganze komplett neu zu setzen (wie Kanashius) widerstrebt mir irgendwie. ^^

  • GUI resizen und Button neu erstellen

    • Oscar
    • 15. August 2015 um 17:17

    autoBert: Nein, das klappt leider nicht! Die Funktion müsste außerdem so aussehen:

    AutoIt
    Func _CreateButton1()
    	$aClient = WinGetClientSize($hGui)
    	For $i = 0 To UBound($aidButton, 2) - 1
    		For $j = 0 To 1
    			GUICtrlDelete($aidButton[$j][$i])
    		Next
    	Next
    	For $i = 0 To UBound($aidButton, 2) - 1
    		$aidButton[0][$i] = GUICtrlCreateButton(Chr(65 + $i), 20 + $i * 50, 25, 45, 25)
    		GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE)
    		$aidButton[1][$i] = GUICtrlCreateButton(Chr(65 + $i), ($aClient[0] / 2) + 20 + $i * 50, 25, 45, 25)
    		GUICtrlSetResizing(-1, $GUI_DOCKHCENTER + $GUI_DOCKTOP + $GUI_DOCKSIZE)
    	Next
    EndFunc   ;==>_CreateButton1
    Alles anzeigen

    Damit werden die Button zwar an der richtigen Stelle wieder erstellt, aber beim anschließenden resizen der GUI befinden sie sich an einer ganz anderen Stelle.
    Vielleicht ist das auch ein Bug?! :huh:


    Kanashius: Oha! Bei jedem resizen, positionierst Du alles neu? Das ist aber sehr aufwendig. Das muss doch auch einfacher gehen...

  • GUI resizen und Button neu erstellen

    • Oscar
    • 15. August 2015 um 16:29

    Ich habe ein Problem beim erstellen von Buttons auf einer GUI, die in der Größe veränderbar sein soll.
    Erstelle ich die Button gleich beim GUI erstellen und resize dann die GUI, funktioniert alles wie es sein soll. Problematisch wird es, wenn ich die Button lösche und danach neu erstellen will (ist im Programm erforderlich).
    Sie sollen nach dem neu erstellen, wieder die gleiche Position einnehmen, wie vorher. Also auch beim resizen der GUI wieder mit verschoben werden. Und genau das bekomme ich nicht hin, bzw. nur mit einem Workaround (ich verkleinere die GUI auf die "normale" Größe lösche die Buttons, erstelle sie neu und vergrößere die GUI dann wieder auf die alte Größe). Dieser Workaround hat aber den Nachteil, dass man das verkleinern/vergrößern der GUI natürlich sieht und das stört mich.
    Hier ist mal ein Testscript, mit dem ihr das Verhalten ausprobieren könnt.
    Wenn ihr das Testscript startet und die GUI vergrößert, werden die Button korrekt verschoben (wie es sein soll). Klickt ihr dann aber auf den linken Button "Button neu erstellen 1", werden die Button falsch gesetzt (logisch, weil die Koordinaten nicht mehr stimmen).
    Aber auch, wenn ich die Koordinaten abhängig von der Größe der GUI erstellen würde, würden sie beim anschließenden Resizing falsch verschoben werden.
    Mein Workaround (siehe oben) habe ich mit dem Button "Button neu erstellen 2" nachgebaut. So passt wieder alles, aber das flackern der GUI beim verkleinern/vergrößern stört halt.
    Gibt es da eine bessere Methode, wie man das hinbekommen kann?

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <Math.au3>
    #include <WindowsConstants.au3>
    
    
    
    
    Opt('GUIOnEventMode', 1)
    
    
    Global $aidButton[2][3]
    
    
    Global $hGui = GUICreate('Test', 400, 300, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX, $WS_SIZEBOX))
    GUISetOnEvent($GUI_EVENT_CLOSE, '_GuiClose')
    GUICtrlCreateLabel('', 199, 0, 2, 600, Default, $WS_EX_STATICEDGE)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH)
    _CreateButton1()
    
    
    GUICtrlCreateButton('Button neu erstellen 1', 10, 220, 160, 35)
    GUICtrlSetOnEvent(-1, '_CreateButton1')
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKSIZE)
    
    
    GUICtrlCreateButton('Button neu erstellen 2', 210, 220, 160, 35)
    GUICtrlSetOnEvent(-1, '_CreateButton2')
    GUICtrlSetResizing(-1, $GUI_DOCKHCENTER + $GUI_DOCKSIZE)
    
    
    GUISetState(@SW_SHOW, $hGui)
    
    
    Global $aWinSize = WinGetPos($hGui)
    GUIRegisterMsg($WM_GETMINMAXINFO, '_WM_GETMINMAXINFO')
    
    
    WinWaitClose($hGui)
    Exit
    
    
    Func _CreateButton1()
    	For $i = 0 To UBound($aidButton, 2) - 1
    		For $j = 0 To 1
    			GUICtrlDelete($aidButton[$j][$i])
    		Next
    	Next
    	For $i = 0 To UBound($aidButton, 2) - 1
    		$aidButton[0][$i] = GUICtrlCreateButton(Chr(65 + $i), 20 + $i * 50, 25, 45, 25)
    		GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE)
    		$aidButton[1][$i] = GUICtrlCreateButton(Chr(65 + $i), 220 + $i * 50, 25, 45, 25)
    		GUICtrlSetResizing(-1, $GUI_DOCKHCENTER + $GUI_DOCKTOP + $GUI_DOCKSIZE)
    	Next
    EndFunc   ;==>_CreateButton1
    
    
    Func _CreateButton2()
    	Local $aOldSize = WinGetPos($hGui)
    	WinMove($hGui, '', Default, Default, $aWinSize[2], $aWinSize[3])
    	For $i = 0 To UBound($aidButton, 2) - 1
    		For $j = 0 To 1
    			GUICtrlDelete($aidButton[$j][$i])
    		Next
    	Next
    	For $i = 0 To UBound($aidButton, 2) - 1
    		$aidButton[0][$i] = GUICtrlCreateButton(Chr(65 + $i), 20 + $i * 50, 25, 45, 25)
    		GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE)
    		$aidButton[1][$i] = GUICtrlCreateButton(Chr(65 + $i), 220 + $i * 50, 25, 45, 25)
    		GUICtrlSetResizing(-1, $GUI_DOCKHCENTER + $GUI_DOCKTOP + $GUI_DOCKSIZE)
    	Next
    	WinMove($hGui, '', Default, Default, $aOldSize[2], $aOldSize[3])
    EndFunc   ;==>_CreateButton2
    
    
    Func _GuiClose()
    	GUIDelete($hGui)
    EndFunc   ;==>_GuiClose
    
    
    Func _WM_GETMINMAXINFO($hWnd, $iMsg, $iwParam, $ilParam)
    	#forceref $iMsg, $iwParam
    	Local $minmaxinfo
    	If $hWnd = $hGui Then
    		$minmaxinfo = DllStructCreate('int;int;int;int;int;int;int;int;int;int', $ilParam)
    		DllStructSetData($minmaxinfo, 7, $aWinSize[2])
    		DllStructSetData($minmaxinfo, 8, $aWinSize[3])
    	EndIf
    	Return $GUI_RUNDEFMSG
    EndFunc   ;==>_WM_GETMINMAXINFO
    Alles anzeigen
  • Verschlüsselungsalgorithmus (Idee)

    • Oscar
    • 15. August 2015 um 15:34

    Um ein weißes Rauschen zu erzeugen, ist eigentlich nicht viel Hardware erforderlich (siehe: https://de.wikipedia.org/wiki/Rauschgenerator).
    Die Version mit der Rausch-Diode ist recht simpel und könnte von den Herstellern leicht mit auf's Mainboard gepackt werden.
    Stellt sich die Frage, ob da nicht einige "Lobbyisten" ihre Macht ausspielen, um einen sicheren Zufallsgenerator zu verhindern?

    Ich denke aber auch, dass man unabhängig von der supersicheren Verschlüsselung bereits viel erreichen könnte, wenn man einfach alles verschlüsselt überträgt.
    Auch die völlig unwichtigen/banalen Informationen, wie die SMS von Tante Erna an Onkel Erwin "Schalt mal den Kaffee ein! Bin in 10 Minuten da!". Wenn die Verschlüsselung gut genug ist, dass die Nachrichtendienste damit 10 Minuten beschäftigt sind, dann rechnen wir das mal hoch auf die Anzahl der SMS pro Tag und schon läuft das ins Unendliche. Eine totale Überwachung wäre gar nicht mehr möglich.

  • Rekursives durchsuchen der Registry nach einem DWORD Namen

    • Oscar
    • 12. August 2015 um 08:42

    Da hatte ich mal zwei Funktionen geschrieben:

    AutoIt
    MsgBox(0, 'Key-Search', _RegKeySearch('HKEY_LOCAL_MACHINE', 'AutoIt v3'))
    MsgBox(0, 'Val-Search', _RegValSearch('HKEY_LOCAL_MACHINE', 'v3.3.14.0'))
    
    
    Func _RegKeySearch($sRegPath, $sKeySearch)
    	Local $sKey, $ret, $i = 0
    	While True
    		$i += 1
    		$sKey = RegEnumKey($sRegPath, $i)
    		If $sKey == $sKeySearch Then Return $sRegPath & '\' & $sKey
    		If @error Then ExitLoop
    		$ret = _RegKeySearch($sRegPath & '\' & $sKey, $sKeySearch)
    		If $ret <> '' Then ExitLoop
    	WEnd
    	Return $ret
    EndFunc
    
    
    Func _RegValSearch($sRegPath, $sValSearch)
    	Local $sKey, $sVal, $sVar, $ret, $i = 0, $j = 0
    	While True
    		$i += 1
    		$sKey = RegEnumKey($sRegPath, $i)
    		If @error Then ExitLoop
    		$ret = _RegValSearch($sRegPath & '\' & $sKey, $sValSearch)
    		If $ret <> '' Then ExitLoop
    		$j = 0
    		While True
    			$j += 1
    			$sVal = RegEnumVal($sRegPath & '\' & $sKey, $j)
    			If @error Then ExitLoop
    			$sVar = RegRead($sRegPath & '\' & $sKey, $sVal)
    			If $sVar == $sValSearch Then Return $sRegPath & '\' & $sKey & '\' & $sVal
    		WEnd
    	WEnd
    	Return $ret
    EndFunc
    Alles anzeigen
  • XML-Problem, Anzahl der Starttags und Endtags stimmen nicht - Wie sinnvoll ermitteln?

    • Oscar
    • 11. August 2015 um 18:20

    Ich dachte erst an einen rekursiven Ansatz, aber das führt zu einem Abbruch, wegen der Rekursionstiefe von AutoIt.
    Es geht aber auch einfacher mit einer Schleife:

    AutoIt
    $sXML = FileRead(@ScriptDir & '\Formatted.xml.txt')
    $fCheck = _CheckXML($sXML, True)
    ConsoleWrite('XML OK? ' & $fCheck & @CR)
    
    
    Func _CheckXML($sXML, $fDebug = False)
    	Local $sStartTag, $sEndTag
    	While True
    		$sStartTag = StringRegExpReplace($sXML, '(?s).*?(<w:[^ >]+.*?>).+', '$1')
    		If @extended = 0 Then Return SetError(0, 0, True)
    		$sXML = StringRegExpReplace($sXML, '(?s).*?<w:[^ >]+.*?>(.+)', '$1')
    		If $fDebug Then ConsoleWrite('$sStartTag: ' & $sStartTag & @CR)
    		If StringRight($sStartTag, 2) = '/>' Then ContinueLoop
    		$sEndTag = StringRegExpReplace($sStartTag, '(<)(w:[^ >]+).*?>', '$1/$2>')
    		If StringInStr($sXML, $sEndTag) Then
    			If $fDebug Then ConsoleWrite('$sEndTag gefunden! ' & $sEndTag & @CR)
    		Else
    			If $fDebug Then ConsoleWrite('EndTag fehlt: ' & $sEndTag & @CR)
    			If $fDebug Then ConsoleWrite('RestXML: ' & $sXML & @CR)
    			Return SetError(1, 0, False)
    		EndIf
    	WEnd
    EndFunc
    Alles anzeigen
  • Datei auf GUI ziehen

    • Oscar
    • 10. August 2015 um 17:01

    Das könnte man so machen:

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    
    Opt("GUIOnEventMode", 1)
    
    
    Global $gaDropFiles[1]
    
    
    Global $GUI = GUICreate("Test", 500, 55, -1, -1, Default, $WS_EX_ACCEPTFILES)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui')
    GUISetOnEvent($GUI_EVENT_DROPPED, '_DropFiles')
    Global $haupt1 = GUICtrlCreateLabel("", 60, 10, 440, 20)
    Global $haupt2 = GUICtrlCreateLabel("", 60, 30, 440, 20)
    Global $idLabel_datei1 = GUICtrlCreateLabel("Datei 1:", 10, 10, 50, 20)
    Global $idLabel_datei2 = GUICtrlCreateLabel("Datei 2:", 10, 30, 50, 20)
    
    
    GUICtrlSetState($haupt1, $GUI_DROPACCEPTED)
    GUICtrlSetState($haupt2, $GUI_DROPACCEPTED)
    GUICtrlSetState($idLabel_datei1, $GUI_DROPACCEPTED)
    GUICtrlSetState($idLabel_datei2, $GUI_DROPACCEPTED)
    
    
    GUISetState()
    GUIRegisterMsg($WM_DROPFILES, '_WM_DROPFILES')
    
    
    WinWaitClose($GUI)
    Exit
    
    
    Func _CloseGui()
    	GUIDelete($GUI)
    EndFunc   ;==>_CloseGui
    
    
    Func _DropFiles()
    	Switch @GUI_DropId
    		Case $haupt1, $idLabel_datei1
    			If UBound($gaDropFiles) > 1 Then
    				GUICtrlSetData($haupt1, $gaDropFiles[0])
    				GUICtrlSetData($haupt2, $gaDropFiles[1])
    			Else
    				GUICtrlSetData($haupt1, @GUI_DragFile)
    			EndIf
    		Case $haupt2, $idLabel_datei2
    			If UBound($gaDropFiles) > 1 Then
    				GUICtrlSetData($haupt1, $gaDropFiles[0])
    				GUICtrlSetData($haupt2, $gaDropFiles[1])
    			Else
    				GUICtrlSetData($haupt2, @GUI_DragFile)
    			EndIf
    	EndSwitch
    EndFunc   ;==>_DropFiles
    
    
    Func _WM_DROPFILES($hWnd, $iMsg, $wParam, $lParam)
    	#forceref $hWnd, $iMsg, $lParam
    	Local $nSize, $pFileName
    	Local $nAmt = DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', 0xFFFFFFFF, 'ptr', 0, 'int', 255)
    	If $nAmt[0] > 0 Then
    		ReDim $gaDropFiles[$nAmt[0]]
    		For $i = 0 To $nAmt[0] - 1
    			$nSize = DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', $i, 'ptr', 0, 'int', 0)
    			$nSize = $nSize[0] + 1
    			$pFileName = DllStructCreate('wchar[' & $nSize & ']')
    			DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', $i, 'ptr', DllStructGetPtr($pFileName), 'int', $nSize)
    			$gaDropFiles[$i] = DllStructGetData($pFileName, 1)
    			$pFileName = 0
    		Next
    	EndIf
    	Return $GUI_RUNDEFMSG
    EndFunc   ;==>_WM_DROPFILES
    Alles anzeigen
  • Datei auf GUI ziehen

    • Oscar
    • 9. August 2015 um 07:12

    Ich würde es so machen:

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    
    Opt("GUIOnEventMode", 1)
    Global $GUI = GUICreate("Test", 500, 55, -1, -1, Default, $WS_EX_ACCEPTFILES)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui')
    GUISetOnEvent($GUI_EVENT_DROPPED, '_DropFile')
    Global $haupt1 = GUICtrlCreateLabel("", 60, 10, 440, 20)
    Global $haupt2 = GUICtrlCreateLabel("", 60, 30, 440, 20)
    Global $idLabel_datei1 = GUICtrlCreateLabel("Datei 1:", 10, 10, 50, 20)
    Global $idLabel_datei2 = GUICtrlCreateLabel("Datei 2:", 10, 30, 50, 20)
    
    
    GUICtrlSetState($haupt1, $GUI_DROPACCEPTED)
    GUICtrlSetState($haupt2, $GUI_DROPACCEPTED)
    GUICtrlSetState($idLabel_datei1, $GUI_DROPACCEPTED)
    GUICtrlSetState($idLabel_datei2, $GUI_DROPACCEPTED)
    
    
    GUISetState()
    WinWaitClose($GUI)
    Exit
    
    
    Func _CloseGui()
    	GUIDelete($GUI)
    EndFunc
    
    
    Func _DropFile()
    	Switch @GUI_DropId
    		Case $haupt1, $idLabel_datei1
    			GUICtrlSetData($haupt1, @GUI_DragFile)
    		Case $haupt2, $idLabel_datei2
    			GUICtrlSetData($haupt2, @GUI_DragFile)
    	EndSwitch
    EndFunc
    Alles anzeigen
  • FileCommander

    • Oscar
    • 7. August 2015 um 19:10

    Nein, das ist nicht so gewollt.
    Im ZIP-Archiv in Post#1 ist auch die Exe-Datei. Dort funktioniert das auch noch einwandfrei.
    Das Script ist hingegen nicht mehr aktuell (funktioniert nicht so ganz unter der neuen AutoIt-Version).

    autoBert: Ich werde das Script mal selbst überarbeiten. Es gibt da doch einiges, was ich heute anders machen würde.

  • Jpg schrumpfen exif löschen.

    • Oscar
    • 6. August 2015 um 14:19

    Das ist doch mit GDI+ kein Problem. Es gibt "_GDIPlus_ImageResize" oder "_GDIPlus_ImageScale".
    Beim ersten gibst Du die Zielgröße an und beim Zweiten den Skalierungsfaktor. Je nachdem, was Dir eher zusagt.

  • TrayIcon Notification Counter

    • Oscar
    • 1. August 2015 um 15:17

    Das Problem hierbei ist die Unterscheidung GDI und GDI+. Einmal mit und einmal ohne Plus.
    Wenn Du eine GDI+ Bitmap erstellst und darauf zeichnest, musst Du sie anschließend erst in eine GDI-Bitmap umwandeln, bevor Du sie an das Control (hier das Tray-Icon) senden kannst.
    Ich habe das Beispiel mal abgewandelt und kommentiert:

    AutoIt
    #include <APIShellExConstants.au3>
    #include <GDIPlus.au3>
    #include <WinAPI.au3>
    #include <WinAPIShellEx.au3>
    #include <WindowsConstants.au3>
    
    
    Global Const $AUT_WM_NOTIFYICON = $WM_USER + 1
    Global Const $AUT_NOTIFY_ICON_ID = 1
    
    
    AutoItWinSetTitle("this is a test 123")
    Global $TRAY_ICON_GUI = WinGetHandle(AutoItWinGetTitle()) ; Internal AutoIt GUI
    
    
    OnAutoItExitRegister('OnAutoItExit')
    _GDIPlus_Startup()
    Global $iSize = 16, $hNewIcon
    Global $hIcon = _WinAPI_ShellExtractIcon(@SystemDir & '\shell32.dll', 2, $iSize, $iSize)
    Global $hBitmapIcon = _GDIPlus_BitmapCreateFromHICON($hIcon) ; GDI+ Bitmap vom HIcon erstellen
    Global $hBitmap = _GDIPlus_BitmapCreateFromScan0($iSize, $iSize) ; leere GDI+ Bitmap zum zeichnen erstellen
    Global $hGraphic = _GDIPlus_ImageGetGraphicsContext($hBitmap) ; GraphicContext der Bitmap
    Global $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000) ; Brush (ARGB) erstellen
    Global $hFormat = _GDIPlus_StringFormatCreate()
    Global $hFamily = _GDIPlus_FontFamilyCreate('Verdana') ; Zeichensatz auswählen
    Global $hFont = _GDIPlus_FontCreate($hFamily, 8, 1) ; Größe und Stil des Zeichensatzes
    Global $tLayout = _GDIPlus_RectFCreate(2, 1, $iSize - 2, $iSize - 1) ; Rechteck: Left, Top, Width, Height
    
    
    For $i = 9 To 0 Step -1
    	_GDIPlus_GraphicsClear($hGraphic) ; Graphic löschen
    	_GDIPlus_GraphicsDrawImage($hGraphic, $hBitmapIcon, 0, 0) ; das Icon zeichnen
    	_GDIPlus_GraphicsDrawStringEx($hGraphic, $i, $hFont, $tLayout, $hFormat, $hBrush) ; den String ($i) zeichnen
    	$hNewIcon = _GDIPlus_HICONCreateFromBitmap($hBitmap) ; ein HIcon (GDI ohne Plus) der Bitmap (GDI+) erstellen
    	_Tray_SetHIcon($hNewIcon)
    	_WinAPI_DestroyIcon($hNewIcon)
    	Sleep(500)
    Next
    
    
    
    
    While 1
    	Sleep(1000)
    WEnd
    
    
    Func OnAutoItExit()
    	_GDIPlus_FontDispose($hFont)
    	_GDIPlus_FontFamilyDispose($hFamily)
    	_GDIPlus_StringFormatDispose($hFormat)
    	_GDIPlus_BrushDispose($hBrush)
    	_GDIPlus_GraphicsDispose($hGraphic)
    	_GDIPlus_BitmapDispose($hBitmap)
    	_GDIPlus_BitmapDispose($hBitmapIcon)
    	_WinAPI_DestroyIcon($hIcon)
    	_GDIPlus_Shutdown()
    EndFunc   ;==>OnAutoItExit
    
    
    
    
    Func _Tray_SetHIcon($hIcon)
    	Local $tNOTIFY = DllStructCreate($tagNOTIFYICONDATA)
    	DllStructSetData($tNOTIFY, "Size", DllStructGetSize($tNOTIFY))
    	DllStructSetData($tNOTIFY, "hWnd", $TRAY_ICON_GUI)
    	DllStructSetData($tNOTIFY, "ID", $AUT_NOTIFY_ICON_ID)
    	DllStructSetData($tNOTIFY, "hIcon", $hIcon)
    	DllStructSetData($tNOTIFY, "Flags", BitOR($NIF_ICON, $NIF_MESSAGE))
    	DllStructSetData($tNOTIFY, "CallbackMessage", $AUT_WM_NOTIFYICON)
    	Local $aRet = DllCall("shell32.dll", "int", "Shell_NotifyIconW", "dword", $NIM_MODIFY, "ptr", DllStructGetPtr($tNOTIFY))
    	If @error Then Return SetError(1, 0, 0)
    	Return $aRet[0] <> 0
    EndFunc   ;==>_Tray_SetHIcon
    Alles anzeigen

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™