Как Vista создает значок для документов, связанных с моим приложением? - PullRequest
5 голосов
/ 24 февраля 2009

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

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

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

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

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

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

1 Ответ

13 голосов
/ 24 февраля 2009

Значки и ассоциации файлов для расширений файлов перечислены в реестре. Более конкретно, записи 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 и сделает сопоставление только для текущего пользователя. (То, что именно из этого произойдет, зависит от нескольких вещей, например, от того, что представляет собой ОС, от того, является ли пользователь администратором, но не от повышенного уровня и т. Д.)

Вы можете прочитать обо всем этом в Настройка типов файлов (связей файлов) в MSDN. В частности, Типы файлов и Регистрация программ с помощью клиентских программ даст вам основы того, как именно это сделать.

...