KaFu Posted February 10, 2009 Share Posted February 10, 2009 (edited) Yeah, another version ... did a lot of tinkering on this one#578091by Holger Kotsch and Kastout (mrRevoked) (kudos for your work).My goal was to get as close to the windows shell as possible. The code is still quiet dirty and full of comments and debug lines, because this is still WIP, maybe anyone of you has a clue to help me . I appended a zip with some file extensions (some zero size files and a compiled version of this script as .exe), on my system the unpack without problem, hope your packer doesn't skip the 0 byte files ...Now here what's still left (miiiinor). PHP files are associated with wordpad.exe on my computer (if it's not the case on your's, I guess you won't be able to reproduce the issue). The icon in au3 seems to be correct, except that in explorer the icon is much smaller and within a blank document icon. Browsed through the reg without any luck, and now I'm tired and hungry ...expandcollapse popup; http://msfn.org/board/lofiversion/index.php/t76486.html ; http://msdn.microsoft.com/en-us/library/bb776870.aspx ; http://msdn.microsoft.com/en-us/library/bb776871(VS.85).aspx ; HKEY_CLASSES_ROOT\SystemFileAssociations ; HKEY_CLASSES_ROOT\IrfanView.JPG ; HKEY_CLASSES_ROOT\IrfanView.PSD #cs http://msdn.microsoft.com/en-us/library/cc144150(VS.85).aspx Whenever the Shell needs to query for file association attributes for a file type, it creates an array of registry keys. The Shell checks the following registry keys, in order of decreasing priority. 1. User Customized Key. This key is used only if the user has customized a file extension's association to override the default. Typically this is either an application key or another ProgID. 2. ProgID Key. This key is specified as the default value of the extension key. 3. SystemFileAssociations Key. See below. 4. SystemFileAssociations PerceivedType Key. See below. 5. Base Class Key. For files, this is the ASTERISK(*) key. 6. AllFileSystemObjects Key. All files and file folders. #ce #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <ButtonConstants.au3> #include <File.au3> #include <GuiListView.au3> ;#include <array.au3> ;#include <winapi.au3> #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("AForm1", 633, 454, 193, 115) $ListView1 = GUICtrlCreateListView("Filename |Size|Filetype ", 20, 22, 540, 373) $select_button = GUICtrlCreateButton('Select',570,30,40) ;~ GUICtrlSetImage($ListView1, "shell32.dll", 3) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### ;loadfiles(@ScriptDir & '\file_extensions') ;loadfiles(@DesktopDir) ;loadfiles(@DesktopCommonDir) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $select_button $var = FileSelectFolder('Select Target','',0,@ScriptDir) if $var then _GUICtrlListView_DeleteAllItems($ListView1) loadfiles($var) EndIf EndSwitch WEnd Func loadfiles($folder) $files = _FileListToArray($folder, "*.*", 1) Local $szIconFile1, $nIcon1 = 0, $ListViewItem[UBound($files)] For $i = 1 To UBound($files) - 1 $ListViewItem[$i] = GUICtrlCreateListViewItem( _ $files[$i] & "|" & _ Int(FileGetSize($folder & '\' & $files[$i])) & "|" & _ StringTrimLeft($files[$i], StringInStr($files[$i], ".", 0, -1)) _ , $ListView1) Local $sFile = $files[$i] $azShortInfo = FileGetShortcut($sFile) If IsArray($azShortInfo) Then $sFile = $azShortInfo[0] If GUICtrlSetImage($ListViewItem[$i], $sFile) = 0 Then Local $sIconFile, $nIcon = 0 If _FileGetIcon($sIconFile, $nIcon, $sFile, $folder) Then ;ConsoleWrite($sFile &"="& $sIconFile &","& $nIcon & @lf & @lf) $nIcon = GUICtrlSetImage($ListViewItem[$i], $sIconFile, $nIcon) If $nIcon = 0 Then GUICtrlSetImage($ListViewItem[$i], @SystemDir & '\shell32.dll', 0) ; whatever icon you want Else GUICtrlSetImage($ListViewItem[$i], @SystemDir & '\shell32.dll', 0) EndIf EndIf Next EndFunc ;==>loadfiles ;Author - Holger Kotsch, modifed by mrRevoked, heavily modified by KaFu Func _FileGetIcon(ByRef $szIconFile, ByRef $nIcon, $szFile, $szFolder) Dim $szRegDefault = "", $szDefIcon = "", $adetails = "" ;$executable = _WinAPI_FindExecutable($szFolder & '\' & $szFile) ;$executable_icons = _WinAPI_ExtractIconEx($executable, -1, 0, 0, 0) ;ConsoleWrite ($executable & ' => ' & $executable_icons & @crlf) $nIcon = 0 $szExt = StringTrimLeft($szFile, StringInStr($szFile, ".", 0, -1)) if $szExt = "lnk" Then $adetails = FileGetShortcut($szFolder & '\' & $szFile) if not @error Then $szDefIcon = $adetails[0] & ',' & $adetails[5] Else $szDefIcon = "" EndIf Else $szRegDefault = RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\." & $szExt, "ProgID") If $szRegDefault = "" Then $szRegDefault = RegRead("HKCR\." & $szExt & "\DefaultIcon", "") If $szRegDefault = "" Then $szRegDefault = RegRead("HKCR\." & $szExt, "") If $szRegDefault <> "" Then $szDefIcon = RegRead("HKCR\" & $szRegDefault & "\DefaultIcon", "") if $szDefIcon = "" then $szDefIcon = RegRead("HKCR\." & $szExt & "\DefaultIcon", "") ;ConsoleWrite($szExt & ' | ' & $szRegDefault & ' | ' & $szDefIcon & @crlf) Else $szRegDefault = RegRead("HKCR\." & $szExt, "PerceivedType") If $szRegDefault <> "" Then $szRegDefault = RegRead("HKCR\SystemFileAssociations\" & $szRegDefault & "\DefaultIcon","") $szDefIcon = StringReplace($szRegDefault,'%SystemRoot%\system32',@SystemDir) endif EndIf if $szDefIcon = "" and $szRegDefault <> "" Then $szDefIcon = RegRead("HKCR\" & $szRegDefault & "\CurVer","") ; ADOBE PERVERSION.... if $szDefIcon then $szDefIcon = RegRead("HKCR\" & $szDefIcon & "\DefaultIcon","") Else $szDefIcon = RegRead("HKCR\" & $szRegDefault & "\shell\open\command","") $szDefIcon = StringReplace($szDefIcon,'%ProgramFiles%',@ProgramFilesDir) $szDefIcon = StringReplace($szDefIcon,' "%1"','') endif EndIf endif ConsoleWrite($szExt & ' | ' & $szRegDefault & ' | ' & $szDefIcon & @crlf) If $szDefIcon = "" Then $szIconFile = "shell32.dll" ElseIf $szDefIcon = "%1" Then $szIconFile = $szFolder & '\' & $szFile $nIcon = 1 ;ConsoleWrite($szIconFile & @tab & $nIcon) Else $arSplit = StringSplit($szDefIcon, ",") If IsArray($arSplit) Then $szIconFile = FileGetLongName(StringReplace($arSplit[1], '"', '')) ;ConsoleWrite($szExt & @tab & $szRegDefault & @tab & $szIconFile & @crlf) If $arSplit[0] > 1 Then $nIcon = $arSplit[2] If StringInStr($arSplit[1], "shell32.dll") Then $nIcon += 81 Else $nIcon = - $nIcon - 1 EndIf Else Return 0 EndIf EndIf Return 1 EndFunc ;==>FileGetIcon Edited February 10, 2009 by KaFu OS: Win10-22H2 - 64bit - German, AutoIt Version: 3.3.16.1, AutoIt Editor: SciTE, Website: https://funk.eu AMT - Auto-Movie-Thumbnailer (2022-Nov-26) BIC - Batch-Image-Cropper (2023-Apr-01) COP - Color Picker (2009-May-21) DCS - Dynamic Cursor Selector (2024-Feb-16) HMW - Hide my Windows (2018-Sep-16) HRC - HotKey Resolution Changer (2012-May-16) ICU - Icon Configuration Utility (2018-Sep-16) SMF - Search my Files (2023-Jun-03) - THE file info and duplicates search tool SSD - Set Sound Device (2017-Sep-16) Link to comment Share on other sites More sharing options...
UEZ Posted February 10, 2009 Share Posted February 10, 2009 Line 37: loadfiles(@ScriptDir & '\file_extensions') -> make problemes if it doesn't exits UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
KaFu Posted February 10, 2009 Author Share Posted February 10, 2009 (edited) Extract the appended file to @scriptdir & '\file_extensions' ... this is about function, not a fully working program , GUI and other nonsense only provided for testing... Edited February 10, 2009 by KaFu OS: Win10-22H2 - 64bit - German, AutoIt Version: 3.3.16.1, AutoIt Editor: SciTE, Website: https://funk.eu AMT - Auto-Movie-Thumbnailer (2022-Nov-26) BIC - Batch-Image-Cropper (2023-Apr-01) COP - Color Picker (2009-May-21) DCS - Dynamic Cursor Selector (2024-Feb-16) HMW - Hide my Windows (2018-Sep-16) HRC - HotKey Resolution Changer (2012-May-16) ICU - Icon Configuration Utility (2018-Sep-16) SMF - Search my Files (2023-Jun-03) - THE file info and duplicates search tool SSD - Set Sound Device (2017-Sep-16) Link to comment Share on other sites More sharing options...
UEZ Posted February 10, 2009 Share Posted February 10, 2009 Extract the appended file to @scriptdir & '\file_extensions' ... this is about function, not a fully working program , GUI and other nonsense only provided for testing... Didn't saw the attachment UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
KaFu Posted February 10, 2009 Author Share Posted February 10, 2009 Added select dir button, now script will run without sample dir... OS: Win10-22H2 - 64bit - German, AutoIt Version: 3.3.16.1, AutoIt Editor: SciTE, Website: https://funk.eu AMT - Auto-Movie-Thumbnailer (2022-Nov-26) BIC - Batch-Image-Cropper (2023-Apr-01) COP - Color Picker (2009-May-21) DCS - Dynamic Cursor Selector (2024-Feb-16) HMW - Hide my Windows (2018-Sep-16) HRC - HotKey Resolution Changer (2012-May-16) ICU - Icon Configuration Utility (2018-Sep-16) SMF - Search my Files (2023-Jun-03) - THE file info and duplicates search tool SSD - Set Sound Device (2017-Sep-16) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now