TCppWebBrowser HTML input 欄位若為file 無法輸入 |
尚未結案
|
asan
一般會員 發表:5 回覆:8 積分:2 註冊:2003-05-12 發送簡訊給我 |
Dear All
以下程式碼~不知道那用錯了~使用~TCppWebBrowser 元件~就是無法在html
input type=file 的欄位內填入值~只能用手動填
不知道程式那裡出錯~或是~input type=file 的不能直接用 value 填值~
這個問題也困擾我很久~
之前是用~eachbutton.OleFunction("click");的方式強破自動按上傳鈕再去選要上傳的檔案~
但這樣的做法~程式的主控性變低~
不知道那位大大對此問題有所了解~
非常感謝~
------------------- Variant disp,eachbutton,dhtmlbutton;
disp = CppWebBrowser1->Document;
dhtmlbutton = disp.OleFunction("getElementsByName","to"); //取得所有tag是input的集合
if (!dhtmlbutton.IsNull()) //如果有找到按鈕
{
eachbutton = dhtmlbutton.OleFunction("item",0);
eachbutton.OlePropertySet("value","TEST@gmail.com");
}
/// 可正常填入 HTML input type=text disp = CppWebBrowser1->Document;
dhtmlbutton = disp.OleFunction("getElementsByName","file"); //取得所有tag是input的集合
if (!dhtmlbutton.IsNull()) //如果有找到按鈕
{
eachbutton = dhtmlbutton.OleFunction("item",0);
eachbutton.OlePropertySet("value","c:\text.txt"); }
/// 無法正常填入 HTML input type=file ** 無法用程式填入 造成檔案無法上傳 發表人 - asan 於 2005/07/05 23:40:09 發表人 - asan 於 2005/07/05 23:43:25
|
asan
一般會員 發表:5 回覆:8 積分:2 註冊:2003-05-12 發送簡訊給我 |
|
asan
一般會員 發表:5 回覆:8 積分:2 註冊:2003-05-12 發送簡訊給我 |
引言: 沒有人有任何想法嗎~ 我目前也無解~~ 本來想用~NMSMTP1 元件寄mail 但又遇到一個問題~ 那就是~要如何用NMSMTP1 但可用SSL 或怎是說~NMSMTP1 有沒有password的屬性啊~ 只看到~ NMSMTP1->Host = Edit1->Text; NMSMTP1->UserID = Edit2->Text; NMSMTP1->Connect(); ..... 沒有password... help~真的沒解嗎~ 因為如果這個沒解~我程式就寫不下去了~ 這對我來說是很重要的功能~~ |
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
asan
一般會員 發表:5 回覆:8 積分:2 註冊:2003-05-12 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
asan
一般會員 發表:5 回覆:8 積分:2 註冊:2003-05-12 發送簡訊給我 |
引言: 把你要上傳的 網址 傳給我, 我改給你看...真的實在太感謝你了~ 這麼熱心~ 我的問題如上面所說~ 是用CppWebBrowser 無法在上傳檔案時 "劉覽"內直接填入要傳的檔案名稱 disp = CppWebBrowser1->Document; dhtmlbutton = disp.OleFunction("getElementsByName","file0"); //取得所有tag是input的集合 if (!dhtmlbutton.IsNull()) //如果有找到按鈕 { eachbutton = dhtmlbutton.OleFunction("item",0); eachbutton.OlePropertySet("value","C:\gbox.txt"); <=== 填不進去~ } 我要上傳的網址是gmail ~ 主要就是要做~gmail 內附加檔案上傳的功能~ 現在就是只能用選的€只差這個~其他的我都會用了~ |
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
我沒有 gmail 帳號, 所以無法取得上傳網頁的內容 不過我可以解說我的作法: 無法輸入是因為 M$ 把輸入欄截掉了.
所以我就去 "按" 瀏覽 那個 Button 把 "選擇檔案"那個視窗叫起來, 但是在我 "按" 之前, 我啟動一個 Thread 去找 "選擇檔案"那個視窗. 當"按" 瀏覽那個 Button 後, "選擇檔案"視窗跳出 就會被我的 Thread 抓到, 並找到檔名輸入框的 Handle, 然後用 PostMessage ㄧ個字一個字輸入檔案所在路徑及名稱, 然後再PostMessage送ㄧ個KeyDoown, 模擬按下 [Enter] "選擇檔案"視窗
預設的 OK 按鈕 這樣就把檔名輸進去了. Delphi 的程式碼你應該可以看的懂吧?
看不懂我再幫你轉... 以下是我的 Thread 所做的事
procedure MyInputThread.Execute; var DlgHwnd,SubHWnd : THandle; sFn: String; i: Integer; begin { Place thread code here } sFn := 'c:\aaa.txt'; // 欲輸入的檔案 while (True) do // 無窮迴圈, 直到完成任務或被終止 begin DlgHwnd := FindWindow('#32770','選擇檔案'); // 找出是否有"選擇檔案"視窗跳出 FindWindow 是 Window API if DlgHwnd>0 then // 找到視窗 begin // 以下是用 Spy 去找出輸入框的Class Tree 後 ㄧ層ㄧ層取得輸入框的 Handle, FindWindowEx 也是 Window API SubHWnd := FindWindowEx(DlgHwnd,0,'ComboBoxEx32',nil); SubHWnd := FindWindowEx(SubHWnd,0,'ComboBox',nil); SubHWnd := FindWindowEx(SubHWnd,0,'Edit',nil); if SubHWnd<>0 then // 找到輸入框 begin for i := 1 to Length(sFn) do begin Sleep(50); PostMessage(SubHWnd,WM_CHAR,Ord(sFn[i]),0); // 將檔名ㄧ個字一個字 Post 進去 end; PostMessage(DlgHwnd,WM_KEYDOWN,13,0); //模擬對選擇視窗按下Enter PostMessage(DlgHwnd,WM_KEYUP,13,0); break; end; end; Sleep(50); if Terminated then break; end; end;這樣解釋你了解了嗎? |
asan
一般會員 發表:5 回覆:8 積分:2 註冊:2003-05-12 發送簡訊給我 |
|
Ktop_Robot
站務副站長 發表:0 回覆:3511 積分:0 註冊:2007-04-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |