【发布时间】:2012-10-03 15:36:35
【问题描述】:
我想更改在 Windows 7 任务栏上下文菜单中显示的应用程序名称。
我的应用程序当前显示我的应用程序名称。我想把它改成类似微软产品的东西
我的应用程序使用 Prism 框架,我想显示的应用程序名称将取决于模块的类型。所以我想动态设置应用名称。
【问题讨论】:
-
请告诉我你的
Assembly.cs中有什么。 -
你的应用还是你的跳转任务?
我想更改在 Windows 7 任务栏上下文菜单中显示的应用程序名称。
我的应用程序当前显示我的应用程序名称。我想把它改成类似微软产品的东西
我的应用程序使用 Prism 框架,我想显示的应用程序名称将取决于模块的类型。所以我想动态设置应用名称。
【问题讨论】:
Assembly.cs 中有什么。
您看到vshost32.exe 是因为您在调试器下运行。这只是调试器使用的主机进程的名称,您无法更改它。好吧,我想你可以,但这不是你想做的。您想更改可执行文件使用的名称。
当您在不调试的情况下运行时,正如您的用户那样,任务栏应用弹出窗口中显示的应用程序名称由项目配置的“应用程序”页面中指定的程序集名称确定。因此,只需将其更改为您想要的任何内容即可。
【讨论】:
对于通过 Windows API 代码包库设置该属性的托管应用,您可以使用 AppID 属性,该属性是 Taskbar 对象的一部分,您可以在 Microsoft.WindowsAPICodePack.Shell.Taskbar 命名空间中找到该对象。使用该属性,您可以设置和获取给定应用程序的应用程序 ID。
您也可以手动设置(如果不使用包)。只需使用它的 id 设置名称设置:
void SetAppID(HWND hWnd, int iAppID)
{
IPropertyStore *pps;
HRESULT hr = SHGetPropertyStoreForWindow(hWnd, IID_PPV_ARGS(&pps));
if (SUCCEEDED(hr))
{
PROPVARIANT pv;
if (iAppID >= 0)
{
hr = InitPropVariantFromString(c_rgszAppID[iAppID], &pv);
}
else
{
PropVariantInit(&pv);
}
if (SUCCEEDED(hr))
{
hr = pps->SetValue(PKEY_AppUserModel_ID, pv);
PropVariantClear(&pv);
}
pps->Release();
}
}
然后这样称呼它:
private static void SetWindowAppId(string appId)
{
Microsoft.WindowsAPICodePack.Shell.ShellNativeMethods.SetWindowAppId
(OwnerHandle, "the name you want to display here");
}
有关完整示例,请参阅 here。
【讨论】: