经常看到有人问起如何在程序中增加和删除共享文件夹,于是就尽可能把相关信息写出来,更深入答案还请大虾共同讨论。
    共享/删除共享可以直接调用标准的Win32API函数 NetShareAdd()和NetShareDel()。
    建立共享目录函数:Function NetShareAdd(servername:PChar; level:SmallInt;buf:Pointer; buf_len:SmallInt):SmallInt;far;stdcall;external 'svrapi.dll';
    撤销共享目录函数:Function NetShareDel(servername:PChar;buf:Pointer; reserved:SmallInt):SmallInt;far;stdcall;external 'svrapi.dll';
这里再提供两个关于连接共享目录/撤销共享目录函数WnetAddConnection和WnetCancelConnection。
关于映射网络驱动器的方法如下:
WNetAddConnection(%共享目录名%,%口令%,'X:'); //映射X盘
WNetCancelConnection('X:',True); //撤销X盘映射
    关于建立/撤消共享的函数返回变量说明如下:
const NETNAME_LEN = 13;PASSWORD_LEN = 9;SHI50F_RDONLY = $0001;
    SHI50F_FULL = $0002;SHI50F_DEPENDSON  = $0003;
    SHI50F_ACCESSMASK = $0003;SHI50F_PERSIST = $0100;
    SHI50F_SYSTEM  = $0200;STYPE_DISKTREE = 0;
    STYPE_PRINTQ = 1;STYPE_DEVICE = 2;
    STYPE_IPC = 3;NERR_Success = 0;
NERR_BASE = 2100;  //常量说明
NERR_UnKnownDevDir=(NERR_BASE+16);NERR_UnknownServer=(NERR_BASE+3);
NERR_ServerNotStarted=(NERR_BASE+14);NERR_RedirectedPath=(NERR_BASE+17);
NERR_DuplicateShare=(NERR_BASE+18);NERR_BufTooSmalll=(NERR_BASE+23); //NetShareAdd返回错误
NERR_NetNotStarted = (NERR_BASE+2);
NERR_ServerNotStarted = (NERR_BASE+14);
NERR_NetNameNotFound = (NERR_BASE+210);
NERR_ShareNotFound = (NERR_BASE+292); //NetShareDel返回错误
  SHARE_INFO_50=Record
    netname:array [0..NETNAME_LEN-1] of Char;
    sharetype:ShortInt;
    flags:SmallInt;
    re:PChar;
    path:PChar;
    rw_password:array [0..PASSWORD_LEN-1] of Char;
    ro_password:array [0..PASSWORD_LEN-1] of Char;
  End; //以上为类型定义

解决方案 »

  1.   

    uses Registry
    var
      MyReg:TRegistry;
    //以下为注册表修改
      MyReg:=TRegistry.Create ;
      MyReg.RootKey :=HKEY_LOCAL_MACHINE;MyReg.OpenKey ('\SOFTWARE\Microsoft\Windows\CurrentVersion\Network\LanMan\C',True)
        begin
          MyReg.WriteInteger('Flags',258);  //共享为完全共享
          MyReg.WriteInteger('Type',0);
          MyReg.WriteString('Path','C:\');//共享
          MyReg.WriteString('Re','');
          MyReg.CloseKey ;
        end;