2008-08-12 16 views
36

मैं होमग्राउन ऐप के लिए उपयोग करने के लिए ट्री आइकन प्राप्त करना चाहता हूं। क्या किसी को पता है कि छवियों को .icon फ़ाइलों के रूप में निकालने का तरीका कैसे है? मुझे 16x16 और 32x32 दोनों चाहिए, या मैं बस एक स्क्रीन कैप्चर करना चाहता हूं।आप shell32.dll से आइकन कैसे प्राप्त करते हैं?

+6

ध्यान दें कि ऐसा करने से लाइसेंस का उल्लंघन होता है। "जबकि सॉफ्टवेयर चल रहा है, आप इसका उपयोग कर सकते हैं लेकिन अपने आइकन, छवियों, ध्वनियों और मीडिया को साझा नहीं कर सकते हैं।" –

उत्तर

37

विजुअल स्टूडियो में, "फ़ाइल खोलें ..." फिर "फ़ाइल ..." चुनें। फिर Shell32.dll चुनें। एक फ़ोल्डर पेड़ खोला जाना चाहिए, और आपको "आइकन" फ़ोल्डर में आइकन मिलेंगे।

एक आइकन सहेजने के लिए, आप फ़ोल्डर पेड़ में आइकन पर राइट-क्लिक कर सकते हैं और "निर्यात" चुन सकते हैं।

+1

जब मैं इसका उपयोग करता हूं तो मेरे पास केवल यह फ़ोल्डर पेड़ होता है और सभी आइकन सूचीबद्ध होते हैं लेकिन पूर्वावलोकन के बिना और शीर्षक सहायक नहीं होते हैं (1, 10, 1001, ..) क्या पूर्वावलोकन पाने का कोई तरीका है या मैं वास्तव में सभी प्रतीक खोलना है? – Bagorolin

+4

@ बागोरोलिन यहां एक आसान कुंजी है http://www.glennslayden.com/code/shell32_icons.jpg –

+0

** नोट ** ** Googlers के लिए, यह अब ** VS2017 ** में काम नहीं करता है, बस अपवाद विवरण विंडो की तरह डीबगिंग – MickyD

17

एक और विकल्प ResourceHacker जैसे टूल का उपयोग करना है। यह सिर्फ आइकन से भी अधिक तरीके से संभालता है। चीयर्स!

+0

के दौरान मैंने संसाधन हैकर का उपयोग करने की कोशिश की, लेकिन प्रत्येक आइकन में 12 डुप्लिकेट हैं (विभिन्न आकारों के साथ)। – HighTechProgramming15

4

Resources Extract एक और उपकरण है जो बहुत सारे डीएलएल, बहुत आसान आईएमओ से रिक्त रूप से आइकन ढूंढ पाएगा।

1

बस डीआरएल को इरफान व्यू के साथ खोलें और परिणाम को .gif या .jpg के रूप में सहेजें।

मुझे पता है कि यह प्रश्न पुराना है, लेकिन यह "वेब से निकालने वाले आइकन" से दूसरी Google हिट है, मैं अपने वर्कस्टेशन पर कुछ भी इंस्टॉल करने से बचना चाहता था और मुझे याद आया कि मैं इरफान व्यू का उपयोग करता हूं।

1

यदि आप लिनक्स पर हैं, तो आप gExtractWinIcons के साथ विंडोज डीएलएल से आइकन निकाल सकते हैं। यह gextractwinicons पैकेज में उबंटू और डेबियन में उपलब्ध है।

इस ब्लॉग आलेख में screenshot and brief explanation है।

2

आप फ्रीवेयर Resource Hacker डाउनलोड कर सकते हैं और उसके बाद नीचे दिए गए निर्देशों का पालन करें:

  1. ओपन किसी भी dll फ़ाइल आप से माउस को खोजने के लिए चाहते हैं।
  2. विशिष्ट आइकन खोजने के लिए फ़ोल्डर ब्राउज़ करें।
  3. मेनू बार से, 'action' और फिर 'सहेजें' चुनें।
  4. .ico फ़ाइल के लिए गंतव्य का चयन करें।

संदर्भ: http://techsultan.com/how-to-extract-icons-from-windows-7/

6

मैं shell32.dll से आइकन # 238 निकालने के लिए की जरूरत है और दृश्य स्टूडियो या Resourcehacker डाउनलोड करने के लिए नहीं करना चाहता था, इसलिए मैं टेकनेट (धन्यवाद जॉन ग्रेनफेल से PowerShell स्क्रिप्ट की एक जोड़ी मिल गया और # https://social.technet.microsoft.com/Forums/windowsserver/en-US/16444c7a-ad61-44a7-8c6f-b8d619381a27/using-icons-in-powershell-scripts?forum=winserverpowershell पर) ने कुछ ऐसा किया और मेरी आवश्यकताओं के अनुरूप एक नई स्क्रिप्ट (नीचे) बनाई।

