【问题标题】:Windows 10 - Taskbar - Add item to context menu for each programWindows 10 - 任务栏 - 将项目添加到每个程序的上下文菜单
【发布时间】:2020-07-01 01:24:38
【问题描述】:

我需要任务栏中每个程序的上下文菜单项。想要添加一个立即终止进程的条目(类 UNIX/Linux 信号 SIGKILL)。这个网站上有很多问题,它是如何为资源管理器或桌面完成的。但是是否也可以在任务栏的上下文菜单中添加这样的选项?

为了澄清这个问题,根据我的 cmets:

目前的问题:

我有一个随机崩溃的程序(不是 Firefox)。该程序处于全屏模式。但是如果我想用退出窗口关闭程序的窗口,Windows 杀死程序需要很长时间。当我尝试打开任务管理器时,程序会立即获取用户输入,我没有机会与任务管理器进行交互。所以我的解决方案是在任务栏中添加一个上下文菜单项来退出程序的任务。根据用户评论,我在任务管理器中测试了“始终在最前面”选项。不知道那个。但我还没有尝试过。如果 WINAPIWindows Registry 中有添加项目的功能,我也对进一步的项目感兴趣。

为了避免投反对票:

我对破解 Windows 或应用程序不感兴趣。代码注入的解决方案对我来说是禁忌。如果可能的话,想要一个干净的解决方案。我想改进我的 Windows 版本。在上下文菜单中添加一些附加信息(进程信息)。

目前已找到this (Registering shell extension handlers)。 以前有人用过这个吗?我认为这听起来很有希望。

【问题讨论】:

  • AFAIK,没有 API 可以将自定义上下文菜单添加到您无法控制的任何应用程序的任务栏按钮。应用程序必须通过可用的任务栏 API 添加自己的菜单项。要执行您的要求,需要将代码注入每个显示任务栏按钮的正在运行的进程中
  • ICustomDestinationList::AddUserTasks。将其推入其他流程是您必须弄清楚的事情。
  • 我看到的一个问题是任务栏中列出的一个程序可能有多个实例正在运行,即多个进程。此外,单个实例可能包含几个不同的进程。例如,一些程序由一个启动器进程和一个主进程组成。您无法知道要杀死哪些进程,因为程序不提供此信息。
  • @AndreasWenzel 好的,这很好。但是当 UI 线程被杀死时我会很高兴。问题:我有一个错误的程序,它在全屏时崩溃并获取用户输入。我可以打开 Windows 任务管理器,但是当我尝试单击任务管理器时,有问题的程序会立即获取所有用户输入。我希望这个选项从操作系统中取回控制权。只有上下文菜单有效,但 Windows “踢”该程序需要很长时间。
  • @krjdev:这是another link,看起来很有趣。这是一个微软博客写的页面。

标签: c++ windows winapi registry shell-extensions


【解决方案1】:

没有 API 可以像这样扩展这个菜单。应用程序可以使用ICustomDestinationList 自定义菜单顶部,但无法为所有应用程序添加条目。

对于个人使用的项目,您可以在Explorer.exe的任务栏实例中注入一个.dll,并在确定创建菜单的函数地址后添加您的项目。这个地址当然可以在你升级 Windows 之后改变,所以它不是一个非常通用的解决方案。使用公共符号可能会有所帮助,但当 Microsoft 更改其部分任务栏代码时,您仍然不得不期望它会不时中断。

【讨论】:

  • this 怎么样?对我来说听起来很有希望,但还没有尝试过。我的意图是扩展外壳。
  • @krjdev - 这只是扩展 Shell 的一般机制。 Shell 扩展类型列表是固定的,没有什么可以帮助您解决问题。有关 Windows 7 新任务栏的所有可用信息都在这里:docs.microsoft.com/en-us/windows/win32/shell/taskbar-extensions 实际上,如果您仔细阅读,可能会有一些帮助(但与您最初的要求不同)
【解决方案2】:

您无需更改 explorer.exe 中的代码,因为您可以通过键盘快捷键:Alt + F4 关闭程序。

【讨论】:

  • 你必须先点击程序。
猜你喜欢
  • 2012-11-08
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
  • 2010-12-06
  • 1970-01-01
  • 2014-03-22
相关资源
最近更新 更多