如何控制其它程序(*.exe)中的工具条的某个按钮(点击动作)?(100分)

  • 主题发起人 主题发起人 星空
  • 开始时间 开始时间
取得那个按钮的句柄,向它发消息
 
可是如何取得它的句柄呢。我只有它的可执行程序。
 
先执行这个程序
然后,用ms的vs中的那个spy++的tool来获得该button的handle
 
很遗憾,找出来了不少handle,可分不清哪一个是所需的,怎么办?
 
感兴趣!
 
你只要点击你要的那个,SPY中变化的就是!
 
点击后,window窗口无变化,message窗口中的点击事件得出的是控件所在窗体的句柄00000820,
wparam:00000820,lparam:02010001。这表示什么,没发现那button的句柄。
 
hackjapan,我服了你了,这么笨的方法??
这个问题难吗?
第一步:找到Button所在窗口句柄:
var H : THandle;
H := FindWindow( nil, '程序Caption' );
第二步:找到Button句柄:
EnumChildWindows( H, @EnumerateChildWindows, 0 );
第三步:发送消息:
Sendmessage(H,WM_...,0,0);
程序参考:

//回调函数,列出所有子窗口句柄
var
; HEdt : THandle;
function EnumerateChildWindows(hWnd: HWND; lParam: LPARAM): BOOL;
var
; WindowCaption:array[0..254] of Char;
begin
; GetWindowText(Hwnd,WindowCaption,255);
; if WindowCaption = '是我要的' then
; ; HEdt := hWnd;
; Result:=TRUE;
end;

procedure TFindForm.Button2Click(Sender: TObject);
var
; H : HWnd;
; I : Integer;
begin
; H := FindWindow( nil, '程序Caption');
; if H = 0 then exit;
; EnumChildWindows( H, @EnumerateChildWindows, 0 );
; SendMessage( HEdt, WM_SETTEXT, 255, LongInt(PChar('afdasf');
; SendMessage( HBtn, BM_CLICK, 0, 0 );
end;
 
可是,大侠,那程序是别人写的,我根本不知道它的text是什么啊,还有HBtn代表的是哪个?
 
handle:=findwindow(classname,windowtext);
sendmessage(handle,message,lparam,wparam);
...
classname可以用spy++或者winsight得到
 
多人接受答案了。
 
后退
顶部