線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3151
推到 Plurk!
推到 Facebook!

該如何實作?

 
adonis
高階會員


發表:140
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-06-26 17:51:51 IP:163.28.xxx.xxx 未訂閱
我手邊有一支別人寫的程式,固定每天要去作一些操作,會在其Edit上填一些 資料再按Button來執行,但重覆的動作我想寫一個小程式讓它可以自動化,所 以我必須先找出該Form上有哪些元件,再針對該元件來送訊息(SendMessage), 所以,我可能必須先找出如何得知該Form上有哪些元件,再對我所要的元件來 送訊息以達到我要的要求。我在深度歷險上有查到相關的資料,但對C我不懂 所以我也節錄給您參考,麻煩了,謝謝。 --------------------------------------------------- 如何獲得另一支程式上的所有Components, 並且呼叫,例如那支程式上 有Button1的OnClick的事件. 謝謝! 先呼叫 EnumWindows((WNDENUMPROC)CB_EnumWindowsProc,0); 接著實做一個Call back function 在這個函式裡面檢查所有視窗的標題Caption, 是否是妳要尋找的 bool __stdcall CB_EnumWindowsProc( HWND hWnd, long) { char title[250]; char className[95]; if ( hWnd ) { GetClassName(hWnd,className,95); GetWindowText(hWnd,title,110); if ( AnsiString(title) == "視窗標題" ) //比對視窗標題 EnumChildWindows( hWnd, (WNDENUMPROC)EnumChildWnd, 0); //找到則呼叫EnumChildWindows開始檢查該視窗裡的所有視窗元件 } return true;; } 接著實做另一個 Call back function 在這個函式裡面檢查該視窗裡的所有視窗元件的標題 Caption, 是否是妳要尋找的 bool __stdcall EnumChildWnd( HWND hWnd, long ) { char title[250]; char className[95]; if ( hWnd ) { GetClassName(hWnd,className,95); SendMessage( hWnd, WM_GETTEXT, 250, (LPARAM)title); if ( AnsiString( title ) == "確定" ) //比對按鈕上的文字 { //找到了則呼叫 SendMessage 發出"BM_CLICK" 訊息給該按鈕, 完成了! SendMessage(hWnd, BM_CLICK, 0, 0); } } return true; }
------
我也在努力學習中,若有錯謬請見諒。
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-06-28 16:11:09 IP:192.168.xxx.xxx 未訂閱
站長幫您翻好了: 但實際運用您要自己執行看看了!
procedure TForm1.Button2Click(Sender: TObject);
  function EnumChildWindowsProc(hwnd: Integer): Boolean; stdcall;
  var
    buffer: array[0..255] of Char;
    str:string;
  begin
    Result := True;
    GetClassName(hwnd,buffer,256);
    Form1.Memo1.Lines.add(buffer);
    if uppercase(buffer)='TBITBTN' then
    begin
       SendMessage(hWnd, BM_CLICK, 0, 0);
    end;
    if uppercase(buffer)='TEDIT' then
    begin
       str:='abc';
       SendMessage (hWnd, WM_SETTEXT, 0,longint(pchar(str)));
    end;
  end;
var
  hwnd: Integer;
  buffer: Array[0..1023] of Char;
begin
  Memo1.Clear;
  hwnd := FindWindow(nil,'form1');
  if hwnd<>0 then
      EnumChildWindows(hwnd,@EnumChildWindowsProc,Integer(@hwnd));
end;    
~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
sanwin
一般會員


發表:20
回覆:60
積分:16
註冊:2002-06-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-06-28 20:51:53 IP:61.225.xxx.xxx 未訂閱
只有幾行看的懂而已,其它的都有看沒有懂,好丟臉啊 我是剛入門的子弟,請大家多多指教!
------
我是剛入門的子弟,請大家多多指教!
adonis
高階會員


發表:140
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-06-29 09:36:30 IP:210.200.xxx.xxx 未訂閱
謝謝站長的回應。
------
我也在努力學習中,若有錯謬請見諒。
tonyplus
初階會員


發表:22
回覆:97
積分:28
註冊:2002-04-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-10-21 15:29:46 IP:211.23.xxx.xxx 未訂閱
引言: 謝謝站長的回應。
為什麼明明有button的程式,卻不能顯示在memo上呢?
5997
一般會員


發表:1
回覆:7
積分:1
註冊:2003-01-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-01-14 04:19:26 IP:203.77.xxx.xxx 未訂閱
小地不才剛好看到這篇,目前小弟也遇到這個問題,站長回答的我測試過沒有問題 但是我的問題更複雜,一直測不出來,希望有心人士可以幫忙一下 如果有二個TEDIT 但是我希望第一個TEDIT可以寫入ABC第二個可以寫入DEF 還有三個RadioButton 我希望選擇第3個RadioButton 還有也有三個CheckBox我希望選擇第2個CheckBox 上面還有四個BitBtn 我希望選擇BitBtn2按下 我找了好多方法都找不出來, 希望有人可以幫我寫一下程式碼, 謝謝
------
帥哥
liorex
初階會員


發表:19
回覆:60
積分:32
註冊:2002-08-20

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-01-15 18:12:47 IP:61.31.xxx.xxx 未訂閱
我是將要被控制的程式加上一個com obj 來做控制他的方法 
// send message 
procedure TForm1.Button1Click(Sender: TObject);
var
 Ik : IrecFrmMeg ;
begin
  IK := CreateComObject(CLASS_recFrmMeg) as IrecFrmMeg;
  iK.SetFrm(edit1.text,Edit2.text,strtoint(edit3.text),strtoint(edit4.text));
//----be Control
  TrecFrmMeg = class(TTypedComObject, IrecFrmMeg)
  protected
    function SetFrm(const edt1, edt2: WideString; rgid,
      chid: Shortint): HResult; stdcall;
    {Declare IrecFrmMeg methods here}
  end;    implementation    uses ComServ,unit1;    function TrecFrmMeg.SetFrm(const edt1, edt2: WideString; rgid,
  chid: Shortint): HResult;
begin
 with Form1 do
 begin
   Edit1.Text := edt1 ;
   Edit2.Text := edt2 ;
   RGPin.ItemIndex := rgid ;
   CheckBox1.Checked := chId = 1 ;
   CheckBox2.Checked := chid = 2 ;
   CheckBox3.Checked := chid = 3 ;
 end;    end;
end;     
5997
一般會員


發表:1
回覆:7
積分:1
註冊:2003-01-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-01-16 04:16:24 IP:203.77.xxx.xxx 未訂閱
謝謝你的回答非常感謝妳 我的問題已經解決了 我用最笨的方法,直接控制滑鼠點選就好了 Sleep(50); SetCursorPos(875,757); mouse_event(MOUSEEVENTF_RIGHTDOWN,875,757,0,0); mouse_event(MOUSEEVENTF_RIGHTUP,875,757,0,0); 用這個方法可以解決而且又不用找出classname粉方便 但是我又遇到了一個問題 [如何在目前游標的位置輸入文字] 希望大家可以幫幫忙 帥哥
------
帥哥
系統時間:2024-05-04 1:03:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!