如何模擬輸入用戶名、密碼來訪問網絡鄰居

如何模擬輸入用戶名、密碼來訪問網絡鄰居 
 
基本原理
shell

    在Windows 環境下,應用程序使用Windows 網絡函數(WNet)來實現網絡功能
 而不用關心網絡的供應商及具體實現,由於WNet 函數是獨立於網絡的。
----Wnet 函數主要有:
    WnetAddConnection ,
 WnetAddConnection2 ,
 WnetAddConnection3 ,
    WnetCancelConnection2 等。
 
 本文主要用 WnetAddConnection2,WnetCancelConnection2 函數。
數據庫

    WNetAddConnection2 在Windows.pas 中的函數原型以下:api

    function WNetAddConnection2(var lpNetResource: TNetResource;lpPassword, lpUserName:
        PChar; dwFlags: DWORD): DWORD; stdcall;
服務器

    爲調用此函數,必須填寫lpNetResouce 結構,此結構的定義爲:網絡

typedef  struct _NETRESOUCE{
    DWORD dwScope; 
    DWORD dwType; 
    DWORD dwDisplayType;
    DWORD dwUsage;
    LPTSTR lpLocalName;
    LPTSR  lpRemoteName;
    LPTSr  lpProvider;
} NETRESOURCE;
ide

   這裏使用dwType,lpLocalName,lpRemoteName,lpProvider 幾個參數。其含義以下:函數

   dwType : 用於指定網絡的資源類型,有如下RESOURCETYPE_ANY( 任何資源),
RESOURCETYPE_DISK( 磁盤資源) , RESOURCETYPE_PRINT(打印機資源)。
字體

----lpLocalName : 指定本地設備。spa

----lpRemoteName : 指定遠程網絡名。orm

----lpProvider : 指定提供網絡資源的供應商。如爲空,則表示供應商未知。

----WNetAddConnection2 函數的lpPassword 爲遠程資源的口令。

----lpUserName 爲遠程資源的用戶名。dwFlags 標誌位用於指定登陸時是否
從新鏈接(0 時表示不從新鏈接,CCONNECT_UPDATE_PROFILE 表示登陸時從新鏈接)。

----WnetCancelConnection2 在Windows .pas 中的函數原型以下:

----function WNetCancelConnection2(lpName: PChar;   dwFlags: DWORD; fForce: BOOL):DWORD; stdcall;

----lpName : 要斷開的遠程網絡資源或本地重定向驅動器。

----dwFlags : 含義同上。

----fForce : True 表示無論是否有文件打開,強制性斷開網絡驅動器;
False 表示若有文件打開則函數運行失敗。

實例

----在Delphi 的File 菜單下選擇New Application,在Form1 上放置一個Button,
在Button1 的Click 事件中鍵入以下代碼:
procedure TForm1.Button1Click(Sender : TObject);
var
  NetSource : TNetResource;
begin
  with NetSource do
  begin
    dwType := RESOURCETYPE_ANY;
    lpLocalName := ‘X:';
    // 將遠程資源映射到此驅動器
    lpRemoteName := ‘//hqServer/sys';
    // 遠程網絡資源
    lpProvider := ‘'; 
    // 必須賦值,
      如爲空則使用lpRemoteName 的值。
  end;
  WnetAddConnection2(NetSource,‘Password',‘Guest',
   // 用戶名爲Guest,口令爲Password
  CONNECT_UPDATE_PROFILE);
   // 下次登陸時從新鏈接
  // 此時在Windows 資源管理器中
    可看到網絡驅動器X:
  if MessageDlg(‘Are you sure to disconnect Drive ?',
   mtConfirmation, [mbYes, mbNo], 0) = mrYes
  then     
    // 無論是否有文件打開,
      斷開網絡驅動器X:
 WNetCancelConnection2( ‘X:', CONNECT_UPDATE_
PROFILE, True); 
end;
end;
============================================================================================
 
 
 
 
localname:本地磁盤號 如:Y: Z:
remotename: 共享路徑 如 ://server/share
username : 用戶名
password: 密碼
function connectserver(localname: string; remotename: string; username: string; password: string): boolean;
var
 NetSource: TNetResource; Errinfo: longint;
begin
 with NetSource do begin
    dwType := RESOURCETYPE_ANY; //RESOURCETYPE_DISK
    lpLocalName := pchar(localname);
         // 將遠程資源映射到此驅動器
    lpRemoteName := pchar(remotename);
        // 遠程網絡資 源
    lpProvider := '';
        // 必須賦值,如爲空則使用lpRemoteName 的值。
 end;
 ErrInfo := WnetAddConnection2(NetSource, pchar(password), pchar(username), 0);
 result := (ErrInfo = NO_ERROR);
end;
 
 
 
問題:【求助】局域網中如何經過網絡共享實現文件傳輸? ( 積分:50, 回覆:7, 閱讀:146 )
分類:數據庫-C/S型 ( 版主:qince, luyear ) 
來自:秋伊水, 時間:2003-4-23 21:34:00, ID:1796728 [顯示:小字體 | 大字體] 
局域網服務器上面有共享目錄share用戶aaa能夠經過網絡共享在share中添加文件,如何
用delphi實現向服務器share目錄上傳文件!

假定aaa用戶的賬戶和密碼都是aaa 
 
來自:秋伊水, 時間:2003-4-23 22:00:00, ID:1796785
uses shellapi;
copyfile(pchar('newfile.txt'),pchar('//computername/direction/targer.txt'),false);

這個好像能夠我剛纔試過了!不過若是網絡共享要登錄怎麼寫啊???? 
 
來自:stuwei, 時間:2003-4-23 22:03:00, ID:1796790
參考WNetAddConnection函數
 
來自:秋伊水, 時間:2003-4-23 22:06:00, ID:1796794
能具體舉個例子嗎?謝謝了!!! 
 
來自:秋伊水, 時間:2003-4-24 10:48:00, ID:1797735
ding 
 
來自:shiningplus, 時間:2003-4-24 12:35:00, ID:1798311
    WinExec(
      PChar(Format('net use//%s/ipc$ "%s" /user: "%s" ',
      [Edtserver.Text,
      EdtPassword.Text,
        EdtUserName.Text])),
        0
      ); 
 
 
 
COPY文件的問題
問題:COPY文件的問題 ( 積分:100, 回覆:11, 閱讀:229 )
分類:Windows API ( 版主:amo, cAkk ) 
來自:折翅飛翔, 時間:2003-2-11 12:21:00, ID:1615211 [顯示:小字體 | 大字體] 
我想用DELPHI作一個COPY文件的程序,程序要求從指定的機器中COPY某幾個文件到另外一臺機器中,程序運行在一臺有雙網卡的機器上,利用網卡A到A機器COPY文件,再利用本機網卡B,COPY到B機器中,每次間隔由手工制定,程序能夠自動計算出每分鐘COPY的速度。
>請教的問題:一、怎樣實現COPY功能?
>           二、計算每分鐘COPY的速度怎樣實現?
>           三、若是某個網卡鏈接的機器出現網絡堵塞(1分鐘不能COPY成功),能及時報警,請問怎樣判斷是那塊網卡出現的堵塞?
 
來自:張無忌, 時間:2003-2-11 12:23:00, ID:1615214
1,2很容易用CopyFileEx()
3,就麻煩了,知道哪一個網卡出問題太麻煩,若是真要知道,那就本身
用SOCKET寫個簡單的程序,就能夠解決以上3個問題
 
來自:lcl_003, 時間:2003-2-11 12:27:00, ID:1615220
前幾天恰好寫了個互相考文件的東西
 WNetAddConnection('//192.168.0.60/chan','','192.168.0.20');
 copyfile(PChar(filepath+'chan/'+sendfile),PChar('//192.168.0.60/chan/'+sendfile),false);
 label1.Caption:='與監控端鏈接成功!';
 button1.Caption:='關閉'; 
 
來自:折翅飛翔, 時間:2003-2-11 12:38:00, ID:1615235
請問CopyFileEx()怎樣使用呀?怎樣COPY,怎樣計算COPY速度?
 
 
來自:張無忌, 時間:2003-2-11 12:38:00, ID:1615238
你不會看看幫助,DELPHI的WIN32 SDK幫助裏就有
 
來自:唐佐平, 時間:2003-2-11 13:31:00, ID:1615380
關注!
 
來自:折翅飛翔, 時間:2003-2-12 12:26:00, ID:1617328
我查了一下CopyFileEx()好象都是BCB中使用的沒有在DELPHI中使用過呀
 
來自:copy_paste, 時間:2003-2-12 12:48:00, ID:1617362
function CopyProgress(FileSize, Transferred: Int64;
  StreamSize, StreamTransferred: Int64;
  StreamNumber, CallbackReason: DWORD;
  SourceFile, DestFile: THandle; Data: Pointer): DWORD; stdcall;
var
  Form: TForm1;
begin
  Form := Data;
  Form.ProgressBar1.Max := FileSize;
  Form.ProgressBar1.Position := Transferred;
  Result := PROGRESS_CONTINUE;
  Application.ProcessMessages;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  CopyFileEx('ExistsFile.ext', 'newFile', @CopyProgress,
    Self, nil, COPY_FILE_FAIL_IF_EXISTS);
end; 
 
來自:春意, 時間:2003-2-12 13:23:00, ID:1617433
s: String;
begin
    s := 'c:/ycy.exe';
    copyfile(pchar(Application.ExeName),pchar(s),true);
    ShowMessage('成功');
end; 
 
來自:折翅飛翔, 時間:2003-2-12 13:31:00, ID:1617456
to :春意
你的這個文件COPY到什麼地方去了?
 
來自:lvxq, 時間:2003-2-13 13:09:00, ID:1619332
利用copyfile命令我想控制會麻煩一點吧,尤爲在時間計算方面。在
許多時候,我以爲用讀寫文件的方式會比較好
example
  
var
  buf:array [0..1024*5] of char;   // Get 5 K bytes in one time
  Han1,Han2:Integer;
  lRead,lRSize,lWrite,lWSize:DWORD;
  i:Integer;
  bufSize:DWORD;
begin
  bufSize:=5*1024;
  Label1.caption:=DateTimeToStr(now);
  Application.ProcessMessages ;
  Han1:=FileOpen(源文件,fmOpenRead);
  if Han1<0 then
      exit;  //文件打開失敗
  Han2:=FileCreate(目標文件) ;
    // 目標文件能夠是 //ComputerName/共享名/路徑/文件名
  if Han2<0 then
      exit;  //文件建立失敗;

   lRSize:=FileSeek(han1,0,2);  // 返回源文件大小_字節數
   lWSize:=0;
   FileSeek(han1,0,0);         // 回到文件頭,準備讀
   for i:=1 to (lRsize div bufsize)+1 do
       begin
                lRead:=FileRead(han1,buf,bufSize);    //讀指定大小的內容
                if lRead<1024 then
                   begin
                     lWrite:=FileWrite(Han2,buf,lRead);  
                         // 小於指定大小,意味着文件壞,或者到文件尾
                     lWSize:=lWSize+lRead;  //累計寫入的字節數,你能夠與源
                               //文件大小比較
                     break;
                   end
                else
                   begin
                    lWrite:=FileWrite(Han2,buf,bufSize);
                    lWSize:=lWSize+bufSize;
                   end;

       end;    FileClose(Han1); //關閉源文件    FileClose(Han2); // 關閉目標文件  Label2.caption:=DateTimeToStr(now);  Application.ProcessMessages ;  若是文件尺寸大,你就能夠發現這個時間差了,固然你能夠用更精確的計時甚至比較到底有沒有寫成功,。。。。應該能判斷你的要求。

相關文章
相關標籤/搜索