控制其他程序上的控制元件
阿新 • • 發佈:2018-11-07
//步驟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;