全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:10115
推到 Plurk!
推到 Facebook!

利用FindWindow將其他form物件下所有的資料取出來

 
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-14 01:48:41 IP:61.221.xxx.xxx 未訂閱
目的1:  解決 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30329 之問題    目的2:  本程式利用 FindWindow 及 EnumChildWindows 將其他 form 物件下的所有子物件之classname 及 有文字的內容取出. 通常我們想要在目前的視窗 form 下找其上的一些資訊, 這支小程式很好用. 用來解讀其他程式跑出的 alert message, prompt message 等都能夠取得到. 使用API 有 FindWindow , EnumChildWindows , 及 SendMessage 配合 WM_GETTEXT 參數以取得文字內容, 接下來的利用就可以寫一些檢查程式是否作業正常或是可以再加上一些程式來進行操作該程式的動作..  舉一個例子, 在 src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=9517404&CC=212856"> 利用本程式將可以取得該 messagedlg 的三個 button 及訊息資料如下:
附加檔案:30409_GetData_Sample.zip
njjsl
一般會員


發表:1
回覆:2
積分:0
註冊:2003-10-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-21 20:59:55 IP:211.87.xxx.xxx 未訂閱
请问如何模拟点击确定按钮
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-21 22:09:22 IP:61.62.xxx.xxx 未訂閱
對該 button 的 handle 送出 WM_LBUTTONDOWN, WM_LBUTTONUP 即可, 如: SendMessage(h_button, WM_LBUTTONDOWN, 0, 0); SendMessage(h_button, WM_LBUTTONUP, 0, 0);
washare
初階會員


發表:14
回覆:36
積分:35
註冊:2006-10-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-11-10 00:00:29 IP:203.204.xxx.xxx 訂閱
請問如果一個button被disable了,要送那個一訊息才能讓它變成enable呢?謝謝
hotswin
中階會員


發表:72
回覆:92
積分:52
註冊:2003-11-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-01-05 11:12:10 IP:59.125.xxx.xxx 訂閱
請問如何 要找取 ListBox的Item值 要怎麼抓呢
我用這支來測都是空的
------
xinjier禮品贈品
bruce
中階會員


發表:19
回覆:121
積分:83
註冊:2002-04-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-02-01 17:03:53 IP:211.21.xxx.xxx 訂閱
很好用的功能,本公司的傳真系統不支援整批自動傳真,利用本功能找出視窗後,模擬輸入資料,並自動啟動傳送,原本需要一張張逐次傳送,變成批次傳送,非常方便,感謝分享。
anyone
中階會員


發表:1
回覆:63
積分:52
註冊:2007-02-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-05-07 11:06:47 IP:59.127.xxx.xxx 未訂閱
好像過了好久了,不過沒人回答
剛好路過看到就回一下
你可以用EnableWindow(Button.Handle, true)
就可以讓它變成enable
反之設false,則就是disable
===================引 用 washare 文 章===================
請問如果一個button被disable了,要送那個一訊息才能讓它變成enable呢?謝謝
rachex2000
一般會員


發表:21
回覆:32
積分:20
註冊:2003-04-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-07-31 17:00:08 IP:203.66.xxx.xxx 訂閱
這樣表示我若寫一支視窗程式,即使將按鈕disable,別的程式還是有辦法強迫按下按鈕執行裡面的程式摟?這樣不是很不安全嗎?


===================引 用 anyone 文 章===================
好像過了好久了,不過沒人回答
剛好路過看到就回一下
你可以用EnableWindow(Button.Handle, true)
就可以讓它變成enable
反之設false,則就是disable
===================引 用 washare 文 章===================
請問如果一個button被disable了,要送那個一訊息才能讓它變成enable呢?謝謝




T-Jason
一般會員


發表:5
回覆:20
積分:10
註冊:2003-05-19

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-07-31 17:59:39 IP:219.87.xxx.xxx 未訂閱
曾試過讓Disable的button 改為 enable,但沒做用,不解的是我用 delphi 寫的程式 enable 後有做用 ??? 

===================引 用 rachex2000 文 章===================
這樣表示我若寫一支視窗程式,即使將按鈕disable,別的程式還是有辦法強迫按下按鈕執行裡面的程式摟?這樣不是很不安全嗎?


===================引 用 anyone 文 章===================
好像過了好久了,不過沒人回答
剛好路過看到就回一下
你可以用EnableWindow(Button.Handle, true)
就可以讓它變成enable
反之設false,則就是disable
===================引 用 washare 文 章===================
請問如果一個button被disable了,要送那個一訊息才能讓它變成enable呢?謝謝




anyone
中階會員


發表:1
回覆:63
積分:52
註冊:2007-02-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-08-01 09:55:44 IP:59.127.xxx.xxx 未訂閱
是的,只要偵測的到按鈕,取得其Handle值
就可以按下去,我有試過就算按鈕disable
不用透過enable就可將按鈕給按下。
如您所說的確是不安全,安全的方式還是有人做出來
就是讓按鈕沒有Handle值,或是用Static的方式
使得送按下的訊息也沒有用
至於如何做,小弟我也很想知道
===================引 用 rachex2000 文 章===================
這樣表示我若寫一支視窗程式,即使將按鈕disable,別的程式還是有辦法強迫按下按鈕執行裡面的程式摟?這樣不是很不安全嗎?


