问题描述的不是很清楚,不同的情况,解决的方法不一样。给你一个例子吧。
function GetEditHandle(hwnd: Integer; lparam: Longint):Boolean; stdcall;
var
buffer: array[0..255] of Char;
begin
Result := True;
//得到目标窗口的控件
GetClassName(hwnd,buffer,256);
//找到目标窗口的目标控件
if StrPas(Buffer)='TButton' then
begin
PInteger(lparam)^ := hwnd; //得到目标控件的Hwnd(句柄)
Result:=False; //终止循环
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Handle: Integer;
begin
Handle := FindWindow(nil,'对话模式'); //就是窗口的Caption
// Handle :=GetActiveWindow; //GetForegroundWindow;
if Handle<>0 then
begin
//在这里循环取到想要的句柄为止
EnumChildWindows(Handle,@GetEditHandle,Integer(@Handle));
//此时,Handle就是你要的句柄
PostMessage(Handle, BM_Click, 0, 0);
end;
end;