5

我可以影响进程吗?
我有一个内置于 .NET 3.5 / VS2008 的应用程序。我使用 win32 .res 文件将多个图标嵌入到应用程序中。这是在 VS2008 中项目的“属性”框中完成的——不是指定 .ico 文件,而是勾选该框以指定 .res 文件。在 .res 文件中,您可以有多个图标。请参阅此处了解我的意思。

每个图标包括一个 256x256xRGB(PNG Cmopressed)“Vista 级”图像、一个 256x256x32 位图像,以及各种颜色组合的 48x48、32x32 和 16x16 图像的通常级联。如果我在资源管理器中查看生成的 exe,我会看到漂亮的 256x256 Vista 大图像。

然后我可以将文件扩展名关联到我的应用程序,使用右键单击 >“打开方式...”> 在 Vista 的资源管理器中设置默认程序点击流。但是显示在文档旁边的图标是应用程序图标的一个小版本,覆盖在一张看起来像折叠角的白纸之上。

结果是,当原始图像以“小图标”版本显示时,原始图像很小,无法看到。看起来很可怕。

我知道可以完全省略折叠的纸,或者至少在上面覆盖更大的图像。例如,C# 文件的图标有一张折叠的纸,但 C# 标志很大且可见。我怎样才能得到这个?安装 WinZip 12 时 .zip 文件的图标大且可见,并且没有折叠的纸张。

文档图标与应用程序图标不同吗?在我的应用程序中,我必须做些什么来注册一个图标,Vista 将用于与我的应用程序关联的文档吗?

4

1 回答 1

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是,告诉资源管理器为这种类型的文件显示哪个图标的条目。它指向一个二进制文件和该二进制文件中的资源 ID。

当您通过右键单击 -> 打开方式将文件类型与程序相关联时,您没有指定默认图标,因此资源管理器获取您的应用程序图标并将其覆盖在通用文档图标上。

正确的方法是在您的设置中包含适当的注册表项,以将文件类型与您的应用程序和图标相关联。您需要包含的确切注册表值取决于您要添加到该文件类型的上下文菜单中的命令,但至少您需要打开命令。对于 .cs 文件,您可以看到有一个条目HKEY_CLASSES_ROOT\VisualStudio.cs.9.0\Shell\Commands\Open,其(Default)值包含调用 Open 命令时要启动的应用程序。(您现在可以忽略该ddeexec部分)

请记住,HKEY_CLASSES_ROOT是两个注册表分支的映射视图:HKEY_CURRENT_USER\Software\ClassesHKEY_LOCAL_MACHINE\Software\Classes. 如果您希望文件关联适用于所有用户,则需要写入HKEY_LOCAL_MACHINE. 您的设置需要以管理员身份运行才能执行此操作。否则,尝试写入将失败并拒绝访问,或者只为当前用户HKEY_CLASSES_ROOT写入并进行关联。HKEY_CURRENT_USER(这两个究竟会发生哪一个取决于几件事,比如操作系统是什么,用户是否是管理员但没有提升等等)

您可以在 MSDN 上的自定义文件类型(文件关联)部分阅读所有这些内容。特别是,文件类型向客户端程序注册程序将为您提供有关如何准确执行此操作的基础知识。

于 2009-02-24T08:20:24.470 回答