我最近发现了进程浏览器(https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx),并希望将其添加到右键单击任务栏时的上下文菜单中。它有替换任务管理器的选项,但我想保留两者。我想在任务管理器下方添加一个名为 Process Explorer 的菜单,红色箭头指向的位置。我在注册表中的哪里可以找到它?我一直在搜索,但我找不到注册表编辑器下此上下文菜单的位置。
编辑:我使用的是 Windows 8.1 专业版,知道如何使用注册表编辑器,对资源黑客也略知一二。我一直在寻找任务栏、任务管理器、锁定任务栏等的任何寄存器值,但我什么也没找到。我复制了一份 explorer.exe 进行分析,但我没有看到任何真正可编辑的内容。任何帮助都非常感谢 :)
EDIT2:我知道如何将自定义项目添加到右键单击上下文菜单,但我需要将其添加到任务栏上的上下文菜单,但我找不到。有人能帮帮我吗?
答案1
(根据 TO 的要求从评论中复制):
问题是,据我所知,这个菜单不是由注册表中的外部参数或其他东西定义的,它只是 explorer.exe 内部逻辑的一部分。所以我们需要有效地修改 explorer.exe 的逻辑,这可以通过将我们自己的代码加载到其中并拦截打开弹出窗口的操作来实现,以便我们可以添加项目,然后拦截 Windows 的消息,即有人单击了我们的项目,以便我们对其做出反应。
我知道的唯一方法是构建一个工具,使用全局钩子将 DLL 注入资源管理器WH_CALLWNDPROC
,以便操作菜单来WM_INITMENUPOPUP
添加菜单项,并WM_COMMAND
通过打开进程资源管理器对新添加的菜单项发送的消息做出反应。
不过我现在没有时间自己构建这个工具,但我可以给出提示:
您需要在 Google 上搜索窗口钩子 ( SetWindowsHookEx
, CallWndProc
)、窗口消息处理 (如果您不熟悉) 和窗口子类化 ( SetWindowLong
, GWL_WNDPROC
, CallWindowProc
)。识别 explorer: GetModuleFileName
(当您的钩子加载到其中时)。识别要修改的正确菜单 (使用 修改InsertMenuItem
:) 本身就是一项挑战(尽管您可能可以检查现有菜单项的 ID 来识别菜单 - GetMenuItemCount
, GetMenuItemInfo
)。要最终运行 Process Explorer,您需要CreateProcess
或ShellExecute
。
这当然可以与我的评论在这里但这没有多大意义,因为如果您无论如何都要使用挂钩方法,您也可以从那里添加项目,而不必修改任何系统文件。
答案2
编辑 :这不是正确答案,但为了完整性和历史性,我将把它留在这里。
它在里面shell32.dll
尝试运行:
grep -ain "taskmgr.exe" shell32.dll > shell32-grep.txt
您收到的大多数文本都是 xml。使用文本编辑器打开它并搜索taskmgr.exe
,您会在标签中找到它<sh:command>
。环顾四周,您会在其他标签下看到其他选项(以及许多其他选项)<sh:command>
。
例如,%windir%\system32\rundll32.exe shell32.dll,Options_RunDLL 3
命令是属性按钮。
据我所知,您唯一的选择是使用 dll 编辑器编辑 shell32.dll 并希望获得成功:)
答案3
可能不是您想要的,但您可以随时创建一个文件夹,将您想要的各种程序的快捷方式(如 Process Explorer)放入其中,然后将其作为新工具栏添加到任务栏。