2009-02-24 2 views
5

Могу ли я повлиять на процесс?
У меня есть приложение, встроенное в .NET 3.5/VS2008. У меня встроено несколько значков в приложение с файлом win32 .res. Это делается в окне «Свойства» для проекта в VS2008 - вместо указания файла .ico, поставьте галочку в поле для указания файла .res. В файле .res вы можете иметь несколько значков. См. here, что я имею в виду.Как Vista создает значок для документов, связанных с моим приложением?

Каждый значок включает в себя изображение с разрешением 256x256xRGB (PNG Cmopressed), изображение с разрешением «Vista», изображение размером 256x256x32bit и обычный каскад 48x48, 32x32 и 16x16 изображений в различных цветовых комбинациях. Если я просмотрю полученный exe в Explorer, я вижу большие красивые образы Vista 256x256.

Затем я могу связать расширение файла с моим приложением, щелкнув правой кнопкой мыши> «Открыть с ...»> Установить по умолчанию программу clickstream в проводнике Vista. Но значок, расположенный рядом с документом, представляет собой небольшую версию значка приложения, наложенную поверх того, что выглядит как белый лист бумаги со сложенным углом.

В результате оригинальное изображение является waaaay до маленького, чтобы быть видимым, когда оно показано в версии «маленькая икона». Это выглядит ужасно.

Я знаю, что можно полностью опустить сложенный лист бумаги или, по крайней мере, получить на нем гораздо большее изображение. Значок для файла C#, например, имеет сложенный лист бумаги, но эмблема C# большая и видимая. Как я могу это получить? Значок для ZIP-файлов при установке WinZip 12 является большим и видимым и не имеет сложенного листа бумаги.

Является ли значок для документов отличным от значка для приложения? Есть ли что-то в моем приложении, которое я должен сделать, чтобы зарегистрировать значок, который Vista будет использовать для документов, связанных с моим приложением?

ответ

13

Значки и ассоциации файлов для расширений файлов перечислены в реестре. Более конкретно, записи HKEY_CLASSES_ROOT\.ext содержат тип содержимого, воспринимаемый тип и значение (Default) является фактической ассоциацией. Например, файлы .cs имеют значение по умолчанию VisualStudio.cs.9.0 (у меня есть VS 2008). Вы можете проверить HKEY_CLASSES_ROOT\VisualStudio.cs.9.0, чтобы увидеть фактический значок, программу и команды, связанные с этим типом файла. В частности, HKEY_CLASSES_ROOT\VisualStudio.cs.9.0\DefaultIcon - это запись, в которой сообщается проводнику, какой значок отображается для файлов этого типа. Он указывает на двоичный код и идентификатор ресурса в этом двоичном файле.

Когда вы связываете тип файла с программой с помощью правого щелчка -> Открыть с ..., вы не указываете значок по умолчанию, поэтому Explorer берет значок вашего приложения и накладывает его поверх значка общего документа ,

Правильный подход состоит в том, чтобы включить в качестве части вашей настройки соответствующие записи в реестре, чтобы связать тип файла с вашим приложением и вашим значком. Точные значения реестра, которые необходимо включить, зависят от команд, которые вы хотите добавить в контекстное меню для этого типа файла, но по крайней мере вы хотите команду Open. В случае файлов .cs вы можете видеть, что есть запись HKEY_CLASSES_ROOT\VisualStudio.cs.9.0\Shell\Commands\Open с значением (Default), содержащим приложение для запуска при вызове команды Open. (Вы можете игнорировать ddeexec часть в настоящее время)

Имейте в виду, что HKEY_CLASSES_ROOT является отображается вид двух ветвей реестра: HKEY_CURRENT_USER\Software\Classes и HKEY_LOCAL_MACHINE\Software\Classes. Если вы хотите, чтобы ваша ассоциация файлов была для всех пользователей, вам нужно написать HKEY_LOCAL_MACHINE. Для этого вам нужно запустить как администратор. В противном случае попытка записи в HKEY_CLASSES_ROOT будет либо сбой, либо доступ запрещен или напишите до HKEY_CURRENT_USER и сделает связь только для текущего пользователя.(Какое из двух точно произойдет, зависит от нескольких вещей, например от операционной системы, независимо от того, является ли пользователь администратором, но не поднят и т. Д.)

Вы можете прочитать обо всем этом в разделе Customizing File Types (Files Associations) на MSDN. В частности, File Types и Registering Programs with Client Programs предоставят вам основы того, как именно это сделать.

+0

WOW! Отличный ответ. Отлично! Только то, что я искал! – Cheeso