6.刷新桌面

6.刷新桌面

目标是让 .jpg、.png、.tif 和 .raw 文件始终使用 Photoshop CC 2015 打开并使用其适当的图标。

例子

您可以参考下面的流程图了解 Windows 10 如何为文件选择图标。我通过更改注册表并观察结果得出了这一结论。

(点击放大) 流动车

问题

  • 如果扩展名与文件类型相关联,则会忽略扩展名键定义的默认图标。
  • UserChoice键值定义的文件类型ProgId将覆盖扩展键定义的文件类型。
  • UserChoice当将 Photoshop 设置为 .jpg 和 .png 的始终打开应用程序时,键值ProgId设置为。Application/Photoshop.exe
  • 由于新的哈希安全性,无法更改UserChoice键值ProgId
  • 无法删除UserChoice受保护扩展名(如 .jpg 和 .png)的密钥

问题/可能的解决方案

  1. 有没有办法覆盖扩展级别的文件类型定义的图标?
  2. 有没有办法覆盖UserChoice扩展级别的键定义的文件类型?
  3. 在 GUI 中设置始终打开的应用程序时,什么决定了将UserChoice键值ProgId设置为何值,以及为什么 .tif 会导致Photoshop.TIFFFile.90而 .png 和 .jpg 会导致Application/Photoshop.exe
  4. 有没有办法生成UserChoice密钥所需的哈希值?
  5. 有没有办法阻止 Windows 检查/要求UserChoice密钥哈希?
  6. 有没有办法Photoshop.JPEGFile.90使用 GUI 指定像始终打开的应用程序这样的文件类型?
  7. 有没有办法阻止 Windows 保护/重新创建UserChoice密钥?

笔记

注册表更改只有在 explorer.exe 重新启动/刷新后才会生效。您可以使用任务管理器终止并重新启动 explorer.exe,或者您可以使用桌面刷新程序

密钥UserChoice可以存在于两个地方:

  • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg\UserChoice
  • HKCU\SOFTWARE\Microsoft\Windows\Roaming\OpenWith\FileExts\.jpg\UserChoice

如果其中一个不存在,则使用另一个。因此,如果要进行更改,请确保删除/修改它们两者。

示例键:

  • 扩展键:HKCR\.jpg
  • 文件类型键:HKCR\Photoshop.JPEGFile.90
  • UserChoice钥匙:HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg\UserChoice

细节

Photoshop 首次安装时,它关联了所有文件扩展名,一切都很顺利。在某个时候,我决定始终使用照片应用打开 .png、.jpg、.tif 和 .raw 文件。所以我:右键单击 .png/.jpg/.tif/.raw 文件 -> 打开方式 -> 选择其他应用 -> 选择照片 -> 选中“始终使用此应用打开 .png 文件”。现在我想回到使用 Photoshop 打开。我做了和以前一样的事情,只是选择 Photoshop 作为始终使用的应用。现在 .jpg、.png、.tif 和 .raw 文件都可以使用 Photoshop 打开。但是,.tif 文件显示正确的图标,而 .jpg、.png 和 .raw 显示 Photoshop.exe 图标。

我尝试重新安装 Photoshop,但没有用。我尝试使用 Adob​​e Bridge 重置文件关联,但也没有用。文件类型管理器和默认程序编辑器等工具不起作用(我将在下面解释原因)。

然后我开始研究 Windows 10 如何选择显示哪个文件图标。我了解到:

  1. 如果扩展名与文件类型相关联,则使用该文件类型键定义的图标。否则,使用扩展名键定义的图标。
  2. 扩展名可以以两种方式与文件类型关联:如果扩展名设置了始终打开的程序/应用,则该程序/应用将用作扩展名的文件类型。否则,可以通过扩展名键定义文件类型。

在我的情况下,.jpg、.png、.tif、.raw 已将 Photoshop 设置为始终打开的应用程序。这通过注册表反映出来

  • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg\UserChoice
  • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\UserChoice
  • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\UserChoice
  • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.raw\UserChoice

键。这就是 .tif 和 .jpg/.png/.raw 之间的区别。.tifProgId的值为,而Photoshop.TIFFFile.90.jpg、.png 和 .raw的值为Applications\Photoshop.exe。这意味着 .tif 与Photoshop.TIFFFile.90文件类型正确关联,但 .jpg、.png 和 .raw 与文件类型关联Applications\Photoshop.exe

我无法简单地更改Applications\Photoshop.exe文件类型的图标,因为 .jpg、.png 和 .raw 都使用该文件类型。因此,这 3 个扩展名使用相同的图标。我无法为每个扩展名指定一个唯一的图标。这就是文件类型管理器和默认程序编辑器工具不起作用的原因。在这种情况下,它们为文件类型设置了 DefaultIcon。

