有关模拟其它程序(Delphi应用程序)的弹出菜单操作的问题?

guangming84 2008-08-26 05:31:04
问题:
有一个Delphi的应用程序A(不能对应用程序做任何修改),现另外写一个程序B来模拟程序A中的弹出菜单操作,主要是菜单项的点击事件;已知在主菜单中可用SendMessage(hwnd,WM_COMMAND,uItem,0)来模拟菜单的操作,但在Delphi的弹出菜单中,要求不弹出菜单就能模拟菜单的点击事件,经过研究发现Delphi的弹菜单的消息发往到一个类名为"TPUtilWindow"的窗口,在没有弹菜单前,发送WM_COMMAND消息没有任何响应,当弹出菜单后就可以接收到响应,而当另一个弹出菜单弹出了,先前的那个菜单失去了响应,响应转移到了新弹出的菜单,基于“要求不弹出菜单就能模拟菜单的点击事件”本人想了很多办法都没能达到目的,希望大家给点意见,,或者大家提供点这方面的资料。在此先谢谢大家。。
...全文
204 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mocholax 2008-10-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ZengHD 的回复:]
Delphi(Pascal) code发送WM_COMMAND要把菜单的ID传过去,例如:

...................
[/Quote]
谢谢你,但是这个不是我所要的,就用这个例子吧,我想发送WM_COMMAND实现对任务管理器在系统托盘下的图标的右键弹出菜单的点击,
我在2楼应该也说清楚了。跟楼主的意思一样,SendMessage(h,WM_COMMAND,itemid,0)好像只能对mainmenu起作用。而我想要操作这个popupmenu的菜单项实行点击。
ZengHD 2008-10-09
  • 打赏
  • 举报
回复
发送WM_COMMAND要把菜单的ID传过去,例如:

procedure TForm1.Button1Click(Sender: TObject);
var
h:HWND;
m:HMENU;
begin
h:=FindWindow(nil,'Windows 任务管理器');
if h<>0 then
begin
// 调用 Windows 任务管理器 的确良“选择项...”
m:=GetMenu(h);
m:=GetSubMenu(m,2); // 调用主菜单的第三个 菜单项
SendMessage(h,WM_COMMAND,MakeLong(GetMenuItemId(m,3),0),m);// 调用主菜单的第四个 菜单项

end
else
MessageBox(Handle,'请运行Windows 任务管理器','提示信息',MB_OK);
end;
mocholax 2008-10-08
  • 打赏
  • 举报
回复
我也遇到跟你同样的问题,所以通过搜索引擎找到了这。我现在需要编程序实现对另一个程序的系统托盘的右键弹出菜单项发送一个点击的消息,用sendmessage还没找到方法,一直没有进展。不过我相信我能找到解决的办法的,到时候再回帖告诉你。

5,933

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