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

TCppWebBrowser HTML input 欄位若為file 無法輸入

尚未結案
asan
一般會員


發表:5
回覆:8
積分:2
註冊:2003-05-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-05 23:38:32 IP:61.59.xxx.xxx 未訂閱
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-12 00:19:24 IP:61.59.xxx.xxx 未訂閱
沒有人有任何想法嗎~ 我目前也無解~~ 本來想用~NMSMTP1 元件寄mail 但又遇到一個問題~ 那就是~要如何用NMSMTP1 但可用SSL 或怎是說~NMSMTP1 有沒有password的屬性啊~ 只看到~ NMSMTP1->Host = Edit1->Text; NMSMTP1->UserID = Edit2->Text; NMSMTP1->Connect(); ..... 沒有password... help~
asan
一般會員


發表:5
回覆:8
積分:2
註冊:2003-05-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-30 10:44:53 IP:61.59.xxx.xxx 未訂閱
引言: 沒有人有任何想法嗎~ 我目前也無解~~ 本來想用~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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-14 21:40:31 IP:59.104.xxx.xxx 未訂閱
malanlk ~ 你所說的那兩個連結~ 我還是看不太出來那一個~可以解我的這個問題ㄟ~~ 能否再稍為提示一下~ 非常~謝謝~~
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-14 23:03:45 IP:61.219.xxx.xxx 未訂閱
把你要上傳的 網址 傳給我, 我改給你看...
asan
一般會員


發表:5
回覆:8
積分:2
註冊:2003-05-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-08-14 23:15:55 IP:59.104.xxx.xxx 未訂閱
引言: 把你要上傳的 網址 傳給我, 我改給你看...
真的實在太感謝你了~ 這麼熱心~ 我的問題如上面所說~ 是用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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-08-15 00:16:31 IP:61.219.xxx.xxx 未訂閱
我沒有 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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-08-15 09:48:15 IP:61.56.xxx.xxx 未訂閱
malanlk ~ 我大概了解了~ 太感謝了~回去再試試看~ 雖然我用的是bcb但我想~我應該可以自己轉~~ 謝謝~~
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-04-18 17:32:42 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-11-05 5:21:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!