如何调用其他可执行程序,并操纵它的菜单(100分)

  • 主题发起人 主题发起人 naonao_1019
  • 开始时间 开始时间
N

naonao_1019

Unregistered / Unconfirmed
GUEST, unregistred user!
比如 在程序中调用系统的 画笔 程序 然后控制画笔程序中的菜单 例如将其同程序窗口
的菜单合并、默认打开一幅图象等。
 
winexec('c:/windows/...',1)可以让某程序执行

获得画笔程序的句柄后可以通过发送消息,控制程序界面中的控件。

菜单合并,不知道什么意思。估计是com类问题,这个画笔程序办不了。
 
这里是一个控制另一个程序按钮的例子,你参考一下吧

function EnumWindowsProc(AHWnd: HWnd; LPARAM: lParam): boolean; stdcall;
var
WndCaption: array[0..254] of char;
WndClassName: array[0..254] of char;
rtscreen: trect;
WinXY:TRect;
xy:TPoint;
begin
GetWindowText(AHWnd, @WndCaption, 254);
GetClassName(AHWnd, @WndClassName, 254);
if (pos('CashSurfers.com',wndcaption)<>0) then //用你已知的窗口标题替换这里, 找到此窗口
begin
ahwnd:=findwindowEX(ahwnd,0,pchar('TButton'),pchar('Cool!')); // 找到窗口上的按钮
GetWindowRect(AHWnd,WinXY); // 得到按钮的坐标范围
xy:=WinXY.TopLeft; // 取得按钮左上角的坐标
xy.x:=xy.x+10;
xy.y:=xy.y+10;
SetCursorPos(xy.x,xy.y); // 将Mouse定位到按钮上
Mouse_Event(MOUSEEVENTF_LEFTDown,xy.x,xy.y,0,0); // 按下左键
Mouse_Event(MOUSEEVENTF_LEFTUP, xy.x,xy.y,0,0); // 按下右键
end;
Result := True ;
end;
 
这样控制太难了!
 
调用程序 是没问题的

不过控制菜单 好像有点难度
 
调用支持OLE的程序可以用菜单合并,不支持OLE的则不行
 
请查收邮件,我有一个很详细的例子!!!
 
如果是自己的程序没有问题,可以定义自己的消息
如果是别人的程序,那恐怕够呢折腾的啦
 
多人接受答案了。
 
后退
顶部