WinFuture-Forum.de: Icon Aus Datei Auslesen? - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Icon Aus Datei Auslesen? C#


#1 Mitglied ist offline   Legacy 

  • Gruppe: Mitglieder
  • Beiträge: 8
  • Beigetreten: 19. Mai 05
  • Reputation: 0

geschrieben 02. August 2005 - 07:19

Hi!

Ich möchte das Bild, das von einer Datei zur Darstellung verwendet wird, mit C# auslesen und weiterverwenden. Kann mir jemand erklären ob/wie das geht?

Danke!
0

Anzeige



#2 Mitglied ist offline   constructor 

  • Gruppe: aktive Mitglieder
  • Beiträge: 112
  • Beigetreten: 18. April 05
  • Reputation: 0

geschrieben 02. August 2005 - 15:41

Eine native .NET Funktion dafür kenne ich nicht. Evtl wirst du an den InteropServices nicht vorbeikommen.

[System.Runtime.InteropServices.DllImport("shell32.dll")]
public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);

0

#3 Mitglied ist offline   Legacy 

  • Gruppe: Mitglieder
  • Beiträge: 8
  • Beigetreten: 19. Mai 05
  • Reputation: 0

  geschrieben 02. August 2005 - 21:02

Danke - aber ich verstehe nur Bahnhof :thumbdown:
Gibt es für die böhmischen Dörfer auch eine Landkarte?

HILFE!
0

#4 Mitglied ist offline   constructor 

  • Gruppe: aktive Mitglieder
  • Beiträge: 112
  • Beigetreten: 18. April 05
  • Reputation: 0

  geschrieben 05. August 2005 - 15:26

Hier eine "Landkarte" ;)

Die Windows-Funktion SHGetFileInfo liefert dir Informationen zu einer Datei.
Zuerst wird eine Datei mit der von dir gesuchten Dateiendung erstellt. Mit SHGetFileInfo lässt du dir einen struct (SHFILEINFO) zurückgeben, der unter anderem auch das Icon der Datei enthält. Über Icon.FromHandle() liest du das Icon aus dem struct aus. Zum Schluss kann die Datei gelöscht werden

<summary>Ermittelt das im Betriebsystem zugewiesene Image der FileExtension und liefert es zurück</summary>
public static System.Drawing.Image GetFileExtensionImage(string p_sExtension)
{
    string l_sFileName = "";
    if(p_sExtension.StartsWith("."))
        l_sFileName = @"c:\tempfile." + p_sExtension;
    else
        l_sFileName = @"c:\tempfile" + p_sExtension;

    File.Create(l_sFileName).Close();

    IntPtr hImgSmall; 
    SHFILEINFO shinfo = new SHFILEINFO();

    hImgSmall = SHGetFileInfo(l_sFileName, 0, ref shinfo,(uint)Marshal.SizeOf(shinfo),SHGFI_ICON |SHGFI_SMALLICON);
    Icon myIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon);
    File.Delete(l_sFileName);
                        
    return myIcon.ToBitmap();
}

public const uint SHGFI_ICON = 0x100;
public const uint SHGFI_LARGEICON = 0x0; // 'Large icon
public const uint SHGFI_SMALLICON = 0x1; // 'Small icon
        
[System.Runtime.InteropServices.DllImport("shell32.dll")]
public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);

[System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)]
public struct SHFILEINFO 
{
    public IntPtr hIcon;
    public IntPtr iIcon;
    public uint dwAttributes;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
    public string szDisplayName;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
    public string szTypeName;
}


Viel Spaß!

Dieser Beitrag wurde von constructor bearbeitet: 05. August 2005 - 15:27

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0