Thomas Wölfers Baustatik-Blog

Thomas Wölfers Baustatik-Blog

Richtiges Icon für registrierten Dateityp finden


Das steht vermutlich auch woanders, aber ich habe es auf Anhieb nicht gefunden: Wie baut man sich das 'richtige' Icon für einen beliebigen unter Windows registrierten Dateityp - und zwar mit .Net ?

Kurze Antwort: Wie so oft, mit P/Invoke. ;-)

Lange Antwort:
1. Schritt: Passendes using statement:

using System.Runtime.InteropServices;

2. Schritt: Struktur im Manage-Code, die die Native abbildet:

[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;
};

3. Schritt: Wrapper-Klasse mit statischer Funktion zum Aufrufen:

class Win32Wrapper {
  
public const uint SHGFI_ICON = 0x100;
   public const uint SHGFI_LARGEICON = 0x0;
   public const uint SHGFI_SMALLICON = 0x1;
   [DllImport("shell32.dll")]
   public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint    cbSizeFileInfo, uint uFlags);
}

... und das wars eigentlich. Angenommen man hat nun ein FileInfo und will das Icon zum Typ, dann macht man folgendes:

SHFILEINFO shinfo = new SHFILEINFO();
Win32.SHGetFileInfo( fi.FullName, 0,
ref shinfo, (uint)Marshal.SizeOf(shinfo), Win32.SHGFI_ICON | Win32.SHGFI_SMALLICON);
System.Drawing.Icon icon = System.Drawing.Icon.FromHandle(shinfo.hIcon);


Cooles Tool: Mehr Bildschirmfläche


Das muss ich einfach noch erwähnen: Ein ungeheuer cooles Tool für alle, die einfach nicht genug Arbeitsfläche am Bildschirm haben: MaxiVista.

Man kann damit bis zu 3 Rechner als zusätzliche Monitore des Hauptgerätes verwenden, und zwar ganz ohne Hardware. Alles was man braucht ist ein zusätzlicher Rechner mit Monitor (zum Beispiel ein alter Laptop ?) der mit dem Hauptrechner vernetzt sein muss. Dann wird auf dem zusätzlichen und dem Hauptrechner die MaxiVista Software installieren - und schon dehnt sich der Windows-Desktop auf den Monitor am 2. Rechner aus.

Ich habe an meinem Hauptrechner von Haus aus 2 Monitore angeschlosse (wie man hier sehen kann.) Das reicht aber oft nicht aus - nur leider hat der Laptop eben keine Möglichkeit einen dritten Monitor anzuschliessen.

Bis jetzt - denn mit MaxiVista geht das prima. Seit heute morgen steht also auch noch mein alter Laptop auf dem Schreibtisch und wird als 3. Monitor verwendet.

Das Programm kostet gerade mal 50 Euro: Wärmstens empfohlen.


Umstieg auf VisualStudio ?


Wer sich nicht so recht entscheiden kann, ob sich denn der Umstieg zur aktuellen Version von Visual Studio lohnt - der kann VS.Net 2003 jetzt einfach online ausprobieren. Visual Studio Hosted Experience.

Nach dem einloggen hat man einen eigenen Server zum testen, und Zugriff auf eine ganze Reihe an Testscenarien und Beispielaufgaben mit Lösungen: Es geht momentan allerdings nur auf Englisch und mit Windows 2000, 2003 oder XP.


Anmelden an XP in einem virtuellen PC


Wenn man ein Windows XP in einer Virtual PC betreibt, dann muss man sich auch im virtuellen PC ganz normal anmelden: XP zeigt dazu den gewohnten Anmeldedialog an, der einen dazu auffordert die Anmeldung mit Ctrl+Alt+Del zu starten. Warum auch nicht - XP weiss ja gar nicht das es nur in einem virtuellen PC läuft, und erwartet eben das man sich bei Gina anmeldet.

Das Problem dabei ist: Die Version von XP bei der man sich anmelden muss läuft in einem Fenster von einer anderen Kopie von XP. Und dieses XP auf dem echten PC bekommt das Ctrl+Alt+Del ebenfalls mit - und tut das, was es in einem solchen Fall immer tut: Es blendet alle Programme aus und zeigt den Taskmanager an.

Die XP Version im virtuellen PC bekommt also überhaupt nicht mit, das man die Tastenkombination zum anmelden gedrückt hat, und das macht das Anmelden unmöglich.

Ich habe heute sicherlich 20 Minuten damit verbracht auf einen Anmeldedialog zu starren, bei dem man sich nicht anmelden kann. Dann habe ich zum Glück herausgefunden was man tun muss: Man muss auf den Menüpunkt 'Ctrl+Alt+Del' im 'Action' Menü klicken - der schickt dann die ensprechende Sequenz direkt an den virtuellen PC. Und schon kann man sich auch anmelden. :-)

Gebraucht wird der virtuelle PC mit XP übrigens für die Setup-Routinen unserer Statikprogramme: Alle Setups werden neuerdings in einem solchen virtuellen PC produziert.




Baustatik Demoversion ausprobieren »