मापदंडों मैं में प्रवेश किया (स्रोत DLL पथ, लक्ष्य आइकन फ़ाइल नाम और DLL फ़ाइल के भीतर आइकन इंडेक्स) थे:

C: \ Windows \ System32 \ shell32.dll

C: \ (अपने डेस्कटॉप पर राइट क्लिक करें और चयन अस्थायी \ Restart.ico

मैं आइकन सूचकांक कि मैं # 238 अस्थायी रूप से एक नया शॉर्टकट बनाने के द्वारा परीक्षण और त्रुटि के द्वारा किया गया की जरूरत की खोज की नई -> शॉर्टकट और कैल्क में टाइप करें और दो बार एंटर दबाएं)। फिर नए शॉर्टकट पर राइट-क्लिक करें और गुणों का चयन करें और शॉर्टकट टैब में 'आइकन बदलें' बटन पर क्लिक करें। पथ सी में चिपकाएं: \ Windows \ System32 \ shell32.dll और ठीक क्लिक करें। वह आइकन ढूंढें जिसका आप उपयोग करना चाहते हैं और इसकी अनुक्रमणिका का काम करें। एनबी: इंडेक्स # 2 # 1 के नीचे है और इसके दाईं ओर नहीं है।आइकन इंडेक्स # 5 मेरे विंडोज 7 एक्स 64 मशीन पर कॉलम दो के शीर्ष पर था।

यदि किसी के पास एक बेहतर तरीका है जो समान रूप से काम करता है लेकिन उच्च गुणवत्ता वाले आइकन प्राप्त करता है तो मुझे इसके बारे में सुनना होगा। धन्यवाद, शॉन।

#Windows PowerShell Code########################################################################### 
# http://gallery.technet.microsoft.com/scriptcenter/Icon-Exporter-e372fe70 
# 
# AUTHOR: John Grenfell 
# 
########################################################################### 

<# 
.SYNOPSIS 
    Exports an ico and bmp file from a given source to a given destination 
.Description 
    You need to set the Source and Destination locations. First version of a script, I found other examples but all I wanted to do as grab and ico file from an exe but found getting a bmp useful. Others might find useful 
    No error checking I'm afraid so make sure your source and destination locations exist! 
.EXAMPLE 
    .\Icon_Exporter.ps1 
.Notes 
     Version HISTORY: 
     1.1 2012.03.8 
#> 
Param ([parameter(Mandatory = $true)][string] $SourceEXEFilePath, 
     [parameter(Mandatory = $true)][string] $TargetIconFilePath 
) 
CLS 
#"shell32.dll" 238 
If ($SourceEXEFilePath.ToLower().Contains(".dll")) { 
    $IconIndexNo = Read-Host "Enter the icon index: " 
    $Icon = [System.IconExtractor]::Extract($SourceEXEFilePath, $IconIndexNo, $true)  
} Else { 
    [void][Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
    $image = [System.Drawing.Icon]::ExtractAssociatedIcon("$($SourceEXEFilePath)").ToBitmap() 
    $bitmap = new-object System.Drawing.Bitmap $image 
    $bitmap.SetResolution(72,72) 
    $icon = [System.Drawing.Icon]::FromHandle($bitmap.GetHicon()) 
} 
$stream = [System.IO.File]::OpenWrite("$($TargetIconFilePath)") 
$icon.save($stream) 
$stream.close() 
Write-Host "Icon file can be found at $TargetIconFilePath" 
+0

बाकी की तुलना में अधिक उपयोगी उत्तर। – slashp

+0

महान विधि लेकिन यह मेरे लिए काम नहीं करता है। मैं विंडोज 7x64 पर हूं जिस पर स्क्रिप्ट को काम करने की पुष्टि की जाती है। लेकिन मुझे 'System.Drawing.Icon' और' System.Drawing.Bitmap' के लिए 'TypeNotFound' त्रुटियां मिलती हैं। मेरी पीएस-स्क्रिप्ट चलाने की पहली कोशिश है तो शायद मैं कुछ गलत करूँ? –

+0

ठीक है, मुझे बस 'एड-टाइप-एस्सेप्लरनाम सिस्टम' ड्रॉइंग 'निष्पादित करने की आवश्यकता है। –

2

ऊपर दिए गए समाधान का एक अद्यतन संस्करण यहां दिया गया है। मैंने एक लापता असेंबली जो एक लिंक में दफनाया गया था। नवम्बर इसे समझ नहीं पाएंगे। यह नमूना बिना संशोधन के चलाएगा।

<# 
.SYNOPSIS 
    Exports an ico and bmp file from a given source to a given destination 
.Description 
    You need to set the Source and Destination locations. First version of a script, I found other examples 
    but all I wanted to do as grab and ico file from an exe but found getting a bmp useful. Others might find useful 
.EXAMPLE 
    This will run but will nag you for input 
    .\Icon_Exporter.ps1 
.EXAMPLE 
    this will default to shell32.dll automatically for -SourceEXEFilePath 
    .\Icon_Exporter.ps1 -TargetIconFilePath 'C:\temp\Myicon.ico' -IconIndexNo 238 
.EXAMPLE 
    This will give you a green tree icon (press F5 for windows to refresh Windows explorer) 
    .\Icon_Exporter.ps1 -SourceEXEFilePath 'C:/Windows/system32/shell32.dll' -TargetIconFilePath 'C:\temp\Myicon.ico' -IconIndexNo 41 

.Notes 
    Based on http://stackoverflow.com/questions/8435/how-do-you-get-the-icons-out-of-shell32-dll Version 1.1 2012.03.8 
    New version: Version 1.2 2015.11.20 (Added missing custom assembly and some error checking for novices) 
#> 
Param ( 
    [parameter(Mandatory = $true)] 
    [string] $SourceEXEFilePath = 'C:/Windows/system32/shell32.dll', 
    [parameter(Mandatory = $true)] 
    [string] $TargetIconFilePath, 
    [parameter(Mandatory = $False)] 
    [Int32]$IconIndexNo = 0 
) 

#https://social.technet.microsoft.com/Forums/windowsserver/en-US/16444c7a-ad61-44a7-8c6f-b8d619381a27/using-icons-in-powershell-scripts?forum=winserverpowershell 
$code = @" 
using System; 
using System.Drawing; 
using System.Runtime.InteropServices; 

namespace System 
{ 
    public class IconExtractor 
    { 

    public static Icon Extract(string file, int number, bool largeIcon) 
    { 
     IntPtr large; 
     IntPtr small; 
     ExtractIconEx(file, number, out large, out small, 1); 
     try 
     { 
     return Icon.FromHandle(largeIcon ? large : small); 
     } 
     catch 
     { 
     return null; 
     } 

    } 
    [DllImport("Shell32.dll", EntryPoint = "ExtractIconExW", CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] 
    private static extern int ExtractIconEx(string sFile, int iIndex, out IntPtr piLargeVersion, out IntPtr piSmallVersion, int amountIcons); 

    } 
} 
"@ 

If (-not (Test-path -Path $SourceEXEFilePath -ErrorAction SilentlyContinue)) { 
    Throw "Source file [$SourceEXEFilePath] does not exist!" 
} 

[String]$TargetIconFilefolder = [System.IO.Path]::GetDirectoryName($TargetIconFilePath) 
If (-not (Test-path -Path $TargetIconFilefolder -ErrorAction SilentlyContinue)) { 
    Throw "Target folder [$TargetIconFilefolder] does not exist!" 
} 

Try { 
    If ($SourceEXEFilePath.ToLower().Contains(".dll")) { 
     Add-Type -TypeDefinition $code -ReferencedAssemblies System.Drawing 
     $form = New-Object System.Windows.Forms.Form 
     $Icon = [System.IconExtractor]::Extract($SourceEXEFilePath, $IconIndexNo, $true)  
    } Else { 
     [void][Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
     [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
     $image = [System.Drawing.Icon]::ExtractAssociatedIcon("$($SourceEXEFilePath)").ToBitmap() 
     $bitmap = new-object System.Drawing.Bitmap $image 
     $bitmap.SetResolution(72,72) 
     $icon = [System.Drawing.Icon]::FromHandle($bitmap.GetHicon()) 
    } 
} Catch { 
    Throw "Error extracting ICO file" 
} 

Try { 
    $stream = [System.IO.File]::OpenWrite("$($TargetIconFilePath)") 
    $icon.save($stream) 
    $stream.close() 
} Catch { 
    Throw "Error saving ICO file [$TargetIconFilePath]" 
} 
Write-Host "Icon file can be found at [$TargetIconFilePath]" 
20

किसी को भी एक आसान तरीका मांग कर रहा है, तो बस 7zip का उपयोग shell32.dll अनज़िप और फ़ोल्डर .src/आइकन देखने के लिए/

+0

हाँ, मैं 7-ज़िप "खुले संग्रह" फ़ंक्शन का बहुत उपयोग करता हूं। – Niek

+0

7Zip नहीं मिला है, लेकिन WinRAR में यह कोशिश की और यह कहता है कि खोलने के लिए कोई संग्रह नहीं है। – Hashim

+0

shell32.7z का नाम बदलें, फिर इसे 7-ज़िप, पेज़िप, या अपने अन्य एफएवी संपीड़न उपकरण – ronaldwidha

1

भी इस संसाधन उपलब्ध है, दृश्य स्टूडियो छवि लाइब्रेरी नहीं है , जिसका उपयोग "माइक्रोसॉफ़्ट सॉफ़्टवेयर के साथ दृष्टि से संगत दिखने वाले अनुप्रयोगों को बनाने के लिए किया जा सकता है", संभवतः नीचे दिए गए लाइसेंसिंग के अधीन है। https://www.microsoft.com/en-ca/download/details.aspx?id=35825

संबंधित मुद्दे