さて、良いニュースと悪いニュースがあります...
ステップ 2 (特定のファイルのアイコンの設定)について:
「レジストリエントリ」について話しているので、Windowsを使用していると思います。その場合、残念ながら特定のファイルのアイコンを変更することはできません。ただし、それがショートカット、または .EXE または .DDL ファイル (アイコンなどのリソースを含むことができる) である場合を除きます。変更できるのは、ファイル タイプのデフォルト アイコンです。これは、同じタイプのすべてのファイルが影響を受けることを意味します (これは明らかに要件に一致しません)。
ステップ1(コンテキストメニューの変更)について:
Windows 7以降で説明した構造(「ファイルメーカー」サブメニュー、さまざまな状態(「計画された作業」、「半分完了した作業」など)の複数のエントリを含む)を実現するには、静的ファイルを作成する必要がありますここで説明されているカスケード メニュー。(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
もちろん、作業の状態 (PLANNED_WORK、DONE_WORK など) と右クリックされたファイルへのパスの 2 つの引数を取り、それらに対して何か役立つことを行う .JAR ファイルが必要です (変更することしかできない場合)。ファイルのアイコン: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);
}
}
}
(これは大雑把な例であり、本番環境で使用できるコードではありません。2 番目の引数が実際に既存のファイルへのパスに対応していることを確認し、エラー メッセージを微調整し、例外をキャッチする必要があります。)