Last active
December 6, 2024 14:27
-
-
Save AHK-just-me/5518511 to your computer and use it in GitHub Desktop.
AHK 1.1 version of SKAN's IconEx.ahk -> http://www.autohotkey.com/board/topic/28923-crazy-scripting-iconex-v14b-icon-explorer-extractor/?hl=iconex
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* _______________________________________________________________________________________ | |
| _____ ______ __ _ | |
| |_ _| | ____| /_ || | _ _ _ SKAN (Suresh Kumar A N) | |
| | | ___ ___ _ __ | |__ __ __ | || |_| | | | | | [email protected] | |
| | | / __/ _ \| '_ \| __| \ \/ / | ||___| | | ' | | | |
| _| || (_| (_) | | | | |____ > < | | | | | |__| | Created on : 13-May-2008 | |
| |_____\___\___/|_| |_|______/_/\_\ |_|(_) |_| \.___/ Last Modified : 10-Aug-2012 | |
| [ I C O N E X P L O R E R A N D E X T R A C T O R ] Version : 1.4u | |
| _______________________________________________________________________________________ | |
| */ | |
| #NoEnv | |
| #SingleInstance, Force | |
| SetWorkingDir, %A_ScriptDir% | |
| SetBatchLines, -1 | |
| Process, Priority, , High | |
| ; ====================================================================================================================== | |
| SaveButton := 0x79 -1 ; (VK code for F9) Note: modify -1 to -2 for F8 and so on... | |
| KeyName := "F9" ; depends on the VK code you use above | |
| Deff := A_ScriptDir ; Default ICON save folder | |
| CallB := RegisterCallback("EnumResNameProc") | |
| tFolder := A_WinDir . "\System32\shell32.dll" ; default folder in address bar | |
| AhkVersion := A_AhkVersion . (A_IsUnicode ? (A_PtrSize = 8 ? " (U64)" : " (U32)") : " (ANSI)") | |
| GuiTitle := "IconEx - v1.4u [ AutoHotkey v" . AhkVersion . " ]" | |
| RT_GROUP_ICON := 14 | |
| RT_ICON := 3 | |
| STM_SETIMAGE := 0x172 | |
| If FileExist(A_Temp . "\IconEx.tmp") { | |
| FileRead, tFolder, %A_Temp%\IconEx.tmp | |
| FileDelete, %A_Temp%\IconEx.tmp | |
| } | |
| ; ====================================================================================================================== | |
| Gui, Font, s10 Normal, Tahoma | |
| Gui, Add, Combobox, x7 y7 w550 h21 Choose1 -Theme hwndhSHAC vtFolder, %tFolder% | |
| ControlGet, hMyEdit, hWnd,, Edit1, ahk_id %hSHAC% | |
| ; SHAutoComplete(): Sean - http://www.autohotkey.com/forum/viewtopic.php?p=121621#121621 | |
| ; For constants : http://www.codeproject.com/KB/edit/autocomp.aspx | |
| DllCall("Shlwapi.dll\SHAutoComplete", "Ptr", hMyEdit, "UInt", 0x1|0x10000000) | |
| Gui, Font, s8 Normal, Tahoma | |
| Gui, Add, Button, x+2 w33 h24 +Default gUpdateResourceList, &Go | |
| Gui, Add, Button, x+2 w52 h24 gSelectFolder, &Browse | |
| Gui, Add, ListView | |
| , x7 y+5 h280 w235 -Theme -E0x200 +0x4 +0x8 +Border vLVR gLVR +BackGroundFFFFFA c444466 AltSubmit | |
| , Resource File|Icons|IconGroup | |
| LV_ModifyCol(1 ,"170") | |
| LV_ModifyCol(2, "42 Integer") | |
| LV_ModifyCol(3, "0") | |
| Gui, Add, ListView | |
| , x+0 yp h280 w405 -Theme +Icon -E0x200 +0x100 +BackGroundFFFFFC cBB2222 Border AltSubmit vLVI gLVI hwndLVC2 | |
| Gui, Add, Hotkey, x2 y+79 w1 h1 +Disabled vHotkey gCreateSimpleIcon | |
| Loop 8 { | |
| Ix += 1 | |
| Gui, Add, Text, x+10 yp-70 0x1203 w70 h70 vI%Ix% hWndIcon%Ix% gSelectSimpleIcon | |
| Gui, Add, Text, xp yp+70 0x201 w70 h16 vIconT%Ix%, - | |
| } | |
| Gui, Add, Text, x2 y+79 w1 h1 | |
| Loop 8 { | |
| Ix += 1 | |
| Gui, Add, Text, x+10 yp-70 0x1203 w70 h70 vI%Ix% hWndIcon%Ix% gSelectSimpleIcon | |
| Gui, Add, Text, xp yp+70 0x201 w70 h16 vIconT%Ix%, - | |
| } | |
| Gui, Add, Button, x7 y+30 gAccelerator, &File | |
| Gui, Add, Button, x+5 gAccelerator, &Icon | |
| Gui, Add, Button, x+5 gAccelerator, A&ddress Bar | |
| Gui, Add, Button, x+5 gAccelerator, &Reload | |
| Gui, Font | |
| Gui, Add, StatusBar, vSB gFindTarget | |
| SB_SetParts(40, 425) | |
| GoSub, UpdateResourceList | |
| SB_SetText("Type the path to a folder/file. Auto complete enabled", 2) | |
| Gui, Show, w655 h535, %GuiTitle% | |
| Return ; // end of auto-execute section // | |
| ; ====================================================================================================================== | |
| UpdateResourceList: | |
| SendInput, {Escape} | |
| ControlGetText,tFolder,, ahk_id %hSHAC% | |
| If ! InStr(FileExist(tFolder), "D") | |
| Folder := tFolder | |
| Else Folder := tFolder . "\*.*" | |
| GoSub, SetFolder | |
| Gui, ListView, LVI | |
| LV_Delete() | |
| Gui, ListView, LVR | |
| LV_Delete() | |
| SB_SetText(" Loading files.. Please wait" , 2) | |
| FileCount := 0 | |
| Loop, %Folder% | |
| { | |
| If A_LoopFileExt Not in EXE,DLL,CPL,SCR | |
| Continue | |
| hModule := LoadLibraryEx(A_LoopFileLongPath) | |
| If (hModule = 0) | |
| Continue | |
| IGCount := 0 | |
| IconGroups := "" | |
| DllCall("Kernel32.dll\EnumResourceNames", "Ptr", hModule, "Ptr", 14, "Ptr", CallB, "Ptr", 0) | |
| DllCall("Kernel32.dll\FreeLibrary", "Ptr", hModule) | |
| If (IGCount = 0) | |
| Continue | |
| FileCount++ | |
| StringUpper, FileName, A_LoopFileName | |
| Gui, ListView, LVR | |
| LV_ADD("", FileName, IGCount, IconGroups) | |
| SB_SetText("`t" . FileCount, 1) | |
| } | |
| SB_SetText("`t" . FileCount, 1) | |
| SB_SetText(" Done!" , 2) | |
| GuiControl, Focus, LVR | |
| RowNo := 1 | |
| GoSub, LVRSUB | |
| Gui, ListView, LVI | |
| LV_Modify(1, "Select") | |
| Gui, ListView, LVR | |
| GuiControl, Focus, LVR | |
| LV_Modify(1, "Select") | |
| GuiControl, Focus, tFolder | |
| Return | |
| ; ====================================================================================================================== | |
| LVR: | |
| If (A_GuiEvent = "k") { | |
| If (A_EventInfo = 40 || A_EventInfo = 38) { | |
| RowNo := LV_GetNext(0, "Focused") | |
| GoTo, LVRSUB | |
| Return | |
| } | |
| If (A_EventInfo = SaveButton) { | |
| RowNo := LV_GetNext(0, "Focused") | |
| If (RowNo <> 0) | |
| GoSub, ExtractIconRes | |
| Return | |
| } | |
| } | |
| If (A_GuiEvent <> "Normal") | |
| Return | |
| RowNo := A_EventInfo | |
| If (RowNo = 0) { | |
| Loop, 16 { | |
| GuiControl, , IconT%A_Index%, - | |
| SendMessage, %STM_SETIMAGE%, 0x1, 0, , % "ahk_id " . Icon%A_Index% | |
| } | |
| Gui, ListView, LVI | |
| LV_Delete() | |
| If (ImageListID) | |
| IL_Destroy(ImageListID) | |
| ImageListID := 0 | |
| SB_SetText("", 2) | |
| SB_SetText("", 3) | |
| Return | |
| } | |
| LVRSUB: | |
| Gui, ListView, LVR | |
| LV_GetText(File, RowNo,1) | |
| LV_GetText(IGC, RowNo,2) | |
| LV_GetText(IG, RowNo,3) | |
| SB_SetText("Press <" . KeyName . "> to save all icons in " . File , 2) | |
| Gui, ListView, LVI | |
| LV_Delete() | |
| If (ImageListID) | |
| IL_Destroy(ImageListID) | |
| ImageListID := IL_Create(10, 10, 1) | |
| LV_SetImageList(ImageListID) | |
| Loop, %IGC% | |
| IL_Add(ImageListID, tFolder . "\" . File, A_Index) | |
| Loop, Parse, IG, | | |
| { | |
| Gui, ListView, LVI | |
| LV_Add("Icon" . A_Index, A_LoopField) | |
| } | |
| RowNo := 1 | |
| GoSub, LVISUB | |
| Gui, ListView, LVR | |
| Return | |
| ; ====================================================================================================================== | |
| LVI: | |
| Gui, ListView, LVI | |
| If (A_GuiEvent = "k") { | |
| If (A_EventInfo >= 37) && (A_EventInfo <= 40) { | |
| RowNo := LV_GetNext(0, "Focused") | |
| LV_GetText(IconGroup, RowNo, 1) | |
| SB_SetText("Press <" . KeyName . "> to save the Icon Group " . IconGroup, 2) | |
| GoTo, LVISUB | |
| Return | |
| } | |
| If (A_EventInfo = SaveButton) { | |
| RowNo := LV_GetNext(0, "Focused") | |
| If (RowNo <> 0) | |
| GoSub, ExtractIcon | |
| Return | |
| } | |
| If (A_EventInfo = 0x79) { | |
| GoSub, ApplyIconToFolder | |
| Return | |
| } | |
| } | |
| If (A_GuiEvent <> "Normal") | |
| Return | |
| RowNo := A_EventInfo | |
| LV_GetText(IconGroup, RowNo, 1) | |
| SB_SetText("Press <" . KeyName . "> to save the Icon Group " . IconGroup, 2) | |
| LVISUB: | |
| Gui, ListView, LVI | |
| LV_GetText(IconGroup, RowNo,1) | |
| hMod := LoadLibraryEx(tFolder . "\" . File) | |
| Buff := GetResource(hMod, IconGroup, RT_GROUP_ICON, nSize, hResData) | |
| Icos := NumGet(Buff + 4, 0, "UShort") | |
| Buff += 6 | |
| SB_SetText("`t" . Icos . " Icons in < Group " . IconGroup . " >", 3) | |
| Loop, %Icos% { | |
| W := NumGet(Buff + 0, 0, "UChar") | |
| H := NumGet(Buff + 0, 1, "UChar") | |
| BPP := NumGet(Buff + 0, 6, "UShort") | |
| nID := NumGet(Buff + 0, 12, "UShort") | |
| Buff += 14 | |
| If ((W + H) = 0) { | |
| SendMessage, %STM_SETIMAGE%, 0x1, 0, , % "ahk_id " . Icon%A_Index% | |
| DllCall("Kernel32.dll\FreeResource", "Ptr", hResData) | |
| GuiControl, ,IconT%A_Index%, PNG ICON | |
| Continue | |
| } | |
| IconD := GetResource(hMod, nID, RT_ICON, nSize, hResData) | |
| Wi := (W > 64) ? 64 : W | |
| Hi := (H > 64) ? 64 : H | |
| hIcon := DllCall("User32.dll\CreateIconFromResourceEx", "Ptr", IconD, "UInt", nSize, "Int", 1 | |
| , "UInt", 0x00030000, "Int", Wi, "Int", Hi, "UInt",(LR_SHARED := 0x8000), "UPtr") | |
| SendMessage, %STM_SETIMAGE%, 0x1, 0, , % "ahk_id " . Icon%A_Index% | |
| SendMessage, %STM_SETIMAGE%, 0x1, hIcon, , % "ahk_id " . Icon%A_Index% | |
| DllCall("Kernel32.dll\FreeResource", "Ptr", hResData) | |
| GuiControl, , IconT%A_Index%, %W%x%H%-%BPP%b | |
| } | |
| Loop % (16 - Icos) { | |
| Ix := Icos + A_Index | |
| GuiControl, , IconT%Ix%, - | |
| SendMessage, %STM_SETIMAGE%, 0x1, 0, , % "ahk_id " . Icon%Ix% | |
| } | |
| DllCall("Kernel32.dll\FreeResource", "Ptr", hResData) | |
| DllCall("Kernel32.dll\FreeLibrary", "Ptr", hModule) | |
| Return | |
| ; ====================================================================================================================== | |
| ExtractIconRes: | |
| FileSelectFolder, TargetFolder, *%DEFF%, 3, Extract Icons! Where to? | |
| If (TargetFolder = "") | |
| Return | |
| GoSub, SetFolder | |
| hModule := LoadLibraryEx(tFolder . "\" . File) | |
| Loop, Parse, IG, | | |
| { | |
| FileN := SubStr("000" . A_Index, -3) . "-" . SubStr("00000" . A_LoopField, -4) . ".ico" | |
| SB_SetText((FileN := TargetFolder . "\" . FileN), 2) | |
| IconGroup := A_LoopField | |
| GoSub, WriteIcon | |
| } | |
| DllCall("Kernel32.dll\FreeLibrary", "Ptr", hModule) | |
| SB_SetText(IGC . " Icons extracted!", 2) | |
| DllCall("Kernel32.dll\Sleep", "UInt", 1000) | |
| SB_SetText(TargetFolder, 2) | |
| Return | |
| ; ====================================================================================================================== | |
| ExtractIcon: | |
| LV_GetText(IconGroup, RowNo, 1) | |
| FileN := SaveIcon(Deff . "\" . File . "_IG" . SubStr("_00000" . IconGroup, -4) . ".ico") | |
| If (FileN = "") | |
| Return | |
| hModule := LoadLibraryEx(tFolder . "\" . File) | |
| GoSub, WriteIcon | |
| DllCall("Kernel32.dll\FreeLibrary", "Ptr", hModule) | |
| SB_SetText(FileN, 2) | |
| Return | |
| ; ====================================================================================================================== | |
| WriteIcon: | |
| hFile := FileOpen(FileN, "rw", "CP0") | |
| sBuff := GetResource(hModule, IconGroup, RT_GROUP_ICON, nSize, hResData) | |
| Icons := NumGet(sBuff + 0, 4, "UShort") | |
| hFile.RawWrite(sBuff + 0, 6) | |
| sBuff += 6 | |
| Loop, %Icons% { | |
| hFile.RawWrite(sBuff + 0, 14) | |
| hFile.WriteUShort(0) | |
| sBuff += 14 | |
| } | |
| DllCall("Kernel32.dll\FreeResource", "Ptr", hResData) | |
| EOF := hFile.Pos | |
| hFile.Pos := 18 | |
| Loop %Icons% { | |
| nID := hFile.ReadUShort() | |
| hFile.Seek(-2, 1) | |
| hFile.WriteUInt(EOF) | |
| DataOffSet := hFile.Pos | |
| sBuff := GetResource(hModule, nID, RT_ICON, nSize, hResData) | |
| hFile.Seek(-0, 2) | |
| hFile.RawWrite(sBuff + 0, nSize) | |
| DllCall("Kernel32.dll\FreeResource", "Ptr", hResData) | |
| EOF := hFile.Pos | |
| hFile.Pos := DataOffset + 12 | |
| } | |
| hFile.CLose() | |
| Return | |
| ; ====================================================================================================================== | |
| SelectSimpleIcon: | |
| StringTrimLeft, FNo ,A_GuiControl, 1 | |
| GuiControlGet, IconT%fNo% | |
| If ((IconT := IconT%fNo%) = "-") | |
| Return | |
| SB_SetText("Press <" . KeyName . "> to save Icon " . IconT . " from Icon Group " . IconGroup , 2) | |
| GuiControl, Enable, Hotkey | |
| GuiControl, Focus, Hotkey | |
| GuiControl, ,Hotkey | |
| SetTimer, DisableHotkey, -5000 | |
| Return | |
| ; ====================================================================================================================== | |
| DisableHotkey: | |
| GuiControlGet, Hotkey, Enabled | |
| If (Hotkey) { | |
| GuiControl, ,Hotkey | |
| GuiControl, Disable, Hotkey | |
| GuiControl, Focus, LVI | |
| StatusBarGetText, SbTxt, 2, IconEx | |
| InStr(SbTxt, "to save Icon") ? SB_SetText("", 2) : | |
| } | |
| Return | |
| ; ====================================================================================================================== | |
| CreateSimpleIcon: | |
| SB_SetText("", 2) | |
| GuiControlGet, Hotkey | |
| GuiControl, Disable, Hotkey | |
| IfNotEqual, Hotkey, %KeyName%, Return | |
| FileN := SaveIcon(Deff . "\" . File . "_" . SubStr("0000" IconGroup, -4) . "_" | |
| . SubStr("0" . FNo, -1) . "_" . IconT . ".ico") | |
| If (FileN = "") | |
| Return | |
| hModule := LoadLibraryEx(tFolder . "\" . File) | |
| Buffer := GetResource(hModule, IconGroup, RT_GROUP_ICON, nSize, hResData) | |
| tBuff := Buffer + 6 + ((Fno - 1) * 14) | |
| nID := Numget(tBuff + 0, 12, "Ushort") | |
| hFile := FileOpen(FileN, "w", "CP0") | |
| hFile.WriteUShort(0) | |
| hFile.WriteUShort(1) | |
| hFile.WriteUShort(1) | |
| hFile.RawWrite(tBuff + 0, 12) | |
| hFile.WriteUInt(22) | |
| DllCall("Kernel32.dll\FreeResource", "Ptr", hResData) | |
| Buff := GetResource(hModule, nID, RT_ICON, nSize, hResData) | |
| hFile.RawWrite(Buff + 0, nSize) | |
| hFile.Close() | |
| DllCall("Kernel32.dll\FreeResource", "Ptr", hResData) | |
| DllCall("Kernel32.dll\FreeLibrary", "Ptr", hModule) | |
| SB_SetText(FileN, 2) | |
| Return | |
| ; ====================================================================================================================== | |
| FindTarget: | |
| StatusBarGetText, SB, 2, A | |
| If FileExist(SB) | |
| Run, %COMSPEC% /c "Explorer /select`, %SB%", ,Hide | |
| Return | |
| ; ====================================================================================================================== | |
| SetFolder: | |
| ControlGetText, tFolder, , ahk_id %hSHAC% | |
| If !InStr(FileExist(tFolder), "D") { | |
| SplitPath, tFolder, , tFolder | |
| StringUpper, tFolder, tFolder | |
| ControlSetText, , %tFolder%, ahk_id %hSHAC% | |
| } | |
| Return | |
| ; ====================================================================================================================== | |
| SelectFolder: | |
| GoSub, SetFolder | |
| FileSelectFolder, nFolder, *%tFolder%, , Select a Resource Folder | |
| If (nFolder = "") | |
| Return | |
| ControlSetText, ,%nFolder%, ahk_id %hSHAC% | |
| GoSub, SetFolder | |
| GoSub, UpdateResourceList | |
| Return | |
| ; ====================================================================================================================== | |
| Accelerator: | |
| If (A_GuiControl = "&File") | |
| GuiControl, Focus, LVR | |
| Else If (A_GuiControl = "&Icon") | |
| GuiControl, Focus, LVI | |
| ELse If (A_GuiControl = "A&ddress Bar") | |
| GuiControl,Focus,tFolder | |
| Else If (A_GuiControl = "&Reload") && FileExist(tFolder . "\" . File) { | |
| FileAppend, %tFolder%\%File%, %A_Temp%\IconEx.tmp | |
| Reload | |
| } | |
| Return | |
| ; ====================================================================================================================== | |
| ApplyIconToFolder: | |
| FileSelectFolder, applyFolder, ::{20d04fe0-3aea-1069-a2d8-08002b30309d}, 0, Apply FolderIcon | |
| If (applyFolder= "" || ErrorLevel) | |
| Return | |
| DesktopIni := applyFolder . "\Desktop.ini" | |
| IniRead, iconFile, %DesktopIni%, .ShellClassInfo, IconFile, %A_Space% | |
| If (SubStr(iconFile, 1, 7) == "IconEx_") | |
| FileDelete, %applyFolder%\%iconFile% | |
| iconFile := ("IconEx_" . HashStr(A_Now) . ".ico") | |
| FileN := applyFolder . "\" . iconFile | |
| hModule := LoadLibraryEx(tFolder . "\" . File) | |
| LV_GetText(IconGroup, RowNo, 1) | |
| GoSub, WriteIcon | |
| DllCall("Kernel32.dll\FreeLibrary", "Ptr", hModule) | |
| SB_SetText(FileN, 2) | |
| IniWrite, %IconFile%, %DesktopIni%, .ShellClassInfo, IconFile | |
| IniWrite, 0 , %DesktopIni%, .ShellClassInfo, IconIndex | |
| FileSetAttrib, +S, %applyFolder% | |
| FileSetAttrib, +SH, %DesktopIni% | |
| FileSetAttrib, +SH, %FileN% | |
| ; SHCNE_ASSOCCHANGED := 0x8000000 | |
| DllCall("Shell32.dll\SHChangeNotify", "Int", 0x8000000, "UInt", 0x0, "Ptr", 0, "Ptr" ,0) | |
| Run, Properties "%applyFolder%" | |
| Return | |
| ; ====================================================================================================================== | |
| GuiContextMenu: | |
| StatusBarGetText, SbTxt, 2, IconEx | |
| StringTrimLeft, SbTxt, SbTxt, 14 | |
| If (SubStr(SbTxt, 1, 4) = "save") | |
| SendInput, {%KeyName%} | |
| Return | |
| ; ====================================================================================================================== | |
| GuiClose: | |
| ExitApp | |
| ; ====================================================================================================================== | |
| EnumResNameProc(hModule, lpszType, lpszName, lParam) { | |
| Global IconGroups, IGCount | |
| If (lpszName > 0xFFFF) | |
| lpszName := StrGet(lpszName) | |
| IconGroups .= (IconGroups <> "" ? "|" : "") . lpszName | |
| IGCount++ | |
| Return True | |
| } | |
| ; ====================================================================================================================== | |
| GetResource(hModule, rName, rType, ByRef nSize, ByRef hResData) { | |
| Arg := (rName + 0 = "") ? &rName : rName | |
| hResource := DllCall("Kernel32.dll\FindResource", "Ptr", hModule, "Ptr", Arg, "Ptr", rType, "UPtr") | |
| nSize := DllCall("Kernel32.dll\SizeofResource", "Ptr", hModule, "Ptr", hResource, "UInt") | |
| hResData := DllCall("Kernel32.dll\LoadResource", "Ptr", hModule, "Ptr" , hResource, "UPtr") | |
| Return DllCall("Kernel32.dll\LockResource", "Ptr", hResData, "UPtr") | |
| } | |
| ; ====================================================================================================================== | |
| SaveIcon(Filename, Prompt := "Save Icon As") { | |
| FileSelectFile, File, 16, %Filename%, %Prompt%, Icon (*.ico) | |
| Return ((File <> "" && SubStr(File, -3) <> ".ico") ? File . ".ico" : File) | |
| } | |
| ; ====================================================================================================================== | |
| LoadLibraryEx(File) { | |
| Return DllCall("Kernel32.dll\LoadLibraryEx", "Str", File, "Ptr", 0, "UInt", 0x02, "UPtr") | |
| } | |
| ; ====================================================================================================================== | |
| HashStr(sStr) { | |
| VarSetCapacity(hHash, 16, 0) | |
| DllCall("Shlwapi.dll\UrlHash", "Str", sStr, "UIntP", dHash, "UInt", 4) | |
| If (A_IsUnicode) | |
| DllCall("msvcrt.dll\swprintf", "Str", hHash, "Str", "%08X", "UInt", dHash) | |
| Else | |
| DllCall("msvcrt.dll\sprintf", "Str", hHash, "Str", "%08X", "UInt", dHash) | |
| Return hHash | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Is it possible to do something like this, but for bitmap image strips? Like toolbar icons (bitmaps) etc? This is really great for working with icons, thanks for sharing it. It makes it so much easier to find obscure icons deep inside of Window or another programs folder.