【发布时间】:2020-07-01 01:24:38
【问题描述】:
我需要任务栏中每个程序的上下文菜单项。想要添加一个立即终止进程的条目(类 UNIX/Linux 信号 SIGKILL)。这个网站上有很多问题,它是如何为资源管理器或桌面完成的。但是是否也可以在任务栏的上下文菜单中添加这样的选项?
为了澄清这个问题,根据我的 cmets:
目前的问题:
我有一个随机崩溃的程序(不是 Firefox)。该程序处于全屏模式。但是如果我想用退出窗口关闭程序的窗口,Windows 杀死程序需要很长时间。当我尝试打开任务管理器时,程序会立即获取用户输入,我没有机会与任务管理器进行交互。所以我的解决方案是在任务栏中添加一个上下文菜单项来退出程序的任务。根据用户评论,我在任务管理器中测试了“始终在最前面”选项。不知道那个。但我还没有尝试过。如果 WINAPI 或 Windows 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