===================引 用 anyone 文 章===================
好像過了好久了,不過沒人回答
剛好路過看到就回一下
你可以用EnableWindow(Button.Handle, true)
就可以讓它變成enable
反之設false,則就是disable
===================引 用 washare 文 章===================
請問如果一個button被disable了,要送那個一訊息才能讓它變成enable呢?謝謝

?


anyone
中階會員


發表:1
回覆:63
積分:52
註冊:2007-02-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-08-01 09:57:59 IP:59.127.xxx.xxx 未訂閱
一定可以啦!不過若要按下的話,直接送按下的訊息就好
不用enable按鈕了,試試吧!
===================引 用 T-Jason 文 章===================
曾試過讓Disable的button 改為 enable,但沒做用,不解的是我用 delphi 寫的程式 enable 後有做用 ???

===================引 用 rachex2000 文 章===================
這樣表示我若寫一支視窗程式,即使將按鈕disable,別的程式還是有辦法強迫按下按鈕執行裡面的程式摟?這樣不是很不安全嗎?


===================引 用 anyone 文 章===================
好像過了好久了,不過沒人回答
剛好路過看到就回一下
你可以用EnableWindow(Button.Handle, true)
就可以讓它變成enable
反之設false,則就是disable
===================引 用 washare 文 章===================
請問如果一個button被disable了,要送那個一訊息才能讓它變成enable呢?謝謝




rachex2000
一般會員


發表:21
回覆:32
積分:20
註冊:2003-04-28

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-08-03 09:54:32 IP:203.66.xxx.xxx 訂閱
我試過,發現以下程式可以將另一程式(一Form與一被disable的按鈕)的按鈕enable並按下, 但只有看到按鈕按下的動作,部會執行Click事件內的程式碼,不過按鈕enable後, 手動按下,就可以執行Click事件內的程式碼,所以確實有安全性的問題, 不寫 EnableWindow(h, true); 那行,則按鈕還是不能按下,和前文說得不同,  有辦法執行到OnClick事件內的程式碼嗎?  


<textarea cols="60" rows="10" class="delphi" name="code"> function EnumChildProc(h: hwnd; a: integer): boolean; stdcall; var str: array[0..1024] of Char; begin result := true; if h <> 0 then begin GetClassName(h, str, 1024); Form1.Memo1.Lines.Add('classname=' str); SendMessage(h, WM_GETTEXT, 1024, integer(@str[0])); Form1.Memo1.Lines.Add('gettext=' str); Form1.Memo1.Lines.Add(''); EnableWindow(h, true); SendMessage(h, WM_LBUTTONDOWN, 0, 0); end; end; procedure TForm1.Button2Click(Sender: TObject); var h: HWND; hButton: HWND; begin h := FindWindow(nil, PChar(Edit1.Text)); if h <> 0 then begin EnumChildWindows(h, @EnumChildProc, 0); end; end; </textarea>
編輯記錄
rachex2000 重新編輯於 2007-08-03 09:56:20, 註解 無‧
rachex2000 重新編輯於 2007-08-03 09:57:39, 註解 無‧
rachex2000 重新編輯於 2007-08-03 09:58:30, 註解 無‧
rachex2000 重新編輯於 2007-08-03 09:59:30, 註解 無‧
anyone
中階會員


發表:1
回覆:63
積分:52
註冊:2007-02-12

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-08-03 11:07:37 IP:59.127.xxx.xxx 未訂閱
你把SendMessage(h, WM_LBUTTONDOWN, 0, 0);這一行改成
SendMessage(h, BM_CLICK,0,0);就會執行Click事件了
不寫EnableWindow(h, true)就可以按下,之前我試可以(不過不是我寫的視窗Button)
我自己寫一個去試的確不行,那就麻煩一點多加一句Enablewindow就好了
===================引 用 rachex2000 文 章===================
我試過,發現以下程式可以將另一程式(一Form與一被disable的按鈕)的按鈕enable並按下, 但只有看到按鈕按下的動作,部會執行Click事件內的程式碼,不過按鈕enable後, 手動按下,就可以執行Click事件內的程式碼,所以確實有安全性的問題, 不寫 EnableWindow(h, true); 那行,則按鈕還是不能按下,和前文說得不同, 有辦法執行到OnClick事件內的程式碼嗎?


<textarea class="delphi" rows="10" cols="60" name="code"> function EnumChildProc(h: hwnd; a: integer): boolean; stdcall; var str: array[0..1024] of Char; begin result := true; if h <> 0 then begin ????GetClassName(h, str, 1024); ????Form1.Memo1.Lines.Add('classname=' str); ????SendMessage(h, WM_GETTEXT, 1024, integer(@str[0])); ????Form1.Memo1.Lines.Add('gettext=' str); ????Form1.Memo1.Lines.Add(''); ????EnableWindow(h, true); ????SendMessage(h, WM_LBUTTONDOWN, 0, 0); end; end; procedure TForm1.Button2Click(Sender: TObject); var h: HWND; hButton: HWND; begin h := FindWindow(nil, PChar(Edit1.Text)); if h <> 0 then begin ????EnumChildWindows(h, @EnumChildProc, 0); end; end; </textarea>
系統時間:2024-07-03 8:59:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!