解决方案似乎很简单:更改键ProgId中的值UserChoice以使用Photoshop.JPEGFile.90Photoshop.PNGFile.90Photoshop.RAWFile.90文件类型。这在 Windows 10 中不再可能。新的安全措施添加了与键中的值Hash相伴的值。只有 Windows 知道如何生成此哈希。如果哈希值不正确,Windows 将重置/删除该键。这使得此值只能通过 Windows GUI 设置。这个想法是为了防止病毒/攻击者能够以编程方式更改扩展的始终打开的应用程序。 ProgIdUserChoiceProgIdUserChoice

我不知道为什么选择 Photoshop 作为始终打开的应用程序会导致ProgId.tif 正确设置,但 .jpg、.png 和 .raw 不正确,但这似乎无法修复。此时,我开始查看我从未接触过的其他扩展名,例如 .tga。我从未为 .tga 设置始终打开的应用程序,因此它没有密钥UserChoice。相反,.tga 的扩展名密钥定义了关联的类型,如下所示:

[HKCR\.tga]
@="Photoshop.TGAFile.90"

另一个看似简单的解决方案:通过删除键来取消设置始终打开的应用程序UserChoice,并在扩展键上定义文件类型。这适用于 .raw,但对 .jpg 和 .png 无效。当我删除UserChoice.jpg 和 .png 的键时,我收到了 Windows 通知,其中包含以下错误:

应用程序默认设置已重置

某个应用程序导致 .jpg 文件的默认应用程序设置出现问题,因此将其重置为照片

我刷新了注册表,果然,UserChoice密钥又回来了。原来是 Windows 保护了某些扩展名(如 .jpg 和 .png),不允许你删除密钥UserChoice

因此,我们无法删除UserChoice密钥,无法更新UserChoice.ProgId为正确的值,也无法覆盖指定的文件类型UserChoice.ProgId...现在怎么办?

答案1

我想到了一个解决方法,但我仍然希望得到上述问题的答案,以便我们可以找到一个合适的/不太复杂的解决方案。

下面是适合初学者的分步说明。

使用 GUI 创建一个虚拟 .cmd 文件并将其设置为扩展程序的始终打开应用程序。这会导致 Windows 为虚拟 .cmd“应用程序”创建新的文件类型,并通过设置键值UserChoiceProdId例如Application/customJPEG.cmd:)将其与扩展程序关联。使用唯一命名的虚拟 .cmd 文件对每个扩展程序重复此过程,这样,我们就有与每个扩展程序关联的唯一文件类型(例如:Application/customJPEG.cmdApplication/customPNG.cmd等)。然后,我们可以为每种新文件类型单独自定义图标和打开/编辑命令。

有关 Windows 如何选择文件图标的更多信息,请参阅原始问题中的流程图。

笔记:此解决方法仅适用于受保护的扩展名,例如 .jpg 和 .png。请参阅我上面的问题,了解不受保护的扩展名的解决方案。但是,无论如何,此解决方法都应该适用于任何扩展名。



快速词汇:

  • 文件扩展名:文件名中最后一个点后面的内容。.jpg、.jpeg、.png 等都是不同的文件扩展名。
  • 文件类型:文件分类/类别。可能与一个或多个文件扩展名相关联。例如,JPEG 文件类型可能与 .jpg 和 .jpeg 文件扩展名相关联。

笔记:.jpg 和 .png 等图像文件扩展名显示图像的缩略图。要查看图标,请创建一个空文件(这样就无法生成缩略图)或打开资源管理器窗口并将视图设置为详细信息。

笔记:除非您刷新桌面,否则您不会看到任何变化。请确保在更改注册表后执行此操作。有关详细信息,请参阅步骤 6。

笔记:如果注册表中似乎缺少某个键,请尝试按 F5 或“查看”->“刷新”进行刷新。regedit 不会保持最新状态,需要刷新才能查看最新状态。


对每个文件扩展名重复以下步骤。将 .jpg 替换为您的文件扩展名,并将 Photoshop 替换为您所需的任何应用程序。

1.创建一个虚拟的.cmd 文件

  1. 打开记事本
  2. 你可以将文件留空
  3. 文件->另存为
  4. 使用类似名称customJEPG.cmd作为文件名并保存

无论你保存在哪里或者你给它起什么名字每种文件类型的名称必须不同。虚拟 .cmd 的名称将决定文件类型的名称。我建议在名称中包含扩展名或文件类型,以便以后轻松区分。

2. 将虚拟 .cmd 文件设置为始终打开的应用程序

  1. 右键单击 .jpg 文件
  2. 打开方式->选择其他应用
  3. 确保选中“始终使用此应用打开 .jpg 文件”
  4. 滚动到底部并点击“更多应用 ↓”
  5. 再次滚动到底部并点击“在此电脑上查找其他应用”
  6. 浏览并选择您的虚拟 .cmd 文件
  7. 忽略并关闭“此应用无法在您的电脑上运行”错误
  8. 如果“您想如何打开这个文件?”窗口再次弹出,请确保在顶部的“继续使用此应用程序”下仍然选择了您的虚拟.cmd 文件,选中“始终使用此应用程序打开.jpg 文件”,然后单击“确定”。

如果您希望多个文件扩展名共享相同的文件类型,请对每个扩展名重复上述步骤 1-7。

3.获取新的关联文件类型

  1. 打开注册表
  2. 导航:
    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg\UserChoice
  3. 复制/记下 的值ProgId。这是现在与 .jpg 扩展名关联的文件类型

文件类型应为Applications\{the name of your dummy .cmd}。例如:Applications\customJPEG.cmd

4.更新文件类型以使用正确的图标

  1. 在 regedit 中,导航至HKEY_CLASSES_ROOT\
  2. 现在打开与您的文件类型同名的项。例如,如果您的文件类型是Applications\customJEPG.cmd,您将打开:
    HKEY_CLASSES_ROOT\Applications\customJEPG.cmd
  3. 在里面创建一个新键名为DefaultIcon
  4. 将键的(默认)值设置DefaultIcon为要使用的图标的路径。示例:
    E:\Tools\Adobe\Adobe Photoshop CC 2015\Photoshop.exe,30

5. 更新文件类型以使用 Photoshop 打开和编辑

  1. 打开shell\open\command文件类型密钥内的密钥。例如:
    HKEY_CLASSES_ROOT\Applications\customJEPG.cmd\shell\open\command
  2. 编辑(默认)值,使其指向 Photoshop.exe,而不是虚拟 .cmd 文件。示例:
    "E:\Tools\Adobe\Adobe Photoshop CC 2015\Photoshop.exe" "%1"
  3. 如果不存在则在密钥edit\command内部创建密钥。例如:shell
    HKEY_CLASSES_ROOT\Applications\customJEPG.cmd\shell\edit\command
  4. 编辑(默认)值,使其具有与您的open\command密钥相同的值。例如:
    "E:\Tools\Adobe\Adobe Photoshop CC 2015\Photoshop.exe" "%1"

6.刷新桌面

除非您刷新桌面,否则您将看不到任何变化。有 3 种方法可以刷新桌面:

  • 在 Windows 10 中运行ie4uinit.exe -show。在 Windows 7 和 8 中运行ie4uinit.exe -ClearIconCache。(感谢@托尼了解此提示。
  • 或者,您可以直接下载并运行桌面刷新程序
  • 或者,您可以重新启动 explorer.exe:

    1. 调出任务管理器(ctrl+shift+esc)
    2. 转到详细信息选项卡并查找explorer.exe
    3. 右键单击explorer.exe->结束任务,然后单击结束进程
    4. 仍然在任务管理器中转到文件->运行新任务
    5. 输入explorer.exe并点击确定

7. 测试一下

  1. 现在应该可以显示 .jpg 文件的正确图标。
  2. 双击 .jpg 文件即可在 Photoshop 中打开它。
  3. 右键单击 .jpg 文件->编辑应在 Photoshop 中打开它。

如果“您想如何打开这个文件?”窗口再次弹出,请确保在顶部的“继续使用此应用程序”下仍然选择了您的虚拟.cmd 文件,选中“始终使用此应用程序打开.jpg 文件”,然后单击“确定”。

8. 删除虚拟 .cmd

您可以删除虚拟 .cmd 文件。这是可选的。


关于查找图标的说明

通常,应用程序的 .exe 会包含多个图标。例如,Photoshop.exe 包含它支持的所有不同文件类型的所有图标。以下是如何查找和使用这些图标:

  1. 右键单击并选择“创建快捷方式”,创建 .exe 的快捷方式
  2. 右键单击快捷方式并选择属性
  3. 点击底部附近的“更改图标”按钮
  4. 您现在将看到如下窗口(但没有数字):
    圖標視窗
  5. 图标从 0 开始编号。找到要使用的图标的编号。您可以使用公式来代替计数(column - 1) * 4 + row - 1。例如,如果图标位于第 6 列第 3 行,(6 - 1) * 4 + 3 - 1 = 22
  6. 现在,您可以通过在 .exe 路径中包含数字来引用该图标,如下所示:
    C:\Example\Photoshop.exe,23

答案2

出色地,迈克的回答非常好。另外,作为补充,在步骤 6(刷新桌面)中,您可以运行以下命令:

ie4uinit.exe -show

为Win10重新加载新图标。

对于 Win 7 和 8,运行:

ie4uinit.exe -ClearIconCache

相关内容