从 C# 更改正在运行的进程的 ApplicationID

发布于 2024-08-24 13:42:43 字数 425 浏览 7 评论 0原文

在 Windows 7 中,我们有 ApplicationID 的概念,它允许(除其他外)对任务栏中的多个图标进行分组。 如何从 C# 更改正在运行的进程的 ApplicationID?我正在尝试使用另一个应用程序制作我的 WinForm 应用程序的图标组。 我尝试过使用 Windows API 代码包库,将以下代码粘贴到我的 Load 事件中...但它不起作用。建议?

TaskbarManager.Instance.ApplicationId = "MyAppID";    
Process[] p = Process.GetProcessesByName("OtherProcess");
TaskbarManager.Instance.SetApplicationIdForSpecificWindow(p[0].MainWindowHandle, "MyAppID");

In Windows 7 we have the concept of ApplicationID, which allows (among other things) to group several icons in the task bar.
How can I change the ApplicationID of a running process from c#? I'm trying to make my WinForm app's icon group with another application.
I've tried using Windows API Code Pack Library, sticking the following code in my Load event... but it didn't work. Suggestions?

TaskbarManager.Instance.ApplicationId = "MyAppID";    
Process[] p = Process.GetProcessesByName("OtherProcess");
TaskbarManager.Instance.SetApplicationIdForSpecificWindow(p[0].MainWindowHandle, "MyAppID");

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

樱花坊 2024-08-31 13:42:43

我重现这个。我认为 SDK 文档是错误的,而 SetApplicationIdForSpecificWindow() 方法的 XML 文档是正确的:

AppId指定唯一的应用程序
用户模型 ID (AppID)
应用程序或个人顶层
任务栏按钮将保持的窗口
通过构建的自定义JumpList
方法类。

通过为特定的应用程序设置appId
窗口,窗口不会被分组
及其父窗口/应用程序。
相反,它将有自己的任务栏
按钮。

我强调不是。

I repro this. I think the SDK docs are wrong and the XML docs for the SetApplicationIdForSpecificWindow() method are correct:

AppId specifies a unique Application
User Model ID (AppID) for the
application or individual top-level
window whose taskbar button will hold
the custom JumpList built through the
methods class.

By setting an appId for a specific
window, the window will NOT be grouped
with it's parent window/application.
Instead it will have it's own taskbar
button.

I emphasized NOT.

眼泪也成诗 2024-08-31 13:42:43

一个(有点)明显的解决方案是将您想要组合在一起的两个窗口的应用程序 ID 设置为相同的 ID。

示例:

TaskbarManager.Instance.SetApplicationIdForSpecificWindow(win1.MainWindowHandle, "W00T");
TaskbarManager.Instance.SetApplicationIdForSpecificWindow(win2.MainWindowHandle, "W00T");

Aaaa,两个窗口将被分组在一起。

A (somewhat) obvious solution is to set both of the windows' Application IDs you want grouped together to the same ID.

Example:

TaskbarManager.Instance.SetApplicationIdForSpecificWindow(win1.MainWindowHandle, "W00T");
TaskbarManager.Instance.SetApplicationIdForSpecificWindow(win2.MainWindowHandle, "W00T");

Aaaaand both the windows will be grouped together.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文