Cum obțineți icoanele din shell32.dll?

Aș dori să obțin pictograma Arbore pentru a utiliza pentru o aplicație homegrown. Știe cineva cum să extragă imaginile ca fișiere .icon? Aș dori atât 16x16, cât și 32x32, sau aș face o captură de ecran.

0
fr hi bn
Rețineți că acest lucru reprezintă o încălcare a licenței. "În timp ce software-ul se execută, este posibil să utilizați, dar nu să împărțiți pictogramele, imaginile, sunetele și mass-media."
adăugat autor Raymond Chen, sursa

10 răspunsuri

În Visual Studio, alegeți "File Open ..." apoi "File ...". Apoi alegeți Shell32.dll. Arborele de directoare trebuie deschis și veți găsi pictogramele din dosarul "Icon".

Pentru a salva o pictogramă, puteți să faceți clic dreapta pe pictograma din arborele dosarului și să alegeți "Export".

0
adăugat
@Bagorolin aici este o cheie la îndemână glennslayden.com/code/shell32_icons.jpg
adăugat autor Colonel Panic, sursa
Notă pentru Googlers, aceasta pare să nu mai funcționeze în VS2017 , la fel ca fereastra cu detaliile excepției în timpul depanării
adăugat autor MickyD, sursa
atunci când folosesc acest lucru am doar acest arbore de dosar și toate pictogramele enumerate, dar fără o previzualizare și titlurile nu sunt de ajutor (1, 10, 1001, ..) Există o modalitate de a obține o previzualizare sau chiar am pentru a deschide toate icoanele?
adăugat autor Bagorolin, sursa

O altă opțiune este utilizarea unui instrument, cum ar fi ResourceHacker . Se ocupă de mult mai mult decât simbolurile. Noroc!

0
adăugat
Am încercat să folosesc Resurse Hacker, dar fiecare pictogramă are 12 duplicate (cu diferite dimensiuni).
adăugat autor HighTechProgramming15, sursa

Dacă sunteți pe Linux, puteți extrage icoane dintr-un DLL Windows cu gExtractWinIcons . Este disponibil în Ubuntu și Debian în pachetul gextractwinicons .

Acest articol pe blog are o

Resources Extract is another tool that will recursively find icons from a lot of DLLs, very handy IMO.

0
adăugat

Doar deschideți DLL-ul cu IrfanView și salvați rezultatul ca un .gif sau .jpg.

Știu că această întrebare este veche, dar este al doilea hit Google de la "pictograma extras din dll", am vrut să evit să instalez ceva pe stația mea de lucru și mi-am amintit că folosesc IrfanView.

0
adăugat

Puteți descărca freeware Resource Hacker și apoi urmați instrucțiunile de mai jos:

  1. Deschideți orice fișier dll de care doriți să găsiți pictograme.
  2. Răsfoiți folderele pentru a găsi anumite pictograme.
  3. Din bara de meniu, selectați "acțiune" și apoi "salvați".
  4. Selectați destinația pentru fișierul .ico.

Reference : http://techsultan.com/how-to-extract-icons-from-windows-7/

0
adăugat

A trebuit să extrag pictograma # 238 din shell32.dll și nu am vrut să descarc Visual Studio sau Resourcehacker, așa că am găsit câteva scripete PowerShell de la Technet (datorită lui John Grenfell și a lui https://social.technet.microsoft. com/forum/windowssserver/en-US/16444c7a-ad61-44a7-8c6f-b8d619381a27/using-icons-in-powershell-scripts = forum_winserverpowershell care a făcut ceva similar și a creat un script nou pentru a-mi satisface nevoile.

Parametrii pe care i-am introdus au fost (calea sursă DLL, numele fișierului țintă și indexul pictogramei din fișierul DLL):

C: \ Windows \ System32 \ Shell32.dll

C: \ Temp \ Restart.ico

238

I discovered the icon index that I needed was #238 by trial and error by temporarily creating a new shortcut (right-click on your desktop and select New --> Shortcut and type in calc and press Enter twice). Then right-click the new shortcut and select Properties then click 'Change Icon' button in the Shortcut tab. Paste in path C: \ Windows \ System32 \ Shell32.dll and click OK. Find the icon you wish to use and work out its index. NB: Index #2 is beneath #1 and not to its right. Icon index #5 was at the top of column two on my Windows 7 x64 machine.

Dacă cineva are o metodă mai bună care funcționează în mod similar, dar obține icoane de calitate superioară, atunci aș fi interesat să aud despre asta. Mulțumesc, Shaun.

#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
adăugat
Metodă excelentă dar nu funcționează pentru mine. Sunt pe Windows 7x64 pe care script pare să fie confirmat să funcționeze. Dar am erori TypeNotFound pentru System.Drawing.Icon și System.Drawing.Bitmap . Prima mea încercare de a rula un script PS, așa că pot face ceva greșit?
adăugat autor Danny Lo, sursa
Ok, trebuia să execut mai întâi Add-Type -AssemblyName System.Drawing .
adăugat autor Danny Lo, sursa
Răspuns mult mai util decât restul.
adăugat autor slashp, sursa

Iată o versiune actualizată a unei soluții de mai sus. Am adăugat un ansamblu dispărut care a fost îngropat într-o legătură. Nou-născuții nu vor înțelege acest lucru. Acest eșantion va rula fără modificări.

    <#
.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]"
0
adăugat

Dacă cineva caută o modalitate ușoară, folosiți 7zip pentru a dezarhiva shell32.dll și căutați directorul .src/ICON /

0
adăugat
la ".rsrc/ICON/acum, funcționează mulțumesc perfect
adăugat autor J-Dizzle, sursa
Da, folosesc funcția 7-Zip "open archive" foarte mult.
adăugat autor Niek, sursa
Nu aveți 7Zip, dar ați încercat acest lucru în WinRAR și se spune că nu există nicio arhivă care să se deschidă.
adăugat autor Hashim, sursa
redenumiți shell32.7z apoi încercați să-l deschideți cu 7-zip, Peazip sau alte instrumente de compresie fav
adăugat autor ronaldwidha, sursa
Acesta ar trebui să fie răspunsul acceptat deoarece este ușor și funcționează.
adăugat autor Marco7757, sursa

There is also this resource available, the Visual Studio Image Library, which "can be used to create applications that look visually consistent with Microsoft software", presumably subject to the licensing given at the bottom. https://www.microsoft.com/en-ca/download/details.aspx?id=35825

0
adăugat