各位老大,本人现在学习DELPHI,现在碰到一个问题。在已知用户名和密码的条件下。用什么API函数可以访问网络上的电脑。并取得共享资源。

解决方案 »

  1.   

    WNetAddConnection2
    登录到另外一台机
      

  2.   

    ◇[DELPHI]网络邻居复制文件
    uses shellapi;
    copyfile(pchar('newfile.txt'),pchar('//computername/direction/targer.txt'),false); ◇[DELPHI]获取网上邻居
    procedure getnethood();//NT做服务器,WIN98上调试通过。
    var
    a,i:integer;
    errcode:integer;
    netres:array[0..1023] of netresource;
    enumhandle:thandle;
    enumentries:dword;
    buffersize:dword;
    s:string;
    mylistitems:tlistitems;
    mylistitem:tlistitem;
    alldomain:tstrings;
    begin //listcomputer is a listview to list all computers;controlcenter is a form.
    alldomain:=tstringlist.Create ;
    with netres[0] do begin
    dwscope :=RESOURCE_GLOBALNET;
    dwtype :=RESOURCETYPE_ANY;
    dwdisplaytype :=RESOURCEDISPLAYTYPE_DOMAIN;
    dwusage :=RESOURCEUSAGE_CONTAINER;
    lplocalname :=nil;
    lpremotename :=nil;
    lpcomment :=nil;
    lpprovider :=nil;
    end; // 获取所有的域
    errcode:=wnetopenenum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,@netres[0],enumhandle);
    if errcode=NO_ERROR then begin
    enumentries:=1024;
    buffersize:=sizeof(netres);
    errcode:=wnetenumresource(enumhandle,enumentries,@netres[0],buffersize);
    end;
    a:=0;
    mylistitems :=controlcenter.lstcomputer.Items ;
    mylistitems.Clear ;
    while (string(netres[a].lpprovider)<>'') and (errcode=NO_ERROR) do
    begin
    alldomain.Add (netres[a].lpremotename);
    a:=a+1;
    end;
    wnetcloseenum(enumhandle);
    // 获取所有的计算机
    mylistitems :=controlcenter.lstcomputer.Items ;
    mylistitems.Clear ;
    for i:=0 to alldomain.Count-1 do
    begin
    with netres[0] do begin
    dwscope :=RESOURCE_GLOBALNET;
    dwtype :=RESOURCETYPE_ANY;
    dwdisplaytype :=RESOURCEDISPLAYTYPE_SERVER;
    dwusage :=RESOURCEUSAGE_CONTAINER;
    lplocalname :=nil;
    lpremotename :=pchar(alldomain[i]);
    lpcomment :=nil;
    lpprovider :=nil;
    end;
    ErrCode:=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,@netres[0],EnumHandle);
    if errcode=NO_ERROR then
    begin
    EnumEntries:=1024;
    BufferSize:=SizeOf(NetRes);
    ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize);
    end;
    a:=0;
    while (string(netres[a].lpprovider)<>'') and (errcode=NO_ERROR) do
    begin
    mylistitem :=mylistitems.Add ;
    mylistitem.ImageIndex :=0;
    mylistitem.Caption :=uppercase(stringreplace(string(NetRes[a].lpremotename),'\\','',[rfReplaceAll]));
    a:=a+1;
    end;
    wnetcloseenum(enumhandle);
    end;
    end;◇[DELPHI]获取某一计算机上的共享目录
    procedure getsharefolder(const computername:string);
    var
    errcode,a:integer;
    netres:array[0..1023] of netresource;
    enumhandle:thandle;
    enumentries,buffersize:dword;
    s:string;
    mylistitems:tlistitems;
    mylistitem:tlistitem;
    mystrings:tstringlist;
    begin
    with netres[0] do begin
    dwscope :=RESOURCE_GLOBALNET;
    dwtype :=RESOURCETYPE_DISK;
    dwdisplaytype :=RESOURCEDISPLAYTYPE_SHARE;
    dwusage :=RESOURCEUSAGE_CONTAINER;
    lplocalname :=nil;
    lpremotename :=pchar(computername);
    lpcomment :=nil;
    lpprovider :=nil;
    end; // 获取根结点
    errcode:=wnetopenenum(RESOURCE_GLOBALNET,RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER,@netres[0],enumhandle);
    if errcode=NO_ERROR then
    begin
    EnumEntries:=1024;
    BufferSize:=SizeOf(NetRes);
    ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize);
    end;
    wnetcloseenum(enumhandle);
    a:=0;
    mylistitems:=controlcenter.lstfile.Items ;
    mylistitems.Clear ;
    while (string(netres[a].lpprovider)<>'') and (errcode=NO_ERROR) do
    begin
    with mylistitems do
    begin
    mylistitem:=add;
    mylistitem.ImageIndex :=4;
    mylistitem.Caption :=extractfilename(netres[a].lpremotename);
    end;
    a:=a+1;
    end;
    end;