//步骤1:
{-------------------------------------------------------------------------------
过程名: EnumChildWndProc
过程描述: 通过EnumChildWindows枚举窗体JSBYKP1中的所有控件
获取控件名称和类名称
作者: LYK
日期: 2018.10.29
参数: wnd: HWND; alparam: LPARAM
返回值: Boolean
-------------------------------------------------------------------------------}
function EnumChildWndProc(wnd: HWND; alparam: LPARAM): Boolean; stdcall;
var
aCaption: array [1..256] of Char;
aClass: array [1..256] of Char;
begin
GetClassName(wnd, @aClass, 256);
GetWindowText(wnd, @aCaption, 256);
Form1.mmo1.Lines.Add(StrPas(@aClass));
Form1.mmo1.Lines.Add(StrPas(@aCaption));
Form1.mmo1.Lines.Add('');
Result:= True;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
hdl:= FindWindow(nil, JSBYKP1);
EnumChildWindows(hdl, @EnumChildWndProc, 0);
end;
//步骤2:
{-------------------------------------------------------------------------------
过程名: TForm1.Button2Click
过程描述: 根据获取到的控件的名称,用FindWindowEx获取控件句柄
最后,用SendMessage发送控制消息
作者: LYK
日期: 2018.10.29
参数: Sender: TObject
返回值: 无
-------------------------------------------------------------------------------}
procedure TForm1.Button2Click(Sender: TObject);
var
hdl, hdlc: THandle;
begin
hdl:= FindWindow(nil, JSBYKP1);
begin
// hdlc:= FindWindowEx(hdl, 0, nil, ' Start (Space Key)');
// hdlc:= FindWindowEx(hdl, 0, nil, 'Scan USB'#13#10'(F5)');
hdlc:= FindWindowEx(hdl, 0, nil, 'Debug');
if hdlc<>0 then
begin
SetForegroundWindow(hdl);
Sleep(1000);
SendMessage(hdlc, BM_CLICK, 0, 0);
end;
end;
end;