1. 程式人生 > >控制其他程序上的控制元件

控制其他程序上的控制元件

C#呼叫其他程式,比如控制別的程式上的按鈕


//步驟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;