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

  • Anti "false-positive" Strategie mit PureBasic

    • Oscar
    • 18. Januar 2025 um 10:34
    Zitat von Schnuffel

    die lediglich die 2 AutoIt exen und ein paar Registry Einträge erstellt.

    Die Registry-Einträge bräuchte man gar nicht unbedingt.

    Wenn die AutoIt-Exe im a3x Verzeichnis liegt, müsste man nur eine Verknüpfung (in der die AutoIt-Exe mit dem a3x gestartet wird) in dem Verzeichnis erstellen.

  • Anti "false-positive" Strategie mit PureBasic

    • Oscar
    • 18. Januar 2025 um 09:14
    Zitat von Schnuffel

    die auf dem Zielrechner lediglich eine a3x Unterstützung installiert

    Dafür bräuchte man ja lediglich die 32/64 Bit exe im a3x-Verzeichnis.

    Ich hatte gestern schon die Idee, das alles zu packen und als BASE64 in ein NIM-Programm zu integrieren, sodass man damit die exe ins Scriptverzeichnis entpacken kann.

    Allerdings wenn ein AV-Programm bereits auf die AutoIt-Exe anschlägt, wird das auch keine Lösung sein. :/

  • Icon extrahieren - Skript läuft nicht

    • Oscar
    • 4. Januar 2025 um 15:19
    Zitat von Tweaky

    Bekommt es von euch jemand hin?

    Das geht sehr viel kürzer und unabhängig von 32/64 Bit:

    AutoIt
    #include <WinAPIGdi.au3>
    #include <WinAPIIcons.au3>
    #include <WinAPIShellEx.au3>
    #AutoIt3Wrapper_UseX64=y
    Global $iIconSize = 64
    Global $hIcon = _WinAPI_ShellExtractIcon('shell32.dll', -42, $iIconSize, $iIconSize)
    _WinAPI_SaveHICONToFile(@ScriptDir & '\test.ico', $hIcon)
    _WinAPI_DestroyIcon($hIcon)
  • _WinAPI_ShellChangeNotifyRegister 64bit - Absturz

    • Oscar
    • 1. Januar 2025 um 13:59
    Zitat von Velted

    das ist eine von den 'Shell-Ausrichtungsfallen'. Die Struktur SHChangeNotifyEntry ist in ShlObj_core.h definiert. Da steht am Anfang ein
    #include <pshpack1.h> /* Assume byte packing throughout */,
    das auch für die Struktur gilt und ein 'Byte-Packing' erzwingt.

    Ah! Vielen Dank!

    So funktioniert es dann:

    AutoIt
    #Region    ;************ Includes ************
    #include <WinAPISysWin.au3>
    #include <WinAPIShellEx.au3>
    #EndRegion ;************ Includes ************
    #AutoIt3Wrapper_UseX64=y ;32bit funktioniert / 64bit funktioniert
    
    Global $aTest[] = ["C:\_test\", "C:\_test2\", "C:\_test3\", "C:\_test4\"]
    
    For $i = 0 To UBound($aTest) - 1
    	DirCreate($aTest[$i])
    Next
    
    OnAutoItExitRegister('OnAutoItExit')
    HotKeySet('{ESC}', '_End')
    
    Global $hWnd = GUICreate('')
    Global $iMsg = _WinAPI_RegisterWindowMessage('SHELLCHANGENOTIFY')
    GUIRegisterMsg($iMsg, 'WM_SHELLCHANGENOTIFY')
    Global $g_iID = _WinAPI_ShellChangeNotifyRegister64($hWnd, $iMsg, $SHCNE_ALLEVENTS, BitOR($SHCNRF_INTERRUPTLEVEL, $SHCNRF_SHELLLEVEL, $SHCNRF_RECURSIVEINTERRUPT), $aTest, 1)
    If @error Then
    	MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), 'Fehler', 'Das Fenster wurde nicht registriert.')
    	Exit
    EndIf
    
    While 1
    	Sleep(1000)
    WEnd
    
    Func _End()
    	Exit
    EndFunc   ;==>_End
    
    Func OnAutoItExit()
    	If $g_iID Then
    		_WinAPI_ShellChangeNotifyDeregister($g_iID)
    	EndIf
    EndFunc   ;==>OnAutoItExit
    
    Func WM_SHELLCHANGENOTIFY($hWnd, $iMsg, $wParam, $lParam)
    	#forceref $hWnd, $iMsg
    	Local $tIDL = DllStructCreate((@AutoItX64 ? 'uint64 Item1;uint64 Item2;' : 'dword Item1;dword Item2;'), $wParam) ; bei 64 Bit ist das ein QWord (8 Byte)
    	Local $sPath = _WinAPI_ShellGetPathFromIDList(DllStructGetData($tIDL, 'Item1'))
    	If $sPath Then
    		ConsoleWrite('Event: 0x' & Hex($lParam) & ' | Pfad: ' & $sPath & @CRLF)
    	Else
    		ConsoleWrite('Event: 0x' & Hex($lParam) & @CRLF)
    	EndIf
    EndFunc   ;==>WM_SHELLCHANGENOTIFY
    
    Func _WinAPI_ShellChangeNotifyRegister64($hWnd, $iMsg, $iEvents, $iSources, $aPaths, $bRecursive = False)
    	Local $iPath = $aPaths, $tagStruct = 'align 1;'
    
    	If IsArray($aPaths) Then
    		If UBound($aPaths, $UBOUND_COLUMNS) Then Return SetError(1, 0, 0)
    	Else
    		Dim $aPaths[1] = [$iPath]
    	EndIf
    	For $i = 0 To UBound($aPaths) - 1
    		If Not _WinAPI_PathIsDirectory($aPaths[$i]) Then Return SetError(2, 0, 0)
    	Next
    	For $i = 0 To UBound($aPaths) - 1
    		$tagStruct &= 'ptr;int;'
    	Next
    	Local $tEntry = DllStructCreate($tagStruct)
    	For $i = 0 To UBound($aPaths) - 1
    		$aPaths[$i] = _WinAPI_ShellILCreateFromPath(_WinAPI_PathSearchAndQualify($aPaths[$i]))
    		DllStructSetData($tEntry, 2 * $i + 1, $aPaths[$i])
    		DllStructSetData($tEntry, 2 * $i + 2, $bRecursive)
    	Next
    	Local $iError = 0
    	Local $aCall = DllCall('shell32.dll', 'ulong', 'SHChangeNotifyRegister', 'hwnd', $hWnd, 'int', $iSources, 'long', $iEvents, _
    			'uint', $iMsg, 'int', UBound($aPaths), 'struct*', $tEntry)
    	If @error Or Not $aCall[0] Then $iError = @error + 10
    
    	For $i = 0 To UBound($aPaths) - 1
    		_WinAPI_CoTaskMemFree($aPaths[$i])
    	Next
    	Return SetError($iError, 0, $aCall[0])
    EndFunc   ;==>_WinAPI_ShellChangeNotifyRegister64
    Alles anzeigen
  • _WinAPI_ShellChangeNotifyRegister 64bit - Absturz

    • Oscar
    • 1. Januar 2025 um 13:03
    Zitat von Velted

    Ich denke, dass sich der Feldindex (@AutoItX64 ? 4 : 2) * $i + 1 von 32- zu 64-Bit nicht ändert.

    Ja, das war falsch!

    Der Feldindex bleibt gleich, auch wenn das damit funktioniert hat (warum versuche ich gerade rauszukriegen).

  • _WinAPI_ShellChangeNotifyRegister 64bit - Absturz

    • Oscar
    • 31. Dezember 2024 um 16:05

    Ich habe das mal auf 64 Bit angepasst:

    AutoIt
    #Region    ;************ Includes ************
    #include <WinAPISysWin.au3>
    #include <WinAPIShellEx.au3>
    #EndRegion ;************ Includes ************
    #AutoIt3Wrapper_UseX64=y ;32bit funktioniert / 64bit funktioniert
    
    Global $aTest[2] = ["C:\_test\", "C:\_test2\"]
    
    DirCreate($aTest[0])
    DirCreate($aTest[1])
    
    OnAutoItExitRegister('OnAutoItExit')
    ConsoleWrite((@AutoItX64 ? 4 : 2) & @CRLF)
    
    Local $hWnd = GUICreate('')
    Local $iMsg = _WinAPI_RegisterWindowMessage('SHELLCHANGENOTIFY')
    GUIRegisterMsg($iMsg, 'WM_SHELLCHANGENOTIFY')
    Global $g_iID = _WinAPI_ShellChangeNotifyRegister64($hWnd, $iMsg, $SHCNE_ALLEVENTS, BitOR($SHCNRF_INTERRUPTLEVEL, $SHCNRF_SHELLLEVEL, $SHCNRF_RECURSIVEINTERRUPT), $aTest, 1)
    If @error Then
    	MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), 'Fehler', 'Das Fenster wurde nicht registriert.')
    	Exit
    EndIf
    
    While 1
    	Sleep(1000)
    WEnd
    
    Func WM_SHELLCHANGENOTIFY($hWnd, $iMsg, $wParam, $lParam)
    	#forceref $hWnd, $iMsg
    	Local $tIDL = DllStructCreate((@AutoItX64 ? 'uint64 Item1; uint64 Item2' : 'dword Item1; dword Item2'), $wParam) ; bei 64 Bit ist das ein QWord (4 Byte)
    	Local $sPath = _WinAPI_ShellGetPathFromIDList(DllStructGetData($tIDL, 'Item1'))
    	If $sPath Then
    		ConsoleWrite('Event: 0x' & Hex($lParam) & ' | Pfad: ' & $sPath & @CRLF)
    	Else
    		ConsoleWrite('Event: 0x' & Hex($lParam) & @CRLF)
    	EndIf
    EndFunc   ;==>WM_SHELLCHANGENOTIFY
    
    Func OnAutoItExit()
    	If $g_iID Then
    		_WinAPI_ShellChangeNotifyDeregister($g_iID)
    	EndIf
    EndFunc   ;==>OnAutoItExit
    
    Func _WinAPI_ShellChangeNotifyRegister64($hWnd, $iMsg, $iEvents, $iSources, $aPaths, $bRecursive = False)
    	Local $iPath = $aPaths, $tagStruct = ''
    
    	If IsArray($aPaths) Then
    		If UBound($aPaths, $UBOUND_COLUMNS) Then Return SetError(1, 0, 0)
    	Else
    		Dim $aPaths[1] = [$iPath]
    	EndIf
    	For $i = 0 To UBound($aPaths) - 1
    		If Not _WinAPI_PathIsDirectory($aPaths[$i]) Then Return SetError(2, 0, 0)
    	Next
    	For $i = 0 To UBound($aPaths) - 1
    		$tagStruct &= 'ptr;int;'
    	Next
    	Local $tEntry = DllStructCreate($tagStruct)
    	For $i = 0 To UBound($aPaths) - 1
    		$aPaths[$i] = _WinAPI_ShellILCreateFromPath(_WinAPI_PathSearchAndQualify($aPaths[$i]))
    		DllStructSetData($tEntry, (@AutoItX64 ? 4 : 2) * $i + 1, $aPaths[$i]) ; bei 64Bit ist PIDLIST_ABSOLUTE = 64 Bit (4 Byte)
    		DllStructSetData($tEntry, (@AutoItX64 ? 4 : 2) * $i + 2, $bRecursive)
    	Next
    
    	Local $iError = 0
    	Local $aCall = DllCall('shell32.dll', 'ulong', 'SHChangeNotifyRegister', 'hwnd', $hWnd, 'int', $iSources, 'long', $iEvents, _
    			'uint', $iMsg, 'int', UBound($aPaths), 'struct*', $tEntry)
    	If @error Or Not $aCall[0] Then $iError = @error + 10
    
    	For $i = 0 To UBound($aPaths) - 1
    		_WinAPI_CoTaskMemFree($aPaths[$i])
    	Next
    
    	Return SetError($iError, 0, $aCall[0])
    EndFunc   ;==>_WinAPI_ShellChangeNotifyRegister
    Alles anzeigen
  • Denkknoten im Umgang mit Timerinit/Timerdiff

    • Oscar
    • 12. Juli 2024 um 13:27

    Man kommt auch ganz ohne Adlib und mit nur einem Timer aus:

    AutoIt
    $iTimer = TimerInit()
    
    $iIntervallmeldung = 60000
    $iDauermeldung = 5000
    HotKeySet('{ESC}', _Exit)
    
    While Sleep(1000)
    	_CheckMeldung()
    WEnd
    
    Func _CheckMeldung()
    	Local Static $iLastMillis = 0, $bMeldung = False
    	Local $iMillis = TimerDiff($iTimer)
    	ConsoleWrite(Int(($iMillis - $iLastMillis) / 1000) & @CRLF)
    	If $iMillis - $iLastMillis > $iIntervallmeldung Then
    		$iLastMillis = $iMillis
    		$bMeldung = True
    	EndIf
    	If $bMeldung Then
    		ConsoleWrite(' Alarm' & @CRLF)
    		If $iMillis - $iLastMillis > $iDauermeldung Then
    			ConsoleWrite(' Alarm aus' & @CRLF)
    			$bMeldung = False
    		EndIf
    	EndIf
    EndFunc
    
    Func _Exit()
    	Exit
    EndFunc
    Alles anzeigen
  • sortieren nach IP

    • Oscar
    • 26. Juni 2024 um 17:19

    Dann will ich auch noch eine Möglichkeit beisteuern (vom Prinzip her wie bei Kanashius, nur mit 32Bit UINT):

    AutoIt
    #include <Array.au3>
    Local $aListViewData[10][4] = [ _
        ["PC-001", "00:1A:2B:3C:4D:5E", "192.168.23.145", "Büro 101"], _
        ["PC-002", "00:2B:3C:4D:5E:6F", "10.0.15.87", "Empfang"], _
        ["PC-003", "00:3C:4D:5E:6F:7G", "172.16.78.209", "Besprechungsraum"], _
        ["PC-004", "00:4D:5E:6F:7G:8H", "192.168.1.3", "Buchhaltung"], _
        ["PC-005", "00:5E:6F:7G:8H:9I", "10.10.55.201", "Marketing"], _
        ["PC-006", "00:6F:7G:8H:9I:0J", "172.20.100.50", "Entwicklung 1"], _
        ["PC-007", "00:7G:8H:9I:0J:1K", "192.168.0.11", "Entwicklung 2"], _
        ["PC-008", "00:8H:9I:0J:1K:2L", "10.1.1.254", "Personalabteilung"], _
        ["PC-009", "00:9I:0J:1K:2L:3M", "172.31.255.1", "Kantine"], _
        ["PC-010", "00:0J:1K:2L:3M:4N", "192.168.100.100", "Serverraum"] _
    ]
    
    For $i = 0 To UBound($aListViewData) - 1
    	$aListViewData[$i][2] = _IPaddrToUInt($aListViewData[$i][2])
    Next
    _ArraySort($aListViewData, 1, 0, 0, 2)
    For $i = 0 To UBound($aListViewData) - 1
    	$aListViewData[$i][2] = _UIntToIPaddr($aListViewData[$i][2])
    Next
    _ArrayDisplay($aListViewData)
    
    Func _IPaddrToUInt($sIP)
    	Local $tAddr = DllStructCreate('uint IP')
    	Local $aTmp = StringSplit($sIP, '.', 2)
    	Local $iAddr = BitOR(BitShift(Int($aTmp[0]), -24), BitShift(Int($aTmp[1]), -16), BitShift(Int($aTmp[2]), -8), Int($aTmp[3]))
    	$tAddr.IP = $iAddr
    	Return $tAddr.IP
    EndFunc
    
    Func _UIntToIPaddr($iAddr)
    	Local $tAddr = DllStructCreate('uint IP')
    	$tAddr.IP = $iAddr
    	Local $tIP = DllStructCreate('byte D;byte C;byte B;byte A', DllStructGetPtr($tAddr))
    	Return $tIP.A & '.' & $tIP.B & '.' & $tIP.C & '.' & $tIP.D
    EndFunc
    Alles anzeigen

    Wenn man die Daten gleich im UINT-Format speichert, braucht man sie nur bei der Anzeige zurückwandeln.

  • Combobox mit mehreren Spalten

    • Oscar
    • 25. Juni 2024 um 16:32
    Zitat von atomas

    Besten Dank, ich werde mal schauen ob ich das erweitern kann, so wie ich das möchte.

    Gern geschehen!

    Ja, es kommt noch darauf an, was Du mit dem Listview vor hast. Wenn es nicht nur eine Auswahlbox sein soll, muss man da evtl. noch zusätzliche GUI-Elemente ein-/ausblenden.

    Wenn Du Hilfe brauchst, sag Bescheid!

  • RichEdit Hyperlinks

    • Oscar
    • 24. Juni 2024 um 17:23

    Mit dem Beispiel aus der Hilfe funktioniert es:

    AutoIt
    #include <GuiRichEdit.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WinAPIShellEx.au3>
    #include <MsgBoxConstants.au3>
    
    
    Global $hWh = GUICreate("RichEdit Link Test", 600, 400)
    Global $hRichEdit = _ChatBoxCreate($hWh, 10, 10, 580, 380)
    GUISetState()
    
    $data = "Hier ist ein Link: https://www.autoit.de" & @CRLF
    _ChatBoxAdd($hRichEdit, $data)
    
    While 1
    	$nMsg = GUIGetMsg()
    	Switch $nMsg
    		Case $GUI_EVENT_CLOSE
    			ExitLoop
    	EndSwitch
    	Sleep(10)
    WEnd
    
    _GUICtrlRichEdit_Destroy($hRichEdit)
    GUIDelete($hWh)
    Exit
    
    Func _ChatBoxCreate($gui, $x = 0, $y = 0, $w = 100, $h = 100)
    	$hRichEdit = _GUICtrlRichEdit_Create($gui, "", $x, $y, $w, $h, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
    	_GUICtrlRichEdit_AutoDetectURL($hRichEdit, True)
    	_GUICtrlRichEdit_SetEventMask($hRichEdit, $ENM_LINK) ; Setze das Ereignismask, um Link-Benachrichtigungen einzuschließen
    	GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    	Return $hRichEdit
    EndFunc   ;==>_ChatBoxCreate
    
    Func _ChatBoxAdd($box, $txt)
    	_GUICtrlRichEdit_AppendText($box, $txt)
    EndFunc   ;==>_ChatBoxAdd
    
    Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
    	#forceref $hWnd, $iMsg, $wParam, $lParam
    	; Struktur für NMHDR
    	Local $tNMHDR = DllStructCreate("struct;hwnd hWndFrom;uint_ptr idFrom;int code;endstruct", $lParam)
    	Local $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    	Local $iCode = DllStructGetData($tNMHDR, "code")
    	If $hWndFrom = $hRichEdit And $iCode = $EN_LINK Then
    		$tMsgFilter = DllStructCreate($tagMSGFILTER, $lParam)
    		If DllStructGetData($tMsgFilter, "msg") = $WM_LBUTTONUP Then
    			$tEnLink = DllStructCreate($tagENLINK, $lParam)
    			$iCpMin = DllStructGetData($tEnLink, "cpMin")
    			$iCpMax = DllStructGetData($tEnLink, "cpMax")
    			ConsoleWrite("Hyperlink: " & _GUICtrlRichEdit_GetTextInRange($hRichEdit, $iCpMin, $iCpMax) & @CRLF)
    		EndIf
    	EndIf
    EndFunc   ;==>WM_NOTIFY
    Alles anzeigen
  • Combobox mit mehreren Spalten

    • Oscar
    • 23. Juni 2024 um 14:44

    Ich hatte gerade mal Lust sowas zu programmieren:

    AutoIt
    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <StructureConstants.au3>
    #include <WindowsConstants.au3>
    
    Opt('GUIOnEventMode', 1)
    
    Global $g_bShowLV = False
    
    Global $g_hGui = GUICreate('test', 800, 480)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui')
    Global $g_idCombo = GUICtrlCreateCombo('', 10, 10, 100, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL, $WS_VSCROLL))
    
    Global $g_idLV = GUICtrlCreateListView('Hersteller|Artikel|Preis|Bestand', 10, 33, 780, 440)
    GUICtrlCreateListViewItem('AMD|AMD Ryzen 5|128.00|328', $g_idLV)
    GUICtrlCreateListViewItem('AMD|AMD Ryzen 7|198.00|58', $g_idLV)
    GUICtrlCreateListViewItem('Intel|Intel Celeron G5900|211.00|167', $g_idLV)
    GUICtrlSetState($g_idLV, $GUI_HIDE)
    
    GUISetState(@SW_SHOW, $g_hGui)
    GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')
    GUIRegisterMsg($WM_NOTIFY, '_WM_NOTIFY')
    
    WinWaitClose($g_hGui)
    
    Func _CloseGui()
    	GUIDelete($g_hGui)
    EndFunc   ;==>_CloseGui
    
    Func _WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
    	#forceref $hWnd, $iMsg, $wParam
    	Local $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    	Local $hWndFrom = HWnd(DllStructGetData($tNMHDR, 'hWndFrom'))
    	Local $iCode = DllStructGetData($tNMHDR, 'Code')
    	Local $tItemActivate, $sItem
    	Switch $hWndFrom
    		Case GUICtrlGetHandle($g_idLV)
    			Switch $iCode
    				Case $NM_CLICK
    					$tItemActivate = DllStructCreate($tagNMITEMACTIVATE, $lParam)
    					$sItem = _GUICtrlListView_GetItemTextString($g_idLV, $tItemActivate.index)
    					GUICtrlSetState($g_idLV, BitOR($GUI_HIDE, $GUI_FOCUS))
    					$g_bShowLV = False
    					ConsoleWrite('Listview CLICK Index:' & $tItemActivate.index  & ' "' & $sItem & '"' & @CRLF)
    			EndSwitch
    	EndSwitch
    	Return $GUI_RUNDEFMSG
    EndFunc
    
    Func _WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
    	#forceref $hWnd, $iMsg, $lParam
    	Local $iIDFrom = BitAND($wParam, 0xFFFF)
    	Local $iCode = BitShift($wParam, 16)
    	Switch $iIDFrom
    		Case $g_idCombo
    			Switch $iCode
    				Case $CBN_DROPDOWN
    					GUICtrlSetState($g_idLV, $g_bShowLV ? BitOR($GUI_HIDE, $GUI_FOCUS) : BitOR($GUI_SHOW, $GUI_FOCUS))
    					ConsoleWrite('Combo DROPDOWN, LV-State:' & $g_bShowLV & @CRLF)
    					$g_bShowLV = Not $g_bShowLV
    			EndSwitch
    	EndSwitch
    	Return $GUI_RUNDEFMSG
    EndFunc   ;==>_WM_COMMAND
    Alles anzeigen

    Wobei ich jetzt doch kein Child-Window benutzt habe, sondern das Listview nur anhand des Status der Combobox angezeigt/versteckt habe.

  • Combobox mit mehreren Spalten

    • Oscar
    • 21. Juni 2024 um 18:29

    Sag Bescheid, wenn Du Hilfe brauchst!

  • Combobox mit mehreren Spalten

    • Oscar
    • 21. Juni 2024 um 11:58
    Zitat von atomas

    In der Combobox steht dann z. B. Intel und im Feld daneben steht die CPU, kann ich diese Anzeige auch mit

    Autoit realisieren?

    Als Combobox nicht, aber als Listview in einem Child-Window wäre sowas möglich.

  • Label ausdrucken

    • Oscar
    • 20. April 2024 um 13:44

    Das Label an sich ist ja eher simpel aufgebaut. Das kann man per GDI+ schnell mal dynamisch erstellen.

    Mit dem ausdrucken ist es dann aufwendiger. Ob es da in AutoIt eine UDF gibt, weiß ich jetzt nicht. Ansonsten z.B. IrfanView fernsteuern.

  • Community Projekt: Teil 3 - Onboarding, Erklärvideos (ggf. Videocalls)

    • Oscar
    • 2. Februar 2024 um 08:24

    [verschoben]

  • Community Projekt: Teil 1 - Interesse an einem gemeinsamen größeren (Software)Projekt?

    • Oscar
    • 30. Januar 2024 um 11:48

    Ich hab's mal verschoben.

  • ASCII-Art

    • Oscar
    • 27. Januar 2024 um 15:52
    Zitat von Musashi

    mit einem Papierlocher ein halbes Loch auf der anderen Seite einzustanzen. Dann konnte man sie doppelseitig verwenden.

    Es gab sogar "Diskettenlocher" zu kaufen, die genau an der richtigen Stelle ein eckiges Loch stanzten.

    Die eigentlich einseitigen Disketten waren auf dem C64 auf jeden Fall auch beidseitig nutzbar. Habe ich damals dutzendweise gemacht.

  • Eigene Verschlüsselungsroutine

    • Oscar
    • 11. Januar 2024 um 18:03
    Zitat von Alina

    Das geht nicht. Dann würde ich ja meine eigene Ver- und Entschlüsselungsroutine verraten.

    Was bringt dann Deine eigene Routine, wenn Du das AutoIt-Script niemanden geben kannst?

    Nur, um eigene Texte/Dateien zu verschlüsseln?

    Und überhaupt: "Security by obscurity" ist ein ganz schlechter Ansatz für eine solche Routine.

  • "?" in Ordner- bzw. Dateinamen

    • Oscar
    • 14. Dezember 2023 um 16:44
    Zitat von entsel

    Fazit: Möglicherweise ist das, was in den JPG-Daten wie ein Datum aussieht nicht zwingend nur ein Datum (da könnte noch was dran hängen?).

    Wenn das eine Frage ist, dann poste bitte Dein Script (plus die von Dir verwendete UDF "_GetExtProperty"), sowie eine JPG-Datei, bei der ein "falsches" Datum zurückgegeben wird.

    Eventuell haben wir dann alle etwas von diesem Thread.

  • Den Zeitpunkt des letzten Herunterfahrens auslesen

    • Oscar
    • 7. Dezember 2023 um 16:47

    Hier nochmal in einer Funktion, die Datum und Zeit in den DateTime-String umwandelt, sodass man das gleich an _DateAdd(), _DateDiff() usw. übergeben kann.

    AutoIt
    #include <EventLog.au3>
    #include <Array.au3>
    
    Global $hEventLog = _EventLog__Open("", "System")
    Global $i = 0, $aEvent
    Do
    	$aEvent = _EventLog__Read($hEventLog, True, False, $i)
    	If $aEvent[0] = False Then ExitLoop
    	If $aEvent[6] = 6006 Then ExitLoop
    	$i += 1
    Until 0
    _EventLog__Close($hEventLog)
    Global $sDateTime = _DateAndTimeToDateTime($aEvent[2], $aEvent[3])
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sDateTime = ' & $sDateTime & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    
    Func _DateAndTimeToDateTime($sDate, $sTime)
    	Local $sD = StringRegExpReplace($sDate, '(\d{2})/(\d{2})/(\d{4})', ' $3/$1/$2')
    	Local $aT = StringRegExp($sTime, '(.{2})[: ]', 3)
    	$aT[0] += (StringRight($sTime, 2) = 'PM') ? 12 : 0
    	If $aT[0] = 12 Then $aT[0] = 0
    	Return StringFormat('%s %02i:%02i:%02i', $sD, $aT[0], $aT[1], $aT[2])
    EndFunc
    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™