控制ie打開的ftp網頁? |
答題得分者是:malanlk
|
takdick
一般會員 發表:50 回覆:63 積分:22 註冊:2002-08-05 發送簡訊給我 |
我知道使用TIEControllerm可控制ie的大部份功能,現請問可否用它做到控制ie打開某ftp網頁,輸入用戶名和密碼登錄,然後實現上傳和下載的功能?
請注意:我是要在MainForm.Button.Click裡實現登錄.上傳,下載等功能,不是在已打開的ie裡操作.可否做到?還是有其他更好方法?但一定要用ie打開ftp網頁.
謝謝.
procedure TMainForm.OpenBtnClick(Sender: TObject);
begin
IEControl := TIEController.Create(Self);
IEControl.IEOpen;
IEControl.IEVisible := True;
IEControl.IEURL :='ftp://server.com'
.......
.........
end;
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
takdick
一般會員 發表:50 回覆:63 積分:22 註冊:2002-08-05 發送簡訊給我 |
不是的(我原也以為是delphi的一個類),是從網上下載的源碼.
unit IEController; interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
shdocvw; type
EIEControlError = class(Exception);
EIEControlExecError = class(EIEControlError);
TIEController = class(TComponent)
private
{ Private declarations }
FIE: IWebBrowser2;
function GetIEAddressBarVisible: Boolean;
function GetIEFullScreen: Boolean;
function GetIEHeight: Integer;
function GetIELeft: Integer;
function GetIEMenuBarVisible: Boolean;
function GetIEOffLine: Boolean;
function GetIEResizable: Boolean;
function GetIESilent: Boolean;
function GetIEStatusBarVisible: Boolean;
function GetIEStatusText: String;
function GetIETheaterMode: Boolean;
function GetIEToolbarVisible: Boolean;
function GetIETop: Integer;
function GetIEVisible: Boolean;
function GetIEWidth: Integer;
function GetIEURL: String;
procedure SetIEAddressBarVisible(const Value: Boolean);
procedure SetIEFullScreen(const Value: Boolean);
procedure SetIEHeight(const Value: Integer);
procedure SetIELeft(const Value: Integer);
procedure SetIEMenuBarVisible(const Value: Boolean);
procedure SetIEOffline(const Value: Boolean);
procedure SetIEResizable(const Value: Boolean);
procedure SetIESilent(const Value: Boolean);
procedure SetIEStatusBarVisible(const Value: Boolean);
procedure SetIEStatusText(const Value: String);
procedure SetIETheaterMode(const Value: Boolean);
procedure SetIEToolbarVisible(const Value: Boolean);
procedure SetIETop(const Value: Integer);
procedure SetIEVisible(const Value: Boolean);
procedure SetIEURL(const Value: String);
procedure SetIEWidth(const Value: Integer);
protected
{ Protected declarations }
function IEExecWB(CmdId, CmdOption: Integer;
VarIn, VarOut: OleVariant): Boolean;
public
{ Public declarations }
function GetIEWindowHandle: HWND;
procedure IEClose;
procedure IEGoBack;
procedure IEGoForward;
procedure IEGoHome;
procedure IEGoSearch;
procedure IEOpen;
procedure IEPrint(ShowDlg: Boolean);
procedure IEPrintPreview;
procedure IERefresh;
procedure IESave;
procedure IESaveAs(FileName: String);
procedure IEShow;
procedure IEStop;
function IsIEBusy: Boolean;
function IsIEOpen: Boolean;
property IEAddressBarVisible: Boolean read GetIEAddressBarVisible
write SetIEAddressBarVisible;
property IEFullScreen: Boolean read GetIEFullScreen
write SetIEFullScreen;
property IEHeight: Integer read GetIEHeight write SetIEHeight;
property IELeft: Integer read GetIELeft write SetIELeft;
property IEMenuBarVisible: Boolean read GetIEMenuBarVisible
write SetIEMenuBarVisible;
property IEOffline: Boolean read GetIEOffline write SetIEOffline;
property IEResizable: Boolean read GetIEResizable write SetIEResizable;
property IESilent: Boolean read GetIESilent write SetIESilent;
property IEStatusBarVisible: Boolean read GetIEStatusBarVisible
write SetIEStatusBarVisible;
property IEStatusText: String read GetIEStatusText write SetIEStatusText;
property IETheaterMode: Boolean read GetIETheaterMode
write SetIETheaterMode;
property IEToolbarVisible: Boolean read GetIEToolbarVisible
write SetIEToolbarVisible;
property IETop: Integer read GetIETop write SetIETop;
property IEVisible: Boolean read GetIEVisible write SetIEVisible;
property IEWidth: Integer read GetIEWidth write SetIEWidth;
property IEURL: String read GetIEURL write SetIEURL;
published
{ Published declarations }
end; procedure Register; implementation uses ComObj; procedure Register;
begin
RegisterComponents('DGI', [TIEController]);
end; { TIEController } function TIEController.IEExecWB(CmdId, CmdOption: Integer; VarIn,
VarOut: OleVariant): Boolean;
begin
if FIE.QueryStatusWB(CmdId) = OLECMDF_ENABLED OLECMDF_SUPPORTED then
try
FIE.ExecWB(CmdId, CmdOption, VarIn, VarOut)
except
raise EIEControlExecError('Command execution failed. (Id: '
IntToStr(CmdId) ')');
end
else
raise EIEControlExecError.Create('The function you requested is not '
'available. (Id: '
IntToStr(CmdId) ')');
end; procedure TIEController.IEClose;
begin
if IsIEOpen then
begin
FIE.Quit;
FIE := nil;
end;
end; function TIEController.GetIEHeight: Integer;
begin
if not IsIEOpen then IEShow;
Result := FIE.Get_Height;
end; function TIEController.GetIELeft: Integer;
begin
if not IsIEOpen then IEShow;
Result := FIE.Get_Left;
end; function TIEController.GetIEWindowHandle: HWND;
begin
try
if Assigned(FIE) then
Result := FIE.Get_HWND
else
Result := 0;
except
Result := 0;
end;
end; function TIEController.GetIEURL: String;
begin
if not IsIEOpen then IEShow;
Result := FIE.Get_LocationURL;
end; function TIEController.GetIEAddressBarVisible: Boolean;
begin
if not IsIEOpen then IEShow;
Result := FIE.Get_AddressBar;
end; function TIEController.IsIEBusy: Boolean;
begin
if not IsIEOpen then IEShow;
Result := FIE.Get_Busy;
end; function TIEController.GetIEMenuBarVisible: Boolean;
begin
if not IsIEOpen then IEShow;
Result := FIE.Get_MenuBar;
end; procedure TIEController.IEOpen;
begin
FIE := CoInternetExplorer.Create;
end; procedure TIEController.SetIEURL(const Value: String);
var
Flags: OleVariant;
TargetFrameName: OleVariant;
PostData: OleVariant;
Headers: OleVariant;
begin
if not IsIEOpen then IEShow;
FIE.Navigate(Value, Flags, TargetFrameName, PostData, Headers);
end; procedure TIEController.SetIEAddressBarVisible(const Value: Boolean);
begin
if not IsIEOpen then IEShow;
FIE.Set_AddressBar(Value);
end; procedure TIEController.SetIEVisible(const Value: Boolean);
begin
if not IsIEOpen then IEShow;
FIE.Visible := Value;
end; function TIEController.GetIEOffLine: Boolean;
begin
if not IsIEOpen then IEShow;
Result := FIE.Get_Offline;
end; function TIEController.GetIEVisible: Boolean;
begin
if not IsIEOpen then IEShow;
Result := FIE.Visible;
end; procedure TIEController.SetIEMenuBarVisible(const Value: Boolean);
begin
if not IsIEOpen then IEShow;
FIE.Set_MenuBar(Value);
end; procedure TIEController.SetIEHeight(const Value: Integer);
begin
if not IsIEOpen then IEShow;
FIE.Set_Height(Value);
end; procedure TIEController.SetIELeft(const Value: Integer);
begin
if not IsIEOpen then IEShow;
FIE.Set_Left(Value);
end; procedure TIEController.SetIEOffline(const Value: Boolean);
begin
if not IsIEOpen then IEShow;
FIE.Set_Offline(Value);
end; function TIEController.GetIETop: Integer;
begin
if not IsIEOpen then IEShow;
Result := FIE.Get_Top;
end; procedure TIEController.SetIETop(const Value: Integer);
begin
if not IsIEOpen then IEShow;
FIE.Set_Top(Value);
end; function TIEController.GetIEWidth: Integer;
begin
if not IsIEOpen then IEShow;
Result := FIE.Get_Width;
end; procedure TIEController.SetIEWidth(const Value: Integer);
begin
if not IsIEOpen then IEShow;
FIE.Set_Width(Value);
end; function TIEController.GetIEFullScreen: Boolean;
begin
if not IsIEOpen then IEShow;
Result := FIE.Get_FullScreen;
end; procedure TIEController.SetIEFullScreen(const Value: Boolean);
begin
if not IsIEOpen then IEShow;
FIE.Set_FullScreen(Value);
end; function TIEController.GetIEResizable: Boolean;
begin
if not IsIEOpen then IEShow;
Result := FIE.Get_Resizable;
end; procedure TIEController.SetIEResizable(const Value: Boolean);
begin
if not IsIEOpen then IEShow;
FIE.Set_Resizable(Value);
end; function TIEController.GetIESilent: Boolean;
begin
if not IsIEOpen then IEShow;
Result := FIE.Get_Silent;
end; procedure TIEController.SetIESilent(const Value: Boolean);
begin
if not IsIEOpen then IEShow;
FIE.Set_Silent(Value);
end; function TIEController.GetIEStatusBarVisible: Boolean;
begin
if not IsIEOpen then IEShow;
Result := FIE.Get_StatusBar;
end; procedure TIEController.SetIEStatusBarVisible(const Value: Boolean);
begin
if not IsIEOpen then IEShow;
FIE.Set_StatusBar(Value);
end; procedure TIEController.SetIEStatusText(const Value: String);
begin
if not IsIEOpen then IEShow;
FIE.Set_StatusText(Value);
end; function TIEController.GetIEStatusText: String;
begin
if not IsIEOpen then IEShow;
Result := FIE.Get_StatusText;
end; function TIEController.GetIETheaterMode: Boolean;
begin
if not IsIEOpen then IEShow;
Result := FIE.Get_TheaterMode;
end; procedure TIEController.SetIETheaterMode(const Value: Boolean);
begin
if not IsIEOpen then IEShow;
FIE.Set_TheaterMode(Value);
end; function TIEController.GetIEToolbarVisible: Boolean;
var
Visible: Integer;
begin
if not IsIEOpen then IEShow;
Visible := FIE.Get_Toolbar;
if Visible = 0 then
Result := False
else
Result := True;
end; procedure TIEController.SetIEToolbarVisible(const Value: Boolean);
begin
if not IsIEOpen then IEShow;
if Value then
FIE.Set_ToolBar(1)
else
FIE.Set_ToolBar(0);
end; procedure TIEController.IEGoBack;
begin
if not IsIEOpen then IEShow;
try
FIE.GoBack;
except
end;
end; procedure TIEController.IEGoForward;
begin
if not IsIEOpen then IEShow;
try
FIE.GoForward;
except
end;
end; procedure TIEController.IEGoHome;
begin
if not IsIEOpen then IEShow;
FIE.GoHome;
end; procedure TIEController.IEGoSearch;
begin
if not IsIEOpen then IEShow;
FIE.GoSearch;
end; procedure TIEController.IERefresh;
begin
if not IsIEOpen then IEShow;
FIE.Refresh;
end; procedure TIEController.IEShow;
begin
IEOpen;
IEVisible := True;
end; function TIEController.IsIEOpen: Boolean;
begin
if GetIEWindowHandle = 0 then
Result := False
else
Result := True;
end; procedure TIEController.IEPrint(ShowDlg: Boolean);
var
V: OleVariant;
begin
if ShowDlg then
IEExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT, V, V)
else
IEExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, V, V);
end; procedure TIEController.IEPrintPreview;
var
V: OleVariant;
begin
IEExecWB(OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DODEFAULT, V, V);
end; procedure TIEController.IESave;
var
V: OleVariant;
begin
IEExecWB(OLECMDID_SAVE, OLECMDEXECOPT_DODEFAULT, V, V);
end; procedure TIEController.IESaveAs(FileName: String);
var
VarIn,
VarOut: OleVariant;
begin
VarIn := FileName;
IEExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT, VarIn, VarOut);
end; procedure TIEController.IEStop;
var
V: OleVariant;
begin
IEExecWB(OLECMDID_STOP, OLECMDEXECOPT_DODEFAULT, V, V);
end; end.
|
00156
高階會員 發表:45 回覆:195 積分:112 註冊:2002-06-01 發送簡訊給我 |
您好: 如果只是單純登錄ftp,試試看下面的URL格式可不可行~
ftp://Your_Account:Your_Password@domain.com.tw 或者,用WebBrowser模擬登錄動作試試看,以前試驗過kimo和geocities的網頁上傳檔案沒有問題。大致上先進入登錄網頁,然後在onDocumentComplete事件裡依序填入username和password欄位、模擬按下登錄(submit)、打開上傳那頁、模擬按下[瀏覽檔案]按鈕、模擬按下[上傳]按鈕…可能要先分析各網頁的表單看看。或許這個方法比較麻煩些吧?不知道合不合用?
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
takdick
一般會員 發表:50 回覆:63 積分:22 註冊:2002-08-05 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
takdick
一般會員 發表:50 回覆:63 積分:22 註冊:2002-08-05 發送簡訊給我 |
|
00156
高階會員 發表:45 回覆:195 積分:112 註冊:2002-06-01 發送簡訊給我 |
|
takdick
一般會員 發表:50 回覆:63 積分:22 註冊:2002-08-05 發送簡訊給我 |
請問00156:
上傳文件的網址:wb.Navigate('http://geocities.yahoo.com/filemanager?directory=' s '&op-uploadtodir');
你是如何得到的?
另外我不想使用TWebBrowser控件,而直接控制IE,可否?
var
ie: olevariant;
begin
ie:=CreateOleObject('InternetExplorer.Application');
ie.Visible:=true;
ie.Navigate('http://geocities.yahoo.com');
....
..... 發表人 - takdick 於 2005/07/30 18:25:26
|
00156
高階會員 發表:45 回覆:195 積分:112 註冊:2002-06-01 發送簡訊給我 |
引言: 上傳文件的網址:wb.Navigate('http://geocities.yahoo.com/filemanager?directory=' s '&op-uploadtodir'); 你是如何得到的?我是先分析上傳那一頁的表單裡有哪些參數,然後再測試看看 引言: 另外我不想使用TWebBrowser控件,而直接控制IE,可否? var ie: olevariant; begin ie:=CreateOleObject('InternetExplorer.Application'); ie.Visible:=true; ie.Navigate('http://geocities.yahoo.com'); .... .....TWebBrowser就是直接封裝Microsoft的SHDOCVW.DLL介面,直接使用不是比較方便嗎?若要直接控制OLE物件我也不太熟悉,您參考看看下面的連結: http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/prog_browser_node_entry.asp |
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
我的解決方式 基本上是參考這篇
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwebgen/html/bho.asp 等寫完會做個發表, 你可以先研究一下這篇的內容
|
takdick
一般會員 發表:50 回覆:63 積分:22 註冊:2002-08-05 發送簡訊給我 |
|
00156
高階會員 發表:45 回覆:195 積分:112 註冊:2002-06-01 發送簡訊給我 |
引言: 請問你是如何分析的呀?原始檔裡沒有這一句,地址欄也沒有,我去其他的論壇問過別人,但沒人能答,請你再指教.
|
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
時間可以的話 你可以查 IE & Delphi網站
http://delphi.ktop.com.tw/showenews.asp?topic_id=32810
http://www.euromind.com/iedelphi/
這一篇也可以看看
http://delphi.ktop.com.tw/topic.php?topic_id=58492 庵不知道為甚麼一定要IE 但你又不用此元件
如果沒記錯 你要的方式 在m8815010 版主的討論文中應該有的 哈哈
http://delphi.ktop.com.tw/pop_profile.asp?mode=display&id=16732 如果類似這樣可以嗎? 參數傳遞
ftp://ip:帳號@秘碼/
http://ip:port.帳號@秘碼/
原來庵攪錯 哈哈 再給一個另類思考
鳥哥的 Linux 與 ADSL 私房菜
http://linux.vbird.org/linux_server/0220upgrade.php
VBird 的自動更新程式
呵呵!在經過一段時間的改寫之後,終於使用 lynx 以及 wget 完成了一個可以自動更新 Linux 系統的 script 了!我是利用中山大學的 FTP 網站來進行 RPM 檔案的下載與分析的!而由於這個程式是使用 FTP 網站的資料,並且利用比對的方式來找出自己所需要的套件,所以呢,基本上程式應該是能夠符合使用 RPM 安裝的 Linux 系統的,目前我在 Red Hat 以及 Mandrake 系統上面測試過這個程式,都沒有問題!理論上, Open Linux 以及其他使用 RPM 方式來安裝套件的 Linux 系統應該都可以使用這支程式才是!
這支程式主要的工作流程圖是這樣的: 剛剛找一下的
【Delphi】【轉貼】開發嵌入式IE流覽器監控程序
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=75954
簡體的 自己轉把 有bug 不負責 哈哈 malanlk 兄 庵老了 看不懂 聖下的給你處理看看 累積 vs 快速
不一定在短期中 發表人 - conundrum 於 2005/08/01 01:31:02
|
takdick
一般會員 發表:50 回覆:63 積分:22 註冊:2002-08-05 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=76507 發表了一個範例, 在這個範例中, 可以取得系統中每個 IE 的 IWebBrowser2 介面, 加上KTop上對 TWebBrowser 各式各樣的應用似乎可以用在這個程式所取得的 IWebBrowser2 介面上... 範例不大應該可以輕鬆看完. 版權沒有, 翻改不究
|
takdick
一般會員 發表:50 回覆:63 積分:22 註冊:2002-08-05 發送簡訊給我 |
malanlk兄:
還是那句話,水平實在有限,看不明白.
能否教我如何控制ftp網頁,實現以下4個功能?
procedure TForm_IeSpy.loginClick(Sender: TObject);
begin
登錄('ftp://user:pass@ftp.host.com');
end;
procedure TForm_IeSpy.uploadClick(Sender: TObject);
begin
上傳文件('c:\temp.txt','temp.txt');
end;
procedure TForm_IeSpy.downloadClick(Sender: TObject);
begin
下載文件('temp.txt','c:\temp.txt');
end;
procedure TForm_IeSpy.closeClick(Sender: TObject);
begin
關閉ie;
end;
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
takdick
一般會員 發表:50 回覆:63 積分:22 註冊:2002-08-05 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
To: takdick
因應您的要求我將範例加了 一些元件
Button --> ChangeURL
Button --> CloseIE
Button --> RefreshSelectedIE 1. 啟動一個新的 IE
2. 啟動 IESpy
3. 按 Refresh 你會看到你剛剛啟動的 Ie 在 list 內
4. 選定 剛剛啟動的 Ie
5. Edit4 輸入 ftp://userid:pass@ftp.host.sk, 然後按 ChangeURL, 就會連上 FTP Server.
6. FTP 上傳/下載 (自己用 TIdFtp 寫, 你說你會的)
7. 上傳成功後按 RefreshSelectedIE 你就會看到你上傳的檔案
8. 按 CloseIE 關閉該 IE 希望你自己寫 TIdFtp 是因為我用 Spy 查過了, 當你在 IE 的網址欄輸入 ftp://.... 時 IE 會扣進使用 ftp protocol 的 COM 元件(也提供 IWebBrowser2 interface) 但是對應的 event 完全不對....這問題困擾我一個晚上... 起床後才想起在 Server 端應該只有 FTP Server, 使用的應該是 port 21. 所以 IE 造成一個假象, 好像檔案是透過 port 80 送出去的...怪我自己太笨.. 其實你在上傳檔案時你可以用 netstat -na 去看, 你會看到 server 端的 port 確實是 21. 因此可以確定 IE 扣進的 COM 元件 是使用 FTP protocol 的....我目前無法操控該 COM 元件, 所以上傳下載就使用 TIdFtp 去做吧, 反正最後的結果都是一樣的... 發表人 - malanlk 於 2005/08/11 11:43:02 發表人 - malanlk 於 2005/08/11 11:50:08
|
takdick
一般會員 發表:50 回覆:63 積分:22 註冊:2002-08-05 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
to takdick: 針對你簡訊提供的網頁加了一個按鍵, 放ㄧ個檔案 c:\aaa.txt 以便上傳
thread 只會上傳這個檔案 我的程式碼是針對下列格式做的 ("*****..." 是保護takdick的網站所以未列出) <form ENCTYPE="multipart/form-data" method=post action="http://*******************">
|
takdick
一般會員 發表:50 回覆:63 積分:22 註冊:2002-08-05 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |