標籤:style class code http tar ext
WebBrowser自動填滿開啟檔案對話方塊
2013年06月24日 ⁄ 代碼 ⁄ 共 1456字 ⁄ 字型大小 小 中 大 ⁄ 暫無評論 ⁄ 閱讀 882 views 次
在使用WebBrowser編寫自動表單填寫軟體的時候,不知道大家是否遇到國填寫檔案選擇表單的情況。遇到這種情況的時候,無法直接隊Html元素賦值,必須類比手工選擇的辦法(是否有其它解決辦法,不得而知),下面我們來說一下我的解決辦法,如下:
1、先說一下正常表單的填寫方式,在Delphi+WebBrowser的環境下,可採用如下代碼:
1 |
WebBrowser.OleObject.document.all.item(‘XXX‘, 0).value :=xxx; |
2、針對於檔案選擇表單,我們可以先類比一下點擊,開啟檔案選擇對話方塊:
1 |
WebBrowser.OleObject.document.all.item(‘click‘, 0).value; |
3、然後我們採用枚舉子表單的辦法,找到檔案輸入位置,及"確定"按鈕,以類比選擇檔案:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
//... function EnumProc(Hwnd: THandle; LB: LongInt): Boolean; stdcall; //... function EnumProc(Hwnd: THandle; LB: LongInt): Boolean; stdcall; var CName: array[0..255] of char; path: string; i: integer; begin GetClassName(Hwnd, CName, 255); if CName = ‘Edit‘ then begin path := extractfilepath(Application.ExeName) + ‘檢索\‘ + nameStr + ‘.bmp‘; for i := 1 to length(path) do begin PostMessage(Hwnd, WM_CHAR, WPAram(path[i]), 1); end; //次數類比選擇檔案,就是將檔案的位置填寫到選擇框內。 end; if (TName = ‘開啟(&O)‘) or (TName =‘確定‘) then begin PostMessage(Hwnd, WM_LBUTTONDOWN, 0, 0); PostMessage(Hwnd, WM_LBUTTONup, 0, 0); //此處類比點擊 end; Result := True; end; //... Procedure FindWin();//調用 var Hwnd:THandle; begin hwnd := FindWindow(nil, Title); //Title為檔案選擇視窗標題 if Hwnd <> 0 then begin EnumChildWindows(Hwnd, @EnumProc, lp); end; end; |
3、需要注意事項:
上傳檔案表單對話方塊
a、選擇檔案對話方塊的視窗標題,在不同的IE核心下是不相同的,我在Win7及Xp上測試是兩種分別為"選擇文 件"、"選擇要負載檔案"。
b、在類比填寫的時候,需要注意,在提示開啟檔案的時候,代碼的運行是暫停,也就是說你必須線上程中進行類比開啟。
c、在檔案名稱輸入的時候,不要用SetWindowText函數,這個函數無法實現,只能採用發送WM_CHAR訊息的方式,類比字元輸入。
4、最後告誡大家,如果沒有特殊的密碼編譯演算法,或者其它限制,盡量直接採用Http協議來提交表單,否則有一些東西太過於麻煩。