gpt4 book ai didi

java - 使用 Java 更改 Windows 中的文件图标

转载 作者:行者123 更新时间:2023-12-01 14:52:08 27 4
gpt4 key购买 nike

项目名称:文件标记

我个人使用“文件夹标记”来组织我的文件夹。它使我可以选择从上下文菜单(右键单击菜单)更改文件夹图标。我可以从上下文菜单中选择计划的工作、半完成的工作、已完成的工作,并且我的文件夹图标会相应更改。

现在我想对单个文件实现相同的概念。

我想在windows环境下使用Java来实现这个解决方案。

第 1 步:要在上下文菜单中添加某些内容,最简单的方法是启动注册表项。
所以我需要在这里做的是——

添加上下文菜单项:文件标记添加上下文子菜单项:计划的工作、半完成的工作、已完成的工作(文件标记的子菜单)

第 2 步:

添加自定义属性

if(WorkStatus 为“计划工作”) {为值为“计划工作”的文件设置特定图标我想我需要在这里使用 iconHandler}

我需要您关于如何实现它的建议。

这是该解决方案的正确方法吗?或者有更好的解决方案吗?

我也很高兴获得第 1 步和第 2 步的示例代码

谢谢@布莱恩

最佳答案

嗯,我有一些好消息和一些坏消息......

关于您的第 2 步(设置特定文件的图标):

既然你在谈论“注册表项”,我假设你在Windows下。在这种情况下,恐怕您无法更改特定文件的图标,除非它是快捷方式或 .EXE 或 .DDL 文件(可以包含资源,例如图标)。您可以更改的是文件类型的默认图标,这意味着同一类型的所有文件都会受到影响(这显然不符合您的要求)。

关于您的第 1 步(修改上下文菜单):

为了在Windows 7或更高版本中实现您所描述的结构(“文件制作器”子菜单,其中包含各种状态的多个条目(“计划的工作”、“半完成的工作”等))/strong>,您需要创建一个静态级联菜单,如here所述。 (在 WindowsXP 及更早版本中,您需要实现一个 ContextMenuHandler,这是一项明显更复杂的任务 - 我不打算在本回答中介绍它)。

示例代码:
您可以从命令提示符(具有管理权限)运行以下命令,或者将命令复制并粘贴到 .BAT 文件中,然后以管理员身份运行。这些命令的作用是:首先为每个文件注册一个子菜单(请参阅注册表项中的“*”)和可用的子菜单条目,然后为每个子菜单条目设置显示文本和命令。

注意:建议您在进行任何修改之前始终备份注册表。注册表是一个微妙的结构,因此请格外小心,并自行承担风险:)

REG ADD "HKEY_CLASSES_ROOT\*\shell\File Marker" ^
/v "MUIVerb" /t REG_SZ /d "File Marker" /f

REG ADD "HKEY_CLASSES_ROOT\*\shell\File Marker" ^
/v "SubCommands" /t REG_EXPAND_SZ /d "WinIconChanger.PLANNED_WORK;WinIconChanger.HALF-DONE_WORK;WinIconChanger.DONE_WORK" /f

REG ADD "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\WinIconChanger.PLANNED_WORK" ^
/v "MUIVerb" /t REG_SZ /d "Planned work" /f
REG ADD "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\WinIconChanger.PLANNED_WORK\command" ^
/ve /t REG_SZ /d "\"C:\path\to\jre\bin\javaw.exe\" -jar \"C:\path\to\WinIconChanger.jar\" \"PLANNED_WORK\" \"%%1\"" /f

REG ADD "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\WinIconChanger.HALF-DONE_WORK" ^
/v "MUIVerb" /t REG_SZ /d "Half-done work" /f
REG ADD "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\WinIconChanger.HALF-DONE_WORK\command" ^
/ve /t REG_SZ /d "\"C:\path\to\jre\bin\javaw.exe\" -jar \"C:\path\to\WinIconChanger.jar\" \"HALF-DONE_WORK\" \"%%1\"" /f

REG ADD "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\WinIconChanger.DONE_WORK" ^
/v "MUIVerb" /t REG_SZ /d "Done work" /f
REG ADD "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\WinIconChanger.DONE_WORK\command" ^
/ve /t REG_SZ /d "\"C:\path\to\jre\bin\javaw.exe\" -jar \"C:\path\to\WinIconChanger.jar\" \"DONE_WORK\" \"%%1\"" /f

PAUSE

不要忘记将“C:\path\to\WinIconChanger.jar”和“C:\path\to\jre\bin\javaw.exe”替换为系统中的实际路径。

为了撤消对注册表所做的修改,您可以使用管理权限执行这些命令(或将它们保存在 .BAT 文件中并运行):

REG DELETE "HKEY_CLASSES_ROOT\*\shell\File Marker" /f

REG DELETE "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\WinIconChanger.PLANNED_WORK" /f
REG DELETE "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\WinIconChanger.HALF-DONE_WORK" /f
REG DELETE "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\WinIconChanger.DONE_WORK" /f

PAUSE


当然,您将需要一个 .JAR 文件,该文件将采用两个参数,即工作状态(例如 PLANNED_WORK、DONE_WORK 等)和右键单击文件的路径,并对它们执行一些有用的操作(如果您只能更改文件的图标:D)。
这是一个示例类:

class WinIconChanger {
static public void main(String[] args) {
String filePath = "UNKNOWN";
String state = "UNKNOWN";
if (args.length == 2) {
filePath = args[1];

switch (args[0]) {
case "PLANNED_WORK":
case "HALF-DONE_WORK":
case "DONE_WORK":
state = args[0];
break;
default:
break;
}
}

if ("UNKNOWN".equals(state)) {
javax.swing.JOptionPane.showMessageDialog(
null,
"Unknown file or state !",
"WinIconChanger Error",
javax.swing.JOptionPane.ERROR_MESSAGE);
} else {
/*
* Change the icon of the file specified in args[1]
* according to the state specified in args[0]
*/
String msg = String.format(
"Let's assume I just changed the icon of '%s' to %s !",
filePath, state);
javax.swing.JOptionPane.showMessageDialog(
null,
msg,
"WinIconChanger Info",
javax.swing.JOptionPane.INFORMATION_MESSAGE);
}
}
}

(这只是一个粗略的示例,而不是生产就绪的代码。您需要验证第二个参数确实对应于现有文件的路径,微调错误消息,捕获异常等)

关于java - 使用 Java 更改 Windows 中的文件图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14737244/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com