仕事のために、スタート メニューにインストールされる 2 つのショートカットがあり、どちらも同じ exe を指しています (ただし、2 つ目はコマンド ライン引数が異なります)。
場合によっては、ウィンドウが 2 番目のショートカットを選択してスタート メニューのホット プログラム リストに表示することがありますが、これはアプリケーションの完全な更新を引き起こすため、問題があります。
スタートメニューリストにそのショートカットを表示しないようにウィンドウに指示する方法はありますか?
はい、実際、レイモンド・チェンはこれについて書いたばかりです:
System.AppUserModel.ExcludeFromShowInNewInstall
プロパティを設定VARIANT_TRUE
して、[スタート]メニューに「私はプログラムのプライマリエントリポイントではありません。ヘルプファイルのようなセカンダリショートカットです」と指示することができます。
サンプルコード(CCoInitialize
クラス):
#include <windows.h>
#include <tchar.h>
#include <shlobj.h>
#include <atlbase.h>
// class 3CCoInitialize incorporated here by reference
int __cdecl _tmain(int argc, TCHAR **argv)
{
// error checking elided for expository purposes
CCoInitialize init;
CComPtr<IShellLink> spsl;
spsl.CoCreateInstance(CLSID_ShellLink);
spsl->SetPath(TEXT("C:\\Program Files\\LitWare\\LWUpdate.exe"));
PROPVARIANT pvar;
pvar.vt = VT_BOOL;
pvar.boolVal = VARIANT_TRUE;
CComQIPtr<IPropertyStore>(spsl)->SetValue(PKEY_AppUserModel_ExcludeFromShowInNewInstall, pvar);
CComQIPtr<IPersistFile>(spsl)->Save(L"LitWare Update.lnk", TRUE);
return 0;
}
これらの設定のドキュメントは、アプリケーションユーザーモデルID(AppUserModelIDs)にあります。具体的には、 「タスクバーの固定の除外リストと最近/頻繁なリスト」というタイトルのセクションを探しています。該当する部分を以下に転載します。
アプリケーション、プロセス、およびウィンドウは、タスクバーに固定するか、[スタート]メニューのMFUリストに含めることができないようにすることを選択できます。これを実現するための3つのメカニズムがあります。
次に示すように、アプリケーションの登録にエントリを追加し
NoStartPage
ます。HKEY_CLASSES_ROOT\Applications\Example.exe\NoStartPage
エントリに関連付けられているデータ
NoStartPage
は無視されます。エントリの存在のみが必要です。したがって、の理想的なタイプはNoStartPage
ですREG_NONE
。明示的なAppUserModelIDを使用すると、
NoStartPage
エントリが上書きされることに注意してください。明示的なAppUserModelIDがショートカット、プロセス、またはウィンドウに適用されると、ピン留め可能になり、[スタート]メニューのMFUリストの対象になります。
System.AppUserModel.PreventPinning
ウィンドウとショートカットにプロパティを設定します。このプロパティは、プロパティの前のウィンドウで設定する必要がありPKEY_AppUserModel_ID
ます。次に示すように、次のレジストリサブキーの下に値として明示
AppUserModelID
を追加します。HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\FileAssociation\NoStartPageAppUserModelIDs\AppUserModelID
各エントリは
REG_NULL
、AppUserModelIDという名前の値です。このリストにあるAppUserModelIDは固定できず、[スタート]メニューの[MFU]リストに含める資格がありません。