想打开一个网络中的共享文件,比如要打开一个名叫Test的机器上一个TestPath共享目录中的Test.txt文件。open(\\Test\TestPath\Test.txt),但是需要密码访问时如何自动输入用户和密码??

解决方案 »

  1.   

    DWORD WNetAddConnection(    LPTSTR lpRemoteName, // pointer to network device name  
        LPTSTR lpPassword, // pointer to password 
        LPTSTR lpLocalName  // pointer to local device name 
       );
      

  2.   

    TO: DWGZ() 
    很笨。给个例子!!
      

  3.   

    如果知道用户名和密码,事先用winexec执行net use命令就可以了
      

  4.   

    如何定义lpLocalName,也就是说如何知道哪个盘符没被使用?
    是:'f:'、‘j:'?
      

  5.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TNetResourceArray = ^TNetResource;   //网络资源类型的数组
      TfrmMain = class(TForm)
        GroupBox1: TGroupBox;
        StaticText1: TStaticText;
        Edit1: TEdit;
        GroupBox2: TGroupBox;
        Button2: TButton;
        Button1: TButton;
        GroupBox3: TGroupBox;
        memResult: TMemo;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      frmMain: TfrmMain;implementation{$R *.DFM}Function GetUserResource( UserName : string ; var List : TStringList ) : Boolean;
    Var
      NetResource : TNetResource;
      Buf : Pointer;
      Count,BufSize,Res : DWord;
      Ind : Integer;
      lphEnum : THandle;
      Temp : TNetResourceArray;
    Begin
      Result := False;
      List.Clear;
      FillChar(NetResource, SizeOf(NetResource), 0);  //初始化网络层次信息
      NetResource.lpRemoteName := @UserName[1];       //指定计算机名称
      Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY,RESOURCEUSAGE_CONNECTABLE, @NetResource,lphEnum);
       //获取指定计算机的网络资源句柄
     If Res <> NO_ERROR Then exit;                   //执行失败
      While True Do                                  //列举指定工作组的网络资源
       Begin
        Count := $FFFFFFFF;                            //不限资源数目
        BufSize := 8192;                              //缓冲区大小设置为8K
        GetMem(Buf, BufSize);                   //申请内存,用于获取工作组信息
        Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
                                  //获取指定计算机的网络资源名称
      If Res = ERROR_NO_MORE_ITEMS Then break;//资源列举完毕
       If (Res <> NO_ERROR) then Exit;        //执行失败
         Temp := TNetResourceArray(Buf);
        For Ind := 0 to Count - 1 do
         Begin
         List.Add(Temp^.lpRemoteName);
         Inc(Temp);
        End;
     End;
     Res := WNetCloseEnum(lphEnum);          //关闭一次列举
     If Res <> NO_ERROR Then exit;           //执行失败
       Result := True;
       FreeMem(Buf);
    End;   
    procedure TfrmMain.Button1Click(Sender: TObject);
    var
      List:TstringList;
      i:integer;
    begin
    try
      List:=TstringList.Create;
      if GetUserResource(edit1.text,List) then
        if List.count=0 then         //指定计算机下没有找到共享资源
          begin
            memResult.Lines.Add (edit1.text+'下没有找到共享资源!');
          end
       else
         memResult.Lines.Add (edit1.text+'下的所有共享资源如下:');
         for i:=0 to List.Count-1  do
          begin
            memResult.lines.Add (List.strings[i]);
          end;
    finally
       List:=TstringList.Create;     //如有异常则释放分配的资源
    end;
    end;
    procedure TfrmMain.FormCreate(Sender: TObject);
    begin
      memResult.Lines.clear;
    end;procedure TfrmMain.Button2Click(Sender: TObject);
    begin
      frmMain.Close;
    end;end.
      

  6.   

    登录机器用如下方法WinExec(pchar('net use \\PCName_or_IP '+密码+' /user:'+用户名),SW_HIDE);