3

Java を使用して、次のパスを取得できるコードが必要です: 1) 現在のユーザーのスタート メニュー 2) すべてのユーザーのスタート メニュー

WinXP と Win7 の両方の回答が必要です。したがって、うまくいけば、両方を得ることができる一般的な答えがあります。

4

5 に答える 5

4

DLL を作成してネイティブ Windows API を呼び出す以外に選択肢はありません。

  • SHGetFolderPath(NULL, CSIDL_PROGRAMS, NULL, SHGFP_TYPE_CURRENT, &szPathBuffer)
  • SHGetFolderPath(NULL, CSIDL_COMMON_PROGRAMS, NULL, SHGFP_TYPE_CURRENT, &szPathBuffer)

スタート メニューのルートがどうしても必要な場合は、 と を使用CSIDL_STARTMENUCSIDL_COMMON_STARTMENUます。
既知のフォルダーの完全なリスト: CSIDL .

Windows Vista 以降を対象とする場合は、SHGetKnownFolderPathの代わりに function を使用してSHGetFolderPathください。

JNA ライブラリを使用して、ネイティブ コードを自分で記述せずにネイティブ Windows API を呼び出すことができますが、純粋な Java コードです。

于 2012-05-19T05:40:36.043 に答える
3

さて、私は解決策を見つけましたが、他の誰かがより洗練された解決策を持っているかもしれません.

「Runtime.getRuntime().exec(command);」のようなことをする予定です。コマンドは、次のレジストリ キーを照会するための「reg query」になります。

現在のユーザーは次で参照できます: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Start Menu

すべてのユーザーは、HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Start Menuで参照できます。

これらは、Win7 と WinXP の両方で同じです。他の誰かがより良い解決策を知っている場合は、私も喜んでそれを見ていきます。

于 2012-05-19T16:06:25.210 に答える
0

もう 1 つのオプションは、vbs API からスタート メニュー項目を管理することです。

そのためのJavaラッパーを作成しました。

// Install Start Menu
WindowsUtils.installStartMenuItem(WindowsUtils.SPECIALFOLDER_Programs,"my_start_menu", "explorer.exe", "http://www.google.es","Acceso directo a google");

// Uninstall Start Menu
WindowsUtils.uninstallStartMenuItem(WindowsUtils.SPECIALFOLDER_Programs, "my_start_menu");
于 2013-10-28T11:29:55.627 に答える