delphi将本机共享文件夹、磁盘设为共享的办法

{资源来自于网络}delphi 技术交流QQ: 2609715119

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('Remark',''); 
MyReg.CloseKey ; 
end; 

见笑了 
*************** 
DELPHI 关于WIN9X下共享文件夹问题 
作者:房客(Jason) 
经常看到有人问起如何在程序中增加和删除共享文件夹,于是就尽可能把相关信息写出来,更深入答案还请大虾共同讨论。 
共享/删除共享可以直接调用标准的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; 
remark:PChar; 
path:PChar; 
rw_password:array [0..PASSWORD_LEN-1] of Char; 
ro_password:array [0..PASSWORD_LEN-1] of Char; 
End; //以上为类型定义 
再有就是关于Window9X共享目录口令问题(其实屏保口令也是同样保存的),口令(原始为十六进制字符)在注册表位置:HKEY_LOCAL_MACHINE\SOFTWARE\micorsoft\windows\current_version\network\lanman\共享文件夹名\Parm1enc和Parm2enc两位置,Parm1enc为对应的是完全共享密码,Parm2enc对应的是只读共享密码。字符与数列(前八个数是35,9A,4D,A6,53,A9,D4,6A)作异或运算即得密码的二进制ASCII码,转换后可得到密码。 
另外提供一个比较幼稚但可行的方案(在注册表做动作): 
var reg : TRegistry; name : String; //s是在网上邻居里的文件夹名 
begin 
name := 'DirName';//建立一个只读,无密码共享目录 
reg := TRegistry.Create; 
reg.RootKey := HKEY_LOCAL_MACHINE; 
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Network\LanMan\'+name,true ); 
reg.WriteInteger( 'Flags', 401 ) ; //权限:401代表为访问,258为完全访问,259为密码访问 
reg.WriteInteger( 'Parm1enc', 0 ) ; //参数2,放置完全访问密码,已加密 
reg.WriteInteger( 'Parm2enc', 0 ) ; //参数2,放置只读访问密码,已加密 
reg.WriteString( 'Path', 'C:\MYDIR' ) ; //放置要共享的目录的绝对路径 
reg.WriteString( 'Remark', '' ) ; 
reg.WriteInteger( 'Type', 0 ) ; 
end; 
这样的缺点就是要重启系统,可以ExitWindowsEx( EWX_FORCE and EWX_SHUTDOWN , 0 )来重启。 
此外你还可以使用控件File Sharing 95/98,该控件包含了几个方便的function:ShareResource、DeleteShare、GetShareInfo、SetShareInfo、GetNetErrorString等。 
附:关于NetUserAdd等相关API 
WNetCloseEnum 结束网络资源列表 
WNetConnectionDialog 开始网络连接对话框 
WNetDisconnectDialog 断开网络对话框 
WNetEnumResource 继续列表网络资源 
WNetGetConnection 获取网络资源名 
WNetGetLastError 返回网络函数最近错误 
WNetGetUser 获取当前网络用户名 
WNetOpenEnum 列出网络资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值