happytc 发表于 2011-2-26 03:42:34

如何得到windows任务栏某程序的右键菜单句柄?

本帖最后由 happytc 于 2011-2-26 08:03 编辑

原来写了个程序,就是改变任务栏上某程序的右键出来的菜单,给每一个在任务栏的程序右键出来的菜单增加一项“总在最前面”,如下图所示。
但现在源码我找不到了,想不起是怎么改的了。不得不在这里问一下。

怎么做到这样?实在想不起当时是怎么做的了。

不会全是一样的类名:#32768吧

或者换个问的方式吧:用au3写的程序,怎么写这个右键菜单(如添加几个选项)?现在就是想把如图所示的那个功能重新搞出来

gzh888666 发表于 2011-2-26 03:50:03

通过PID应该可以的

happytc 发表于 2011-2-26 04:06:51

回复 2# gzh888666

怎么得到?现在没有头绪呀

jxpxfeiw 发表于 2011-2-26 09:45:32

本帖最后由 jxpxfeiw 于 2011-2-26 09:49 编辑

http://www.autoitx.com/forum.php?mod=viewthread&tid=9439&highlight=Guimenu
是这样的效果 ?

激活窗口,用WinGetHandle获取窗口句柄,再用_GUICtrlMenu_GetMenu获取菜单句柄不就能添加了吗?

happytc 发表于 2011-2-26 10:22:58

回复 4# jxpxfeiw

这不就是标题所问的嘛,如何得到这个句柄?用WinGetHandle()肯定不行嘛

78391493 发表于 2011-2-26 10:26:33

GetSystemMenu
AppendMenu

ceoguang 发表于 2011-2-26 11:33:49

获取并不难,难的是如何让目标程序响应你的菜单,以下这个是以记事本为例(win7下需要编译).但是并不会响应你的 "Always on top"菜单.

#NoTrayIcon
#include <winapi.au3>
#include <GUIMenu.au3>
$hWnd = _WinAPI_FindWindow("Notepad","无标题 - 记事本")
ConsoleWrite($hWnd & @LF)
If $hWnd Then
        $SysMenu = _GUICtrlMenu_GetSystemMenu($hWnd)
        _GUICtrlMenu_InsertMenuItem($SysMenu, 7, "Always on top")
EndIf

如果要响应,还得要挂勾目标窗口的WM_SYSCOMMAND.

happytc 发表于 2011-2-26 11:48:53

回复 7# ceoguang

原来的我的那个程序是用C写的,就是想不起调用的是那个函数,看到au3调的_GUICtrlMenu_GetSystemMenu函数,马上就想起了C里是调用的HMENU GetSystemMenu(HWND hWnd,BOOL bRevert); 了。

哎,经常写些小程序,写完就扔了某个角落,时间长了就找不到了。现在这个小程序只剩下exe的了。
现在想用au3写个差不多功能的,居然找不到如何写了。
页: [1]
查看完整版本: 如何得到windows任务栏某程序的右键菜单句柄?