比如,c:\tmp文件夹,被共享为Share1;如何根据“Share1”,获取它的本地路径值“c:\tmp”。
只需取本机的共享即可,就像“我的电脑/管理/共享文件夹”中列举的一样。我现在通过WNetOpenEnum,能够正常取得lpRemoteName,但是lpLocalName始终为nil。

解决方案 »

  1.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     type 
        PShare_Info_2  =  ^TSHARE_INFO_2; 
        TSHARE_INFO_2  =  record 
        shi2_netname:  PWideChar; 
        shi2_type:  DWORD; 
        shi2_re:  PWideChar; 
        shi2_permissions:  DWORD; 
        shi2_max_uses:  DWORD; 
        shi2_current_uses:  DWORD; 
        shi2_path:  PWideChar; 
        shi2_passwd:  PWideChar; 
    End; type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
     function NetShareGetInfo(ServerName : PWideChar; NetName : PWideChar; ShareLevel : DWORD;var Buffer : Pointer) : Integer;stdcall;external 'netapi32.dll';
    procedure TForm1.Button1Click(Sender: TObject);
    var 
          ShInfo: PShare_Info_2;
          lError:  DWord;
          shareName:PWideChar;
          shareNames:PWideChar;
      begin 
        new(ShInfo); 
        shareName:='test';
        shareNames:=shareName;
        lError :=NetSharegetInfo(nil,shareNames,2,Pointer(ShInfo));
        showmessage(inttostr(lError));
        showmessage(WideCharToString(ShInfo.shi2_path));
      end; 
    end.
     获取本机共享目录的信息
      

  2.   

    hjkto的API,看样子应该可以. 我先试试. 可以的话就结贴
      

  3.   

    可以的, 我发之前已经测试过了
    shareName:='test';你可以在任意一个分区创建一个test的共享文件夹,都可以取到它的路径
      

  4.   

    New(ShInfo)之后应该释放. 
    但是dispose(ShInfo)始终提示:Invalid Pointer Operation.
    为什么,怎么办?
      

  5.   

    Dispose()需要通过参数指针的类型判断释放空间的大小   
      Dispose(Data)相当于释放4个字节(Pointer类型)   
      Dispose(PRECA(Data))则释放16个字节(TRect类型)   
      

  6.   

    http://www.itdelphi.com/delphibbs/doc/2007/3714749.htm