2009-02-24 4 views
5

Kann ich den Prozess beeinflussen?
Ich habe eine Anwendung in .NET 3.5/VS2008 gebaut. Ich habe mehrere Symbole in die App mit einer win32 .res-Datei eingebettet. Dies geschieht im Feld Eigenschaften für das Projekt in VS2008 - anstatt eine .ico-Datei anzugeben, aktivieren Sie das Kontrollkästchen, um eine .res-Datei anzugeben. In der .res-Datei können Sie mehrere Symbole haben. Siehe here für was ich meine.Wie generiert Vista das Symbol für Dokumente, die mit meiner Anwendung verknüpft sind?

Jedes Symbol enthält ein 256x256xRGB (PNG Cmopressed) "Vista Grad" Bild, ein 256x256x32bit Bild und die übliche Kaskade von 48x48, 32x32 und 16x16 Bildern in verschiedenen Farbkombinationen. Wenn ich die resultierende EXE im Explorer sehe, sehe ich die großen schönen 256x256 Vista Bilder.

Ich kann dann meiner App eine Dateierweiterung zuordnen, indem ich mit der rechten Maustaste klicke> "Öffnen mit ..."> Standardprogramm clickstream in Vista's Explorer einstellen. Das neben dem Dokument angezeigte Symbol ist jedoch eine kleine Version des App-Symbols, das über einem weißen Blatt Papier mit einer gefalteten Ecke liegt.

Das Ergebnis ist, dass das Originalbild zu klein ist, um sichtbar zu sein, wenn es in der "kleinen Icon" Version angezeigt wird. Es sieht schrecklich aus.

Ich weiß, dass es möglich ist, das gefaltete Stück Papier komplett wegzulassen, oder zumindest ein viel größeres Bild zu überlagern. Das Symbol für eine C# -Datei hat z. B. ein gefaltetes Blatt Papier, aber das C# -Emblem ist groß und sichtbar. Wie kann ich das bekommen? Das Symbol für ZIP-Dateien, wenn WinZip 12 installiert ist, ist groß und sichtbar und hat kein gefaltetes Blatt Papier.

Weicht das Symbol für Dokumente von dem Symbol für die Anwendung ab? Gibt es in meiner App etwas, das ich tun muss, um ein Icon zu registrieren, das Vista für mit meiner App verknüpfte Dokumente verwendet?

Antwort

13

Die Symbole und Dateizuordnungen für Dateierweiterungen werden in der Registrierung aufgeführt. Genauer gesagt, HKEY_CLASSES_ROOT\.ext Einträge enthalten den Inhaltstyp, wahrgenommenen Typ und in der (Default) Wert ist die tatsächliche Zuordnung. Beispielsweise haben CS-Dateien den Standardwert VisualStudio.cs.9.0 (ich habe VS 2008). Sie können das HKEY_CLASSES_ROOT\VisualStudio.cs.9.0 überprüfen, um das tatsächliche Symbol, das Programm und die Befehle zu sehen, die diesem Dateityp zugeordnet sind. Insbesondere ist der HKEY_CLASSES_ROOT\VisualStudio.cs.9.0\DefaultIcon der Eintrag, der dem Explorer mitteilt, welches Symbol für Dateien dieses Typs angezeigt werden soll. Es zeigt auf eine Binär- und eine Ressourcen-ID in dieser Binärdatei.

Wenn Sie einen Dateityp mit einem Programm über den rechten Mausklick verbinden -> Öffnen mit ..., geben Sie kein Standardsymbol an. Explorer übernimmt das Symbol Ihrer App und überlagert es über einem allgemeinen Dokumentsymbol .

Der richtige Ansatz wäre, als Teil Ihrer Einrichtung die entsprechenden Registrierungseinträge aufzunehmen, um den Dateityp mit Ihrer Anwendung und Ihrem Symbol zu verknüpfen. Die genauen Registrierungswerte, die Sie angeben müssen, hängen von den Befehlen ab, die Sie dem Kontextmenü für diesen Dateityp hinzufügen möchten, aber zumindest möchten Sie den Befehl Öffnen. Im Fall von .cs-Dateien können Sie sehen, dass es einen Eintrag HKEY_CLASSES_ROOT\VisualStudio.cs.9.0\Shell\Commands\Open mit (Default) Wert gibt, der die zu startende Anwendung enthält, wenn der Befehl Öffnen aufgerufen wird. (Können Sie ignorieren die ddeexec Teil vorerst)

Beachten Sie, dass die HKEY_CLASSES_ROOT ist ein zugeordnetes Ansicht von zwei Registry-Zweigen: HKEY_CURRENT_USER\Software\Classes und HKEY_LOCAL_MACHINE\Software\Classes. Wenn Sie möchten, dass Ihre Dateiverknüpfung für alle Benutzer gilt, müssen Sie an HKEY_LOCAL_MACHINE schreiben. Dein Setup muss dazu als Administrator ausgeführt werden. Andernfalls wird der Versuch, in HKEY_CLASSES_ROOT zu schreiben, entweder mit Zugriff verweigert oder in HKEY_CURRENT_USER schreiben und die Verknüpfung nur für den aktuellen Benutzer ausführen.(Welche der beiden genau passiert, hängt von verschiedenen Dingen ab, wie das Betriebssystem ist, ob der Benutzer Admin ist aber nicht erhöht und so weiter)

Sie können über alles in Customizing File Types (Files Associations) Abschnitt auf MSDN lesen. Insbesondere geben File Types und Registering Programs with Client Programs Ihnen die Grundlagen, wie genau dies zu tun ist.

+0

WOW! Gute Antwort. Perfekt! Genau wonach ich gesucht habe! – Cheeso