Jump to content

This site uses cookies. By continuing to browse the site you are agreeing to our use of cookies. Find out more here. X
X


Photo

Extract icon from running process


  • Please log in to reply
6 replies to this topic

#1 spudw2k

spudw2k

    passionately misinformed

  • Active Members
  • PipPipPipPipPipPip
  • 1,296 posts

Posted 10 October 2008 - 03:32 PM

Can someone help point me in the right direction to do this? I want this from a running process.
Posted Image

Edited by spudw2k, 10 October 2008 - 03:32 PM.








#2 DarthCookieMonster

DarthCookieMonster

    I ate your mom's cookie. Nom Nom Nom...

  • MVPs
  • 11,621 posts

Posted 10 October 2008 - 04:10 PM

Usually the exe will have the icon in it when it is compiled. However, depending on the program, you may be dealing with a dll file that host the icon. In either case, it will depend on what you plan to do with it. If you want to have it in your GUI, you can use GUICtrlCreateIcon. I have seen tools out there that can extract icons from dll files if that is the route you want to go. A third route is to go here for icons: http://www.iconarchive.com/
I get most of my icons from here. Good selection, and usually free.

The Vollatran project
_____


msg-108-0-96549500-1409901790.png
Obi didn't believe me when I told him the dark side has milk and cookies....


#3 Overkill

Overkill

    Wayfarer

  • Active Members
  • Pip
  • 72 posts

Posted 10 October 2008 - 04:19 PM

Usually the exe will have the icon in it when it is compiled. However, depending on the program, you may be dealing with a dll file that host the icon. In either case, it will depend on what you plan to do with it. If you want to have it in your GUI, you can use GUICtrlCreateIcon. I have seen tools out there that can extract icons from dll files if that is the route you want to go. A third route is to go here for icons: http://www.iconarchive.com/
I get most of my icons from here. Good selection, and usually free.


http://www.nirsoft.net/utils/iconsext_setup.exe is also a good free program for extracting icons

#4 spudw2k

spudw2k

    passionately misinformed

  • Active Members
  • PipPipPipPipPipPip
  • 1,296 posts

Posted 10 October 2008 - 05:27 PM

Thanks for the replies.
I've seen some tools to do this (some great ones even here written in AutoIt), but I was wondering if/how to grab that icon from a process that's running. Ultimately I'd lik to make a minimiz to tray tool. I realize this has been done, but I'd like to learn to code it myself.

#5 ProgAndy

ProgAndy

    You need AutoItObject

  • MVPs
  • 2,508 posts

Posted 10 October 2008 - 05:34 PM

There is a message for _sendmessage to get the icon from a window (as handle), theres an example in the forum, but atm i don't find it.
*GERMAN* Posted Image [note: you are not allowed to remove author / modified info from my UDFs]My UDFs:[_SetImageBinaryToCtrl] [_TaskDialog] [AutoItObject] [Animated GIF (GDI+)] [ClipPut for Image] [FreeImage] [GDI32 UDFs] [GDIPlus Progressbar] [Hotkey-Selector] [Multiline Inputbox] [MySQL without ODBC] [RichEdit UDFs] [SpeechAPI Example] [WinHTTP]UDFs included in AutoIt: FTP_Ex (as FTPEx), _WinAPI_SetLayeredWindowAttributes

#6 MrCreatoR

MrCreatoR

    Must AutoIt!

  • MVPs
  • 3,251 posts

Posted 10 October 2008 - 09:47 PM

Try this:

AutoIt         
#include <StaticConstants.au3> $sProcess = "firefox.exe" $sIcon = _ProcessGetIcon($sProcess) If Not @error Then     $iWidth = 400     $iHeight = 120         GUICreate("_ProcessGetIcon - Extract Icon From Process Demo", $iWidth, $iHeight)     GUISetIcon($sIcon)         GUICtrlCreateLabel("Extracted Icon: " & @CRLF & $sIcon, 0, ($iHeight/2) - (32/2) - 30, $iWidth, 30, $SS_CENTER)     GUICtrlCreateIcon($sIcon, 0, ($iWidth/2) - (32/2), ($iHeight/2) - (32/2), 32, 32)         GUISetState()         While GUIGetMsg() <> -3     WEnd Else     MsgBox(48, "Attention!", "Error - Process (" & $sProcess & ") probably not runing!") EndIf Func _ProcessGetIcon($vProcess)     Local $iPID = ProcessExists($vProcess)     If Not $iPID Then Return SetError(1, 0, -1)         Local $aProc = DllCall('kernel32.dll', 'hwnd', 'OpenProcess', 'int', BitOR(0x0400, 0x0010), 'int', 0, 'int', $iPID)     If Not IsArray($aProc) Or Not $aProc[0] Then Return SetError(2, 0, -1)         Local $vStruct = DllStructCreate('int[1024]')         Local $hPsapi_Dll = DllOpen('Psapi.dll')     If $hPsapi_Dll = -1 Then $hPsapi_Dll = DllOpen(@SystemDir & '\Psapi.dll')     If $hPsapi_Dll = -1 Then $hPsapi_Dll = DllOpen(@WindowsDir & '\Psapi.dll')     If $hPsapi_Dll = -1 Then Return SetError(3, 0, '')         DllCall($hPsapi_Dll, 'int', 'EnumProcessModules', _         'hwnd', $aProc[0], _         'ptr', DllStructGetPtr($vStruct), _         'int', DllStructGetSize($vStruct), _         'int_ptr', 0)     Local $aRet = DllCall($hPsapi_Dll, 'int', 'GetModuleFileNameEx', _         'hwnd', $aProc[0], _         'int', DllStructGetData($vStruct, 1), _         'str', '', _         'int', 2048)         DllClose($hPsapi_Dll)         If Not IsArray($aRet) Or StringLen($aRet[3]) = 0 Then Return SetError(4, 0, '')     Return $aRet[3] EndFunc


:P
Using OS: Win 7 Professional, Using AutoIt Ver(s): 3.3.6.1 / 3.3.8.1

Posted Image AutoIt Russian CommunityPosted Image Projects: ATT - Application Translate Tool [new] | BlockIt - Block files & folders [new] | SIP - Selected Image Preview [new] | SISCABMAN - SciTE Abbreviations Manager [new] | AutoIt Path Switcher | AutoIt Menu for Opera! | YouTube Download Center! | Desktop Icons Restorator | Math Tasks | KeyBoard & Mouse Cleaner | CaptureIt - Capture Images Utility | CheckFileSize ProgramPosted Image UDFs: OnAutoItErrorRegister - Handle AutoIt critical errors [new] | AutoIt Syntax Highlight [new] | Opera Library! | Winamp Library | GetFolderToMenu | Custom_InputBox()! | _FileRun UDF | _CheckInput() UDF | _GUIInputSetOnlyNumbers() UDF | _FileGetValidName() UDF | _GUICtrlCreateRadioCBox UDF | _GuiCreateGrid() | _PathSplitByRegExp() | _GUICtrlListView_MoveItems - UDF | GUICtrlSetOnHover_UDF! | _ControlTab UDF! | _MouseSetOnEvent() UDF! | _ProcessListEx - UDF | GUICtrl_SetResizing - UDF! | Mod. for _IniString UDFs | _StringStripChars UDF | _ColorIsDarkShade UDF | _ColorConvertValue UDF | _GUICtrlTab_CoverBackground | CUI_App_UDF | _IncludeScripts UDF | _AutoIt3ExecuteCode | _DragList UDF | Mod. for _ListView_Progress | _ListView_SysLink | _GenerateRandomNumbers | _BlockInputEx | _IsPressedEx | OnAutoItExit Handler | _GUICtrlCreateTFLabel UDF | WinControlSetEvent UDF | Mod. for _DirGetSizeEx UDFPosted Image Examples: ScreenSaver Demo - Matrix included | Gui Drag Without pause the script | _WinAttach()! | Turn Off/On Monitor | ComboBox Handler Example | Mod. for "Thinking Box" | Cool "About" Box | TasksBar Imitation DemoLike the examples/UDFs? Please rate the topic (up-right corner of the post header: Rating Posted Image)* === My topics === *

==========================================================Posted Image==========================================================

AutoIt is simple, subtle, elegant. © AutoIt Team


#7 spudw2k

spudw2k

    passionately misinformed

  • Active Members
  • PipPipPipPipPipPip
  • 1,296 posts

Posted 10 October 2008 - 10:26 PM

Excellent, excellent! thanks a bunch. Also looking more into the _SendMessage func. First time hearing of it. Looks intersting. Thanks guys




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users