如何修改别的程序的系统菜单?(30分)

  • 主题发起人 主题发起人 lixx
  • 开始时间 开始时间
L

lixx

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在我自己的程序中修改别的程序的系统菜单。
(当然前提是我已经启动了这个外部程序)
比如:
我先启动计算器程序calc.exe,然后再修改它的系统菜单。

我该怎么做?
 
procedure TForm1.Button1Click(Sender: TObject);
var
hSysMenu: hMENU;
hWindow : THandle;
begin
hWindow := FindWindow(nil, '计算器');
hSysMenu:=GetSystemMenu(hWindow,False);//得到系统菜单句柄
AppendMenu(hSysMenu,MF_SEPARATOR,0,'');//添加一个分隔符
AppendMenu(hSysMenu,MF_STRING,3,'关于(&A)');
end;
 
如何让外部程序的最大化最小化按钮不能用(即变灰)?
我用
EnableMenuItem(hSysMenu,'SC_CLOSE',MF_COMMAND|MF_GRAYED);
实现了让外部程序的关闭按钮变灰,可是实现不了让最大化最小化按钮变灰?
为什么?有没有帮助一下?
 
最小化好像不行,

EnableMenuItem(hSysMenu,SC_CLOSE,MF_DISABLED or MF_GRAYED);

EnableMenuItem(hSysMenu,SC_MINIMIZE,MF_DISABLED or MF_GRAYED);

EnableMenuItem(hSysMenu,SC_MAXIMIZE,MF_DISABLED or MF_GRAYED);
 
> EnableMenuItem(hSysMenu,SC_CLOSE,MF_DISABLED or MF_GRAYED);
> EnableMenuItem(hSysMenu,SC_MINIMIZE,MF_DISABLED or MF_GRAYED);
> EnableMenuItem(hSysMenu,SC_MAXIMIZE,MF_DISABLED or MF_GRAYED);
后面两个不行!
第一个关闭按钮却可以,这挺怪的!!
 
另外我发现 让关闭按钮变灰之后,再也变不回来了!
比如下面这句是不行的
EnableMenuItem(hSysMenu,SC_CLOSE,MF_COMMAND|MF_ENABLE);
 
后退
顶部