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

Beiträge von Bitnugger

  • UDF _FolderIsWriteable

    • Bitnugger
    • 4. Juli 2017 um 11:52

    Eine Alternative wäre noch:

    AutoIt
    #cs
    	_WinAPI_GetFileAttributes
    	Global Const $FILE_ATTRIBUTE_READONLY            = 0x00000001
    	Global Const $FILE_ATTRIBUTE_HIDDEN              = 0x00000002
    	Global Const $FILE_ATTRIBUTE_SYSTEM              = 0x00000004
    	Global Const $FILE_ATTRIBUTE_DIRECTORY           = 0x00000010
    	Global Const $FILE_ATTRIBUTE_ARCHIVE             = 0x00000020
    	Global Const $FILE_ATTRIBUTE_DEVICE              = 0x00000040
    	Global Const $FILE_ATTRIBUTE_NORMAL              = 0x00000080
    	Global Const $FILE_ATTRIBUTE_TEMPORARY           = 0x00000100
    	Global Const $FILE_ATTRIBUTE_SPARSE_FILE         = 0x00000200
    	Global Const $FILE_ATTRIBUTE_REPARSE_POINT       = 0x00000400
    	Global Const $FILE_ATTRIBUTE_COMPRESSED          = 0x00000800
    	Global Const $FILE_ATTRIBUTE_OFFLINE             = 0x00001000
    	Global Const $FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000
    	Global Const $FILE_ATTRIBUTE_ENCRYPTED           = 0x00004000
    
    
    	_WinAPI_SetFileAttributes
    	The file attributes to set for the file. This parameter can be one or more of the following values.
    	$FILE_ATTRIBUTE_READONLY
    	$FILE_ATTRIBUTE_HIDDEN
    	$FILE_ATTRIBUTE_SYSTEM
    	$FILE_ATTRIBUTE_ARCHIVE
    	$FILE_ATTRIBUTE_NORMAL
    	$FILE_ATTRIBUTE_TEMPORARY
    	$FILE_ATTRIBUTE_OFFLINE
    	$FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
    
    
    	Not all attributes are supported by this function. For more information, see MSDN library.
    #ce
    
    
    #include <WinAPIFiles.au3>
    
    
    _PrintAttrib('c:\Users\Default\')
    _PrintAttrib('c:\Users\Default User\')
    _PrintAttrib('c:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Accessibility\Magnify.lnk')
    _PrintAttrib('c:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Accessibility\Radar.lnk')
    
    
    Func _GetAttrib($sPath)
    	Local $aAttrib = _WinAPI_GetFileAttributes($sPath)
    
    
    	Return SetError(@error, (BitAND($aAttrib, 0x00000010) > 0), (BitAND($aAttrib, 0x00000001) > 0))
    EndFunc
    
    
    Func _PrintAttrib($sPath)
    	Local $aAttrib = _GetAttrib($sPath)
    	Select
    		Case @error = True
    			ConsoleWrite('Error: Der Pfad existiert nicht!' & @CRLF)
    		Case @extended = True
    			$sPath = 'Das Verzeichnis ist '
    		Case Else
    			$sPath = 'Die Datei ist '
    	EndSelect
    	ConsoleWrite($sPath & (($aAttrib = True) ? '':'nicht ') & 'schreibgeschützt.' & @CRLF)
    EndFunc
    Alles anzeigen
  • Verständnisfrage - RAMVerbrauch

    • Bitnugger
    • 3. Juli 2017 um 03:22
    Zitat von olfibits

    @Sonderbaar als AutoIt3-Datei oder als EXE? Falls EXE - UPX-komprimiert? Falls nein,

    Er schreibt doch: "Jetzt ist mir aufgefallen, dass Autoit nach (ca. 2 Stunden) ..."

  • Namen der Tables auslesen

    • Bitnugger
    • 30. Juni 2017 um 18:21
    Example_01
    AutoIt
    ;-- TIME_STAMP   2017-06-30 18:20:06   v 0.1
    
    
    #include <SQLite.au3>
    
    
    Local $aResult, $iRows, $iColumns, $iRval
    _SQLite_Startup()
    ConsoleWrite("_SQLite_LibVersion=" & _SQLite_LibVersion() & @CRLF & @CRLF)
    _SQLite_Open()
    _SQLite_Exec(-1, "Create table tblTest (a,b int,c single not null);" & _
            "Insert into tblTest values ('1',2,3);" & _
            "Insert into tblTest values (Null,5,6);")
    
    
    Local $iRval = _SQLite_GetTable2d(-1, "SELECT * FROM sqlite_master", $aResult, $iRows, $iColumns)
    
    
    ConsoleWrite('$iRows    = ' & $iRows & @CRLF)
    ConsoleWrite('$iColumns = ' & $iColumns & @CRLF)
    
    
    If $iRval = $SQLITE_OK Then
    	_SQLite_Display2DResult($aResult)
    
    
    	; Output:
    	; type   name     tbl_name  rootpage  sql
    	; table  tblTest  tblTest   2         CREATE TABLE tblTest (a,b int,c single not null)
    
    
    	_ArrayDisplay($aResult, '$aResult')
    Else
    	MsgBox($MB_SYSTEMMODAL, "SQLite Error: " & $iRval, _SQLite_ErrMsg())
    EndIf
    
    
    _SQLite_Exec(-1, "DROP TABLE tblTest;") ; Remove the table
    
    
    _SQLite_Close()
    _SQLite_Shutdown()
    Alles anzeigen
    Example_02
    AutoIt
    ;-- TIME_STAMP   2017-06-30 18:41:53   v 0.1
    
    
    #include <SQLite.au3>
    
    
    Global $aResult, $iRows, $iColumns, $iRval
    _SQLite_Startup()
    ConsoleWrite("_SQLite_LibVersion=" & _SQLite_LibVersion() & @CRLF & @CRLF)
    _SQLite_Open()
    _SQLite_Exec(-1, "Create table tblTest1 (a,b int,c single not null);" & _
            "Insert into tblTest1 values ('1',2,3);" & _
            "Insert into tblTest1 values (Null,5,6);")
    
    
    _SQLite_Exec(-1, "Create table tblTest2 (a,b int,c single not null);" & _
            "Insert into tblTest2 values ('4',5,6);" & _
            "Insert into tblTest2 values (Null,7,8);")
    
    
    _SQLite_Exec(-1, "Create table tblTest3 (a,b int,c single not null);" & _
            "Insert into tblTest3 values ('9','a','b');" & _
            "Insert into tblTest3 values (Null,'c','d');")
    
    
    Local $iRval = _SQLite_GetTable2d(-1, "SELECT name FROM sqlite_master", $aResult, $iRows, $iColumns)
    
    
    ConsoleWrite('$iRows    = ' & $iRows & @CRLF)
    ConsoleWrite('$iColumns = ' & $iColumns & @CRLF & @CRLF)
    
    
    If $iRval = $SQLITE_OK Then
    	_SQLite_Display2DResult($aResult)
    
    
    	; Output:
    	; name
    	; tblTest
    	; tblTest2
    	; tblTest3
    	_ArrayDisplay($aResult, '$aResult')
    Else
    	MsgBox($MB_SYSTEMMODAL, "SQLite Error: " & $iRval, _SQLite_ErrMsg())
    EndIf
    
    
    _SQLite_Exec(-1, "DROP TABLE tblTest1;") ; Remove the table
    _SQLite_Exec(-1, "DROP TABLE tblTest2;") ; Remove the table
    _SQLite_Exec(-1, "DROP TABLE tblTest3;") ; Remove the table
    
    
    _SQLite_Close()
    _SQLite_Shutdown()
    Alles anzeigen
  • Local $hCtrl = GUICtrlGetHandle($idDummy)

    • Bitnugger
    • 30. Juni 2017 um 16:49

    Ahhsooo... ok, wieder was gelernt... thx ;)

  • Local $hCtrl = GUICtrlGetHandle($idDummy)

    • Bitnugger
    • 30. Juni 2017 um 16:42
    Zitat von alpines

    Wozu willst du denn das Handle haben?

    Ich habe mir mir mit _WinAPI_EnumChildWindows() die Controls von einer fremden GUI geholt... und da ist mir aufgefallen, dass die Dummys in dieser Liste nicht auffindbar sind.

    Allem Anschein nach kann ich kein Handle von einem Dummy-Control bekommen, weil es nur ein simuliertes (internes) Control ist?!

  • Local $hCtrl = GUICtrlGetHandle($idDummy)

    • Bitnugger
    • 30. Juni 2017 um 16:14

    Ich habe soeben festgestellt, dass ich bei einem Dummy-Control kein Handle bekomme... was soll ich denn nun davon halten?

    AutoIt
    _Test()
    
    
    Func _Test()
    	Local $hGUI = GUICreate("Dummy", 300, 100)
    	GUISetState(@SW_SHOW, $hGUI)
    
    	Local $idDummy = GUICtrlCreateDummy()
    	Local $hCtrl1 = GUICtrlGetHandle($idDummy)
    	Local $hCtrl2 = ControlGetHandle($hGUI, '', $idDummy)
    
    	ConsoleWrite('GUICtrlGetHandle: ' & $hCtrl1 & @CRLF)
    	ConsoleWrite('ControlGetHandle: ' & $hCtrl2 & @CRLF)
    EndFunc
    Alles anzeigen


    GUICtrlGetHandle: 0
    ControlGetHandle: 0x00000000

  • ScreenCaptures werden als schwarzes Bild abgespeichert?

    • Bitnugger
    • 30. Juni 2017 um 13:18
    Zitat von Simon09

    Ich hatte schon überlegt ob es damit zusammenhängen kann dass sich das System nach X Minuten sperrt oder der Bildschirmschoner angeht, aber zum Teil taucht der Fehler auch schon ca 5 Minuten nach einem Neustart auf.

    Dann teste mal, ob der Fehler auch auftritt, wenn du dein Script als "Administrator" startest...

  • ScreenCaptures werden als schwarzes Bild abgespeichert?

    • Bitnugger
    • 30. Juni 2017 um 11:22

    Da du kein Script zur Verfügung gestellt hast, in dem man den Fehler evtl. finden könnte, hier ein allgemeiner Tipp...

    Zitat von Simon09

    Leider habe ich ausgerechnet in den Momenten in denen das Script in einen Fehler rennt weil bestimmte Fenster nicht erscheinen dann auch ein komplett schwarzes Bild als Screenshot-Datei...

    Starte mit deinem Script ein Debug-Script, dass kontinuierlich überprüft, ob dein Script noch läuft... wenn ein Fehler auftritt, beendest du dein Script... und falls es beendet wurde, erstellest du mit dem Debug-Script einen Screenshot... wenn es funktioniert, weißt du, der Fehler ist in deinem Script, anderfalls liegt es daran, weil das System gesperrt wurde.

  • Schredder

    • Bitnugger
    • 30. Juni 2017 um 10:43
    Zitat von ICE Tec 82

    #AutoIt3Wrapper_Icon=D:\@HomeDrive\Meine Apps\tools\gfx\Schredder.ico

    Das kann unmöglich funktionieren!
    Rein theoretisch... wenn man den Pfad auflöst, wäre das Icon bei mir hier zu finden: "D:\C:\Meine Apps\tools\gfx\Schredder.ico"
    Praktisch kann das Icon aber niemals gefunden werden, weil dieser Pfad unmöglich exitieren kann!
    Zudem sind in Direktiven und Include-Anweisungen keine Variablen oder Makros erlaubt, sondern nur absolute Pfade!
    Richtig wäre - wenn sich das Icon im @ScriptDir befindet: #AutoIt3Wrapper_Icon=Schredder.ico

    Wenn du dein Script an andere User weitergeben möchtest, solltest das Icon mit in deinem "Angebot" enthalten sein... denn die User hier im Forum können garantiert nicht auf dein HomeDrive zugreifen, um sich dort das Icon zu holen. :D

    Im Anhang findest du ein ZIP-Archiv mit einer geänderten (kürzeren) Version... in der auch ein Programm-Icon enthalten ist. ;)

    PS: Wenn du es so wie ich in einem ZIP-Archiv anbietest, kann der User sich das Paket mit nur einen Download holen und hat auch alle Includes an benötigter Stelle.

    Zudem solltest du größere Scripte in einen Spoiler packen. Der Mehrwert dabei ist, dass man sich dein Script ansehen kann, und bei Bedarf den Spoiler einfach wieder schließen kann.

    Hier ein Beispiel:

    Ich bin ein Spoiler


    Zeile 1
    Zeile 2
    Zeile 3

    Zeile ...

    Dateien

    Schredder.zip 902,81 kB – 232 Downloads
  • Verständnisfrage - RAMVerbrauch

    • Bitnugger
    • 30. Juni 2017 um 06:44

    Du musst die Abfragen aber auch wieder freigeben, nachdem du das Ergebnis bekommen hast...

    Hier in diesem Beispiel kannst du sehen, wie ich es mache...
    Namen der Tables auslesen

  • Programm mit vielen AdlibRegister() aufrufen / Performance / NICHT Multithreading/Parallelprozessing

    • Bitnugger
    • 30. Juni 2017 um 06:33

    Bei mir auf Windows 10 X64 läuft das Script auch tadellos. Habe lediglich Zeile 22 ein wenig geändert...
    ToolTip('Count = ' & $i & '/ ' & '9999')

    Da gibt es aber auch eine UDF für... um Adlib mit Parametern aufrufen zu können... die dafür auch die _Timer... Funktionen benutzt.


    _AdlibEnhance

  • Namen der Tables auslesen

    • Bitnugger
    • 30. Juni 2017 um 05:07

    Zumindest bei MySQL geht es auch einfach mit "SHOW TABLES".

    Hier mal ein Beispiel:

    AutoIt
    ;-- TIME_STAMP   2017-06-30 06:02:46   v 0.1
    
    
    #Region    ;************ Includes ************
    #Include <Array.au3>
    #include <mysql.au3>
    #EndRegion ;************ Includes ************
    
    
    ; Hier die Daten anpassen!
    Global $sUser = 'root', $sPass = 'Geheim_0815!'
    
    
    ; Wenn sich die libmysql.dll im selben Verzeichnis befindet, wie das Script.
    ;~ If _MySQL_InitLibrary() Then Exit 11 + MsgBox(16, 'Kodi', 'Error: _MySQL_InitLibrary()')
    
    
    ; Wenn sich die libmysql.dll nicht im selben Verzeichnis befindet.
    If _MySQL_InitLibrary('f:\_Archive\_Programmieren\AutoIt3\UDFs\MySQL\libmysql.dll') Then Exit 11 + MsgBox(16, 'Kodi', 'Error: _MySQL_InitLibrary()')
    
    
    ; Bei mir habe ich ein spezielles Verzeichnis für alle gemeinsam benutzen Dateien angelegt und den Pfad in einer Umgebungsvariablen abgelegt.
    Global Const $sShared_Files = EnvGet('AU3_Sharred_Files')
    ; --> $sShared_Files = 'f:\_Scripts\AutoIt\Shared files\' (libmysql.dll, libmySQL_x64.dll, libMySQLdll.au3, my_alloc.au3, MySQL.au3, mysql_com.au3, MySQL_errmsg.au3, mysql_version.au3)
    ;~ If _MySQL_InitLibrary($sShared_Files & 'libmysql.dll') Then Exit 11 + MsgBox(16, 'Kodi', 'Error: _MySQL_InitLibrary()')
    
    
    Global $MysqlConn = _MySQL_Init()
    If @error Then Exit 22 + MsgBox(16, 'Kodi', 'Error: _MySQL_Init()')
    If _MySQL_Real_Connect($MysqlConn, "localhost", $sUser, $sPass, "xbmc_video107") = 0 Then _
        Exit 33 + MsgBox(16, 'Connection Error', _MySQL_Error($MysqlConn))
    
    
    ; ****************************
    Global $sQuery = "SHOW TABLES"
    ; ****************************
    
    
    Global $aTables = _GetQuery($sQuery)
    
    
    _ArrayDisplay($aTables, 'Tables from Kodi DB "xbmc_video107"')
    
    
    ; do anything...
    
    
    Exit
    
    
    Func _GetQuery($sQuery)
        _MySQL_Real_Query($MysqlConn, $sQuery)
        Local $vRes = _MySQL_Store_Result($MysqlConn)
        Local $aArray = _MySQL_Fetch_Result_StringArray($vRes)
    
    
        ; Abfrage wieder freigeben
        _MySQL_Free_Result($vRes)
    
    
        Return $aArray
    EndFunc
    
    
    Func _Exit()
        ; Verbindung beenden
        _MySQL_Close($MysqlConn)
    
    
        ; MYSQL beenden
        _MySQL_EndLibrary()
    EndFunc
    Alles anzeigen
  • Ping funktioniert in AutoIt nicht zuverlässig. In der CMD aber problemlos.

    • Bitnugger
    • 29. Juni 2017 um 10:28

    C:\pinz.exe znil.net -t

    PingZ-Statistik für...

    Da kann sich wohl jemand nicht entscheiden, wie er sein Tool benennen soll... :P

  • Text aus SAP auslesen aber falscher Zeichensatz

    • Bitnugger
    • 29. Juni 2017 um 10:13
    Zitat von Musashi

    Ich wollte lediglich, wie Du auch angemerkt hast, den Blick des Users in eine gewisse Richtung lenken.

    Genau... das primäre Problem beim Umgang mit verschiedenen Codepages ist nämlich, zu erkennen, mit welcher wir es gerade zu tun haben... in unserem Kontext also, ob der Text als ANSI oder OEM vorliegt, und desweiteren gilt es, zu bestimmen, wo die Ausgabe hingehen soll... denn dementsprechend muss der Text, insofern er Umlaute enthält, nach ANSI oder OEM konvertiert werden. Will man noch einen drauf setzen, sind nicht nur die Umlaute zu überprüfen, sondern auch viele (nicht alle) Zeichen, die größer als Chr(127) bzw. Chr(0x7F) sind.

    Hier noch ein sehr lesenswerter Wiki-Link zum Thema Codepage 850.

  • Text aus SAP auslesen aber falscher Zeichensatz

    • Bitnugger
    • 29. Juni 2017 um 07:23
    Zitat von Schumi

    Die Einstellungen in SAP haben leider doch nicht funktioniert.

    ...leider doch nicht den gewünschten Erfolg gebracht.

    Den Inhalt der String-Variable mit StringToASCIIArray() in ein Array zu schieben, um sie dann im Anschluss direkt wieder mit StringFromASCIIArray() zu befüllen, nur um die Umlaue zu konvertieren, ist eine sehr schlechte Idee!!!

    Vom Prinzip her hat dir @Musashi schon den richtigen Lösungsweg aufgezeigt... aber das ist sicher keine Lösung, die in allen Fällen funktioniert.

    Seine Funktion wäre richtig, wenn du z. B. mit deinem AutoIt-Script mit der Funktion Run() die CMD.exe startest und darin dann den Dir-Befehl ausführst, die Ausgabe dann mit StdoutRead() einliest, um sie in der SciTE-Console auszugeben.
    Die Ausgabe der CMD ist im Normalfall OEM... (Codepage 850) - SciTE will aber ANSI (Codepage 1251) haben!


    Ich habe dir mal eine kleine Demo geschrieben und darin auch einige Funktionen eingebaut, die für das Handling mit Dateien sehr hilfreich sind... du solltest dir vor allem aber die Funktion _CmdWrite() sehr genau anschauen! :D

    Dateien

    FileHandling.zip 630,11 kB – 361 Downloads
  • Tray Recycler

    • Bitnugger
    • 28. Juni 2017 um 16:47

    Zeile 2: Das Icon kann nicht gefunden werden!
    Zeile 24: $hdd ist ein Array, in Zeile 109 und 118 verwendest du dieses aber als String-Variable... das kann so natürlich NICHT funktionieren.
    Zeile 47 und 58... so kurz hintereinander dieselbe Funktion ausfühen?
    Diese Funktion mit in die While-Schleife einzubauen, sollte mit 3x Lebenslänglich bestraft werden! :P
    In der While-Schleife wäre ein Switch...Case...EndSwitch viel praktischer!

    Die Funktion tempdir() ist grau...
    Zeile 140 z. B.:
    DirRemove(@UserProfileDir & "\AppData\Local\Temp\" & $file, 1)
    DirRemove(@LocalAppDataDir & "\Temp\" & $file, 1)

    Hehe... und du kannst in ..\TEMP\.. doch nicht einfach auf Teufelkommaraus alles löschen... das hat wenig bis gar keinen Mehrwert und mich würde es auch absolut nicht wundern, wenn sich dein Windows in absehbarer Zeit verabschiedet!

    Viele Dinge erledigst du wie ein "Profi" mit DllCall... obwohl du noch mit den Grundlagen zu kämpfen hast. Wenn du z. B. mit CreateSolidBrush einen Brush erzeugst, musst du ihn später auch irgendwann wieder entsorgen.

    Übrigens... nur die *.EXE in das Archiv zu packen, ist auch keine feine Art!!!

    Na, egal... ist ja nicht mein PC... ich habe es mal eben ein wenig umgeschrieben... damit du sehen kannst, wie ich das von der Struktur her in etwa angehen würde... allerdings habe ich das Script bei mir NICHT getestet und zudem verwende ich dafür eh den CCleaner.

    Die Benutzung des Scripts ohne vorherige Überprüfung geschieht also auf eigene Gefahr! :D

    Tray Recycler
    AutoIt
    ;-- TIME_STAMP   2017-06-28 16:25:34   v 0.1
    
    
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=D:\Meine Apps\tools\gfx\trash.ico
    #AutoIt3Wrapper_Outfile=TrayRecycler.exe
    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_Res_Comment=Tray Recycler
    #AutoIt3Wrapper_Res_Description=Tray Recycler
    #AutoIt3Wrapper_Res_Fileversion=1.0.0.1
    #AutoIt3Wrapper_Res_LegalCopyright=© ICE Tec. All rights reserved.
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Res_Field=CompanyName|ICE Tec
    #AutoIt3Wrapper_Res_Field=OriginalFileName|TrayRecycler.exe
    #AutoIt3Wrapper_Res_Field=ProductName|Tray Recycler
    #AutoIt3Wrapper_Res_Field=ProductVersion|1.0.0.1
    #AutoIt3Wrapper_Run_Tidy=y
    #AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7 ; Uncomment this line to Au3Check!
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    
    
    #Region ;************ Includes ************
    #include <WinAPI.au3>
    #include <TrayConstants.au3>
    #include <File.au3>
    ;~ #include <Constants.au3>;~~~
    #EndRegion ;************ Includes ************
    
    
    #Region ;************ Global ************
    Opt('MustDeclareVars', 1)
    Opt("TrayMenuMode", 1)
    
    
    Global $tagSHQUERYRBINFO = DllStructCreate("align 1;int;int64;int64")
    DllStructSetData($tagSHQUERYRBINFO, 1, DllStructGetSize($tagSHQUERYRBINFO))
    
    
    Global Const $MIM_APPLYTOSUBMENUS = 0x80000000, $MIM_BACKGROUND = 0x00000002
    ; https://autoit.de/onlinehilfe/functions/FileRecycleEmpty.htm
    Global Const $g_sRegRunKey = "HKLM\Software\Microsoft\Windows\CurrentVersion\Run", $g_sRegRunValue = "Tray Recycler"
    Global $g_idTrayAboutItem, $g_idTrayOptionMenu, $g_idTrayAutoRun, $g_idTrayDiskCleanMenu, $g_idTrayCleanMgr, $g_idTrayCleanTempDirItem, $g_idTrayRecycleMenu, $g_idTrayOpenRecycleItem, $g_idTrayRecyclerCleanItem, $g_idTrayExitItem
    #EndRegion ;************ Global ************
    
    
    _Main()
    
    
    Func _Main()
    	#Region ;************ TrayMenu ************
    	Local $iStart, $iColor = 0x0099FF, $hBrush = _CreateSolidBrush($iColor) ; BGR Farbwert
    
    
    	$g_idTrayAboutItem = TrayCreateItem("Tray Recycler")
    	TrayCreateItem("")
    	$g_idTrayOptionMenu = TrayCreateMenu("Optionen")
    	$g_idTrayAutoRun = TrayCreateItem("Mit Windows starten", $g_idTrayOptionMenu)
    	TrayCreateItem("")
    	$g_idTrayDiskCleanMenu = TrayCreateMenu("Datenträger aufräumen")
    	$g_idTrayCleanMgr = TrayCreateItem("Datenträger bereinigen", $g_idTrayDiskCleanMenu)
    	TrayCreateItem("", $g_idTrayDiskCleanMenu)
    	$g_idTrayCleanTempDirItem = TrayCreateItem("Säubere Temp Ordner", $g_idTrayDiskCleanMenu)
    	TrayCreateItem("")
    	$g_idTrayRecycleMenu = TrayCreateMenu("Papierkorb")
    	$g_idTrayOpenRecycleItem = TrayCreateItem("Papierkorb öffnen", $g_idTrayRecycleMenu)
    	TrayCreateItem("", $g_idTrayRecycleMenu)
    	$g_idTrayRecyclerCleanItem = TrayCreateItem("Papierkorb leeren", $g_idTrayRecycleMenu)
    	TrayCreateItem("")
    	$g_idTrayExitItem = TrayCreateItem("Beenden")
    
    
    	; '0' bedeutet, dass das Tray Kontext-Menü dies selbst regelt
    	Local $aMenus = [0, $g_idTrayOptionMenu, $g_idTrayDiskCleanMenu, $g_idTrayRecycleMenu]
    	For $i = 0 To UBound($aMenus) - 1 Step 1
    		_SetMenuColor($aMenus[$i], $hBrush)
    	Next
    	TraySetClick(2)
    	TraySetToolTip("Tray Recycler")
    	TraySetState($TRAY_ICONSTATE_SHOW)
    	#EndRegion ;************ TrayMenu ************
    
    
    	_AutoStart() ; Check
    
    
    	AdlibRegister(_RecycleCheck, 30 * 1000) ; Alle 30 min Papierkörbe überprüfen...
    
    
    	#Region ;************ SwitchLoop ************
    	While 1
    		Switch TrayGetMsg()
    			Case $g_idTrayAutoRun
    				$iStart = _AutoStart() ; prüfen
    				_AutoStart(($iStart = 1) ? 2 : 1)
    			Case $g_idTrayOpenRecycleItem
    				TrayItemSetState($g_idTrayOpenRecycleItem, $TRAY_UNCHECKED)
    				_RecycleOpen()
    			Case $g_idTrayCleanMgr
    				TrayItemSetState($g_idTrayCleanMgr, $TRAY_UNCHECKED)
    				_CleanDisc()
    			Case $g_idTrayCleanTempDirItem
    				TrayItemSetState($g_idTrayCleanTempDirItem, $TRAY_UNCHECKED)
    				SplashTextOn("Tray Recycler", "" & @LF & "Säubere Temp Ordner", 200, 85, -1, -1, 0, "", 12, 600)
    				_CleanTempDirs()
    				SplashOff()
    			Case $g_idTrayRecyclerCleanItem
    				TrayItemSetState($g_idTrayRecyclerCleanItem, $TRAY_UNCHECKED)
    				_Recycle()
    			Case $g_idTrayAboutItem
    				TrayItemSetState($g_idTrayAboutItem, $TRAY_UNCHECKED)
    				MsgBox(8256, "Tray Recycler", StringReplace("           Why go you to High School, when you can go High to School _ _ _                                             Tray Recycler v1.0.0.1 _ _                     Copyrights: © ICE Technologie. All rights reserved. _                     Greetings from GERMANY (Singen am Hohentwiel)", "_", @CR))
    			Case $g_idTrayExitItem
    				ExitLoop
    		EndSwitch
    	WEnd
    	#EndRegion ;************ SwitchLoop ************
    
    
    	; Brush wieder entsorgen...
    	DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $hBrush)
    EndFunc   ;==>_Main
    
    
    Func _AutoStart($iStart = 0)
    	Local $iCheck, $iRet
    
    
    	Switch $iStart
    		Case 0 ; Check
    			$iCheck = (RegRead($g_sRegRunKey, $g_sRegRunValue) = '') ? $TRAY_UNCHECKED : $TRAY_CHECKED
    			TrayItemSetState($g_idTrayAutoRun, $iCheck)
    			Return ($iCheck = $TRAY_CHECKED) ? 1 : 0
    		Case 1 ; AutoStart aktivieren
    			$iRet = 1
    			$iCheck = $TRAY_CHECKED
    			RegWrite($g_sRegRunKey, $g_sRegRunValue, "REG_SZ", @ScriptFullPath)
    		Case 2 ; AutoStart deaktivieren
    			$iRet = 0
    			$iCheck = $TRAY_UNCHECKED
    			RegDelete($g_sRegRunKey, $g_sRegRunValue)
    	EndSwitch
    
    
    	TrayItemSetState($g_idTrayAutoRun, $TRAY_UNCHECKED)
    
    
    	Return $iRet
    EndFunc   ;==>_AutoStart
    
    
    Func _RecycleCheck()
    	Local Static $aFixedDriveList = DriveGetDrive("FIXED")
    	; DeviceDisplayObjectProvider.exe
    	; The process known as Device Display Object Function Discovery Provider belongs to Windows Operating System.
    	; The original DeviceDisplayObjectProvider.exe is an important part of Windows and it is located in the C:\Windows\System32 folder.
    	If ProcessExists("DeviceDisplayObjectProvider.exe") Then Return
    
    
    	For $i = 1 To $aFixedDriveList[0] Step 1
    		DllCall("shell32.dll", "int", "SHQueryRecycleBin", "str", $aFixedDriveList[$i] & "\", "ptr", DllStructGetPtr($tagSHQUERYRBINFO))
    	Next
    
    
    	TraySetIcon(@SystemDir & "\shell32.dll", (DllStructGetData($tagSHQUERYRBINFO, 3) = 0) ? 32 : 33)
    EndFunc   ;==>_RecycleCheck
    
    
    Func _Recycle()
    	; Wenn kein Verzeichnispfad angegeben wird, werden alle Papierkörbe geleert!
    	If FileRecycleEmpty() Then SoundPlay(@WindowsDir & "\media\recycle.wav")
    EndFunc   ;==>_Recycle
    
    
    Func _RecycleOpen()
    	Run("explorer.exe ::{645FF040-5081-101B-9F08-00AA002F954E}")
    EndFunc   ;==>_RecycleOpen
    
    
    Func _CleanDisc()
    	Local $sKey, $iNum = 0
    
    
    	While 1
    		$sKey = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches", $iNum)
    		If @error Then ExitLoop
    		RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\" & $sKey, "StateFlags1488")
    		If @error Then RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\" & $sKey, "StateFlags1488", "REG_DWORD", "2")
    		$iNum += 1
    	WEnd
    
    
    	Run(@SystemDir & "\cleanmgr.exe /sagerun:1488")
    EndFunc   ;==>_CleanDisc
    
    
    Func _CleanTempDirs()
    	Local $aDirs = [@LocalAppDataDir & "\Temp\", @WindowsDir & "\Temp\", @TempDir & "\"], $iLoop, $sAttrib, $aFileTime, $sTimeStamp
    	For $i = 0 To UBound($aDirs) - 1 Step 1
    		Local $aFileList = _FileListToArrayRec($aDirs[$i], "*", $FLTAR_FILESFOLDERS, $FLTAR_RECUR, $FLTAR_SORT, $FLTAR_FULLPATH)
    		If @error Then ContinueLoop ; Nächstes Verzeichnis durchsuchen...
    		$iLoop = 0
    		Do
    			$iLoop += 1
    			$sAttrib = FileGetAttrib($aFileList[$iLoop])
    			$aFileTime = FileGetTime($aFileList[$iLoop])
    			$sTimeStamp = StringFormat('%s%s%s', $aFileTime[0], $aFileTime[1], $aFileTime[2]) ; Jahr, Monat, Tag
    			If $sTimeStamp = StringFormat('%s%s%s', @YEAR, @MON, @MDAY) Then ContinueLoop ; Nicht löschen, wenn es von heute ist!
    			While 1
    				Select
    					Case StringInStr($sAttrib, 'R') ; Schreibgeschützt?
    						FileSetAttrib($aFileList[$iLoop], '-R')
    						$sAttrib = StringReplace($sAttrib, 'R', '')
    					Case StringInStr($sAttrib, 'D') ; Verzeichnis?
    						DirRemove($aFileList[$iLoop], $DIR_DEFAULT) ; (0) = (default) deletes the folder, only if it is empty
    						ExitLoop ; Weiter mit der Do-Schleife...
    					Case Else
    						FileDelete($aFileList[$iLoop])
    						ExitLoop ; Weiter mit der Do-Schleife...
    				EndSelect
    			WEnd
    		Until $iLoop = $aFileList[0]
    	Next
    EndFunc   ;==>_CleanTempDirs
    
    
    Func _SetMenuColor($idTrayMenu, $hBrush)
    	Local $hTrayMenu = TrayItemGetHandle($idTrayMenu) ; Holt das Handle des TrayMenüs
    
    
    	Local $tagMenuInfo = DllStructCreate("dword;dword;dword;uint;dword;dword;ptr")
    	DllStructSetData($tagMenuInfo, 1, DllStructGetSize($tagMenuInfo))
    	DllStructSetData($tagMenuInfo, 2, BitOR($MIM_APPLYTOSUBMENUS, $MIM_BACKGROUND))
    	DllStructSetData($tagMenuInfo, 5, $hBrush)
    
    
    	DllCall("user32.dll", "int", "SetMenuInfo", "hwnd", $hTrayMenu, "ptr", DllStructGetPtr($tagMenuInfo))
    EndFunc   ;==>_SetMenuColor
    
    
    Func _CreateSolidBrush($iColor)
    	Local $aResult = DllCall("gdi32.dll", "handle", "CreateSolidBrush", "INT", $iColor)
    	If @error Then Return SetError(@error, @extended, 0)
    
    
    	Return $aResult[0]
    EndFunc   ;==>_CreateSolidBrush
    Alles anzeigen
  • DllCall('uxtheme.dll', 'INT64', 'SetThemeAppProperties', 'int', 0)

    • Bitnugger
    • 27. Juni 2017 um 18:19

    Bei mir auf Windows 10 X64 habe ich es zuerst auch so gemacht. Bei dir kommt es wohl zu dem Fehler, weil das "INT64" falsch ist...

    C
    void SetThemeAppProperties(
       DWORD dwFlags
    );
    Code
    ; _WinAPI_GetThemeAppProperties(), _WinAPI_SetThemeAppProperties()
    Global Const $STAP_ALLOW_NONCLIENT = 0x01
    Global Const $STAP_ALLOW_CONTROLS = 0x02
    Global Const $STAP_ALLOW_WEBCONTENT = 0x04

    https://www.autoitscript.com/autoit3/docs/l…pProperties.htm

    AutoIt
    ; Die komplette GUI und alle nachfolgend erzeugten Controls werden durch den DllCall beeinflußt.
    DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", 0) ; Sets the flags that determine how visual styles are implemented in the calling application.
    Global $g_hGUI = GUICreate('My Style', 640, 480)
    
    
    ; oder...
    
    
    ; Selektiv nur für einzelne Controls...
    Local $idProgressbar = GUICtrlCreateProgress($x, $y, $w, $h, $PBS_SMOOTHREVERSE)
    DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", "Explorer", "wstr", 0) ; Causes a window to use a different set of visual style information than its class normally uses.
    
    
    ; ...
    
    
    ; Dieses hier nicht...
    Local $idLabel = GUICtrlCreateLabel(' ' & Chr(241) & ' ', $x, $y, $w, $h, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER)), $aFontSize[1], 100, 0, 'Wingdings')
    Alles anzeigen
  • Script zum anhängen eines Kürzels an den Dateinamen

    • Bitnugger
    • 26. Juni 2017 um 11:37
    AutoIt
    $aFiles = _FileListToArray($sPath, "*.ssf", $FLTA_FILES True)
    ;.......................................................^^^^

    Das Keyword True hat in diesem Funktionsaufruf nichts zu suchen.


    So wäre es richtig:

    AutoIt
    $aFiles = _FileListToArray($sPath, "*.ssf", $FLTA_FILES) ; $FLTA_FILESFOLDERS = 0, $FLTA_FILES = 1, $FLTA_FOLDERS = 2
    Zitat von Sascha123456

    kann man es so machen das dieses Script für beide Endungen geht?

    Ja...

    .lsf: http://filext.com/file-extension/LSF
    .ssf: http://filext.com/file-extension/SSF

    Bitte schön...

    _RenameFilesFromFolder
    AutoIt
    ;-- TIME_STAMP   2017-06-26 11:17:15   v 0.1
    
    
    #include <File.au3>
    #include <WinAPIShPath.au3>
    
    
    _RenameFilesFromFolder()
    
    
    Func _RenameFilesFromFolder()
    	Local $sPath = FileSelectFolder("Wählen sie einen Ordner mit *.lsf, *.ssf Dateien aus...", @DesktopDir)
    	If $sPath = "" Then Exit 1
    
    
    	Local $aFiles = _FileListToArrayRec($sPath, "*.lsf;*.ssf", $FLTA_FILES, 0, 1, $FLTAR_FULLPATH)
    	If @error Then Exit 2
    ;~ 	Exit _ArrayDisplay($aFiles, '$aFiles')
    
    
    	Local $iRename = 0, $sExt, $sStr, $iLen, $sError
    	For $i = 1 To $aFiles[0] Step 1
    		$sExt = _WinAPI_PathFindExtension($aFiles[$i])
    		$sStr = '_rdy' & $sExt
    		$iLen = StringLen($sStr)
    
    
    		If StringRight($aFiles[$i], $iLen) <> $sStr Then
    			ConsoleWrite('> Old Name: ' & $aFiles[$i] & @CRLF)
    			ConsoleWrite('+ New Name: ' & StringReplace($aFiles[$i], $sExt, '_rdy' & $sExt) & @CRLF)
    			If Not FileMove($aFiles[$i], StringReplace($aFiles[$i], $sExt, '_rdy' & $sExt)) Then
    				$sError = ($sError = '') ? $sError = '! Folgende Dateien konnte nicht umbenannt werden:' & @CRLF & @CRLF : $sError & $aFiles[$i] & @CRLF
    			Else
    				$iRename += 1
    			EndIf
    		Else
    			ConsoleWrite('- Diese Datei wurde bereits umbenannt: ' & $aFiles[$i] & @CRLF)
    		EndIf
    	Next
    
    
    	If $sError Then
    		Exit 3 + MsgBox(262160,'Fehler', $sError)
    	Else
    		MsgBox(262208, 'Fertig', 'Es wurden ' & $iRename & ' Dateien umbenannt.')
    	EndIf
    EndFunc
    Alles anzeigen

    Der Inhalt kann nicht angezeigt werden, da du keine Berechtigung hast, diesen Inhalt zu sehen.

    Der Inhalt kann nicht angezeigt werden, da du keine Berechtigung hast, diesen Inhalt zu sehen.

  • Script zum anhängen eines Kürzels an den Dateinamen

    • Bitnugger
    • 23. Juni 2017 um 16:55
    Zitat von alpines

    Ich hab einfach den Standardparameter aus dem Calltip genommen.

    Das ist mir schon klar... ich dachte nur, dass es bei Anfängern evtl. zu Missverständnissen führen kann. :D

  • Script zum anhängen eines Kürzels an den Dateinamen

    • Bitnugger
    • 23. Juni 2017 um 16:28
    Zitat von alpines

    $aFiles = _FileListToArray($sPath, "*.ssf", $FLTA_FILESFOLDERS, True)

    Wieso $FLTA_FILESFOLDERS? - Er will doch Dateien umbenennen... richtig wäre in dem Fall ergo $FLTA_FILES. ;)

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™