源码大放送啦(请多多指教)。 用注册表的方法,行不行,我试过直接写入注册表的方法,好像不行。而共享网络目录是用API:NetShareAdd,不过我一直没试成功。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 下面是我从其它地方弄来的关于:NetShareAdd,我一直调试不过。给大家看看,什么问题{网络共享目录的设定--------------------------------------------------------------------------------(【问题】 在局域网环境中共享目录或者共享打印机等是常见的操作,许多日常工作都是依赖于此的。如果能通过程序完成以往人工繁琐的操作,无疑会方便用户的使用。 【原理】在Windows95/97/98中有一个svrapi.dll动态库,基本上所有的设定网络资源共享的函数都存在于此,我们只要调用这里的函数就能完成我们希望的功能。但是要注意的是这个动态库仅仅在Windows95/97/98中有效,在NT下为了保证其安全性,是通过更复杂的函数调用完成这些操作的,所以这里的方法不适于NT环境。 【步骤】 我们将用到的几个函数封装起来以方便使用,此外根据svrapi.h,补充了一些常量申明,使得调用更加直观。 }unit Share;{ Sharing 98 v2.0 freeware} interface uses Sysutils ,ShareErr {其中包含一些意外错误的代码和其他的小功能}; Type Share_Info50 = Packed Record shi50_netname : Array[0..12] of Char; {13} shi50_type : Byte; shi50_flags : Word;shi50_re : PChar; shi50_path : PChar; shi50_rw_password : Array[0..8] of Char; {9} shi50_ro_password : Array[0..8] of Char; End; Const NERR_Success = 0; { Success – 没有发生错误 } NERR_BASE = 2100; {资源类型常量} STYPE_DISKTREE = 0; {共享目录} STYPE_PRINTQ = 1; {共享打印机} {属性标记常量} SHI50F_RDONLY = 1; { 只读共享} SHI50F_FULL = 2; { 开放所有权限的共享} SHI50F_DEPENDSON = (SHI50F_RDONLY or SHI50F_FULL); {根据用户口令访问} {下面两者的关系是OR, 例如: flags := (SHI50F_RDONLY OR SHI50F_SYSTEM ) } SHI50F_PERSIST = 256; {系统启动时建立} SHI50F_SYSTEM = 512; {共享不可见}ShareResource: 在指定机器上共享指定资源. 参数: ServerName= 需要共享资源的机器的名字,如果是 Nil 则表示本机 FilePath = 需要共享的资源的目录. (字母都应大写); NetName = 共享资源的网络名称(别名),最长12个字母 Re = 备注,可以为空 ShareType = 资源类别,参见常量设定. Flags = 共享标记,参见常量设定. RWPass = 读/写权限的口令,可以为空 ROPass = 只读权限的口令,可以为空 例如: ShareResource(Nil, 'C:\TEMP', 'TESTING', 'My Comment', STYPE_DIS KTREE, SHI50F_RDONLY, '','MYPASS'); 这里需要将本机的 C:\TEMP共享为'TESTING',备注是 'My Comment'。 访问权限是只读(Read Only), 只读权限口令是 'MYPASS'. 没有全权访问口令 function ShareResource(ServerName : PChar; FilePath : PChar; NetName : PChar; Re : PChar;ShareType : Byte; Flags : Word; RWPass : PChar; ROPass : PChar ) : Integer; { DeleteShare: 在指定机器上删除指定的已经共享的资源. 参数: ServerName=需要共享资源的机器的名字,如果是 Nil 则表示本机. NetName =共享资源的网络名称(别名),最长12个字母 例如: DeleteShare(Nil, 'TESTING'); 这个操作将本机上的名为'TESTING'的共享资源取消共享 function DeleteShare(ServerName : PChar; NetName : PChar) : Integer; { GetShareInfo: 取得指定机器上指定的共享资源的信息 参数: ServerName =共享资源存在的机器的名字,如果是 Nil 则表示本机; NetName =共享资源的网络名称(别名),最长12个字母; ShareStruct = Share_Info50.共享资源的信息将添入到此结构中去; 例如: var MyShareStruct : Share_Info50; GetShareInfo(Nil, 'TESTING', MyShareStruct);这个操作将本机上的名为'TESTING'的共享资源的信息填入 MyShareStruct结 构中去} function GetShareInfo(ServerName : PChar; NetName : PChar; Var ShareSt ruct : Share_Info50) : Integer; { SetShareInfo: 设置指定机器上指定的共享资源的信息. 参数: ServerName =共享资源存在的机器的名字,如果是 Nil 则表示本机; NetName =共享资源的网络名称(别名),最长12个字母; ShareStruct =需要设置的共享资源信息; 例如: SetShareInfo(Nil, 'TESTING', MyShareStruct); 此操作将MyShareStruct描述的共享信息写入到共享资源'TESTING'中} function SetShareInfo(ServerName : PChar; NetName : PChar; ShareStruct : Share_Info50) : Integer; {以下部分来自 SVRAPI.h 希望了解详细情况的读者请参考win32.hlp} function NetShareAdd(ServerName : PChar; ShareLevel : SmallInt; Buffer : Pointer; Size : Word) : Integer; StdCall; function NetShareDel(ServerName : PChar; NetName : PChar; Reserved : W ord) : Integer; StdCall;function NetShareGetInfo(ServerName : PChar; NetName : PChar; ShareLev el : SmallInt; Buffer : Pointer; Size : Word; Var Used : Word) : Integ er; StdCall; function NetShareSetInfo(ServerName : PChar; NetName : PChar; ShareLev el : SmallInt; Buffer : Pointer; Size : Word; Reserved : SmallInt) : I nteger; StdCall; implementation function ShareResource(ServerName : PChar; FilePath : PChar; NetName : PChar; Re : PChar; ShareType : Byte; Flags : Word; RWPass : PChar; ROPass : PChar ) : Integer; var MyShare : Share_Info50; PMyShare : ^Share_Info50; begin strLcopy(MyShare.shi50_netname,NetName,13); MyShare.shi50_type := ShareType; MyShare.shi50_flags := Flags; MyShare.shi50_re := Re; MyShare.shi50_path := FilePath; strLcopy(MyShare.shi50_rw_password,RWPass,9);strLcopy(MyShare.shi50_ro_password,ROPass,9); PMyShare := @MyShare; Result := NetShareAdd(ServerName,50,PMyShare,SizeOf(MyShare)); end; function DeleteShare(ServerName : PChar; NetName : PChar) : Integer; begin Result := NetShareDel(ServerName,NetName,0); end; to saoren(qsl):当然是可以的不过也重机器嘛(exitwindow)你所说的那个是shellapi的一个吗? 老大我可是用自己的机器试过许多次的,当然只是对window9x用效了NT下的就惨些 hehe,不错,那函数是要引用Shellapi 连接数据源的数据集出问题! 在FOR 循环中,遇到异常时,如何继续往下循环? 在多线程中打开clientdataset时如何传参数? 求各位大虾救我一救,在线等,并顺带散分了,大家踊跃登陆阿 一个登陆小程序,大家帮忙看看!谢拉 查找为NULL和''的数据出现的问题! 如何配置IDE环境? 那位哥们帮看一下吧。我实在找不到错误在那里,提示错误是“insert into语法错误” 我用Query动态建立一个数据表,但是我在程序中怎么删除这个表呢?主要是怎么获得表的绝对路径? 请问:delphi与sql2000进行B/S设计需要注意什么问题? 关于数据加密的问题! 有关外观
--------------------------------------------------------------------------------(【问题】 在局域网环境中共享目录或者共享打印机等是常见的操作,许多日常工作都是依赖于此的。如果能通过程序完成以往人工繁琐的操作,无疑会方便用户的使用。 【原理】
在Windows95/97/98中有一个svrapi.dll动态库,基本上所有的设定网络资源共享的函数都存在于此,我们只要调用这里的函数就能完成我们希望的功能。但是要注意的是这个动态库仅仅在Windows95/97/98中有效,在NT下为了保证其安全性,是通过更复杂的函数调用完成这些操作的,所以这里的方法不适于NT环境。 【步骤】
我们将用到的几个函数封装起来以方便使用,此外根据svrapi.h,补充了一些常量申明,使得调用更加直观。
}
unit Share;{ Sharing 98 v2.0 freeware}
interface
uses Sysutils ,ShareErr {其中包含一些意外错误的代码和其他的小功能};
Type
Share_Info50 = Packed Record
shi50_netname : Array[0..12] of Char; {13}
shi50_type : Byte;
shi50_flags : Word;
shi50_re : PChar;
shi50_path : PChar;
shi50_rw_password : Array[0..8] of Char; {9}
shi50_ro_password : Array[0..8] of Char;
End;
Const
NERR_Success = 0; { Success – 没有发生错误 }
NERR_BASE = 2100; {资源类型常量}
STYPE_DISKTREE = 0; {共享目录}
STYPE_PRINTQ = 1; {共享打印机} {属性标记常量}
SHI50F_RDONLY = 1; { 只读共享}
SHI50F_FULL = 2; { 开放所有权限的共享}
SHI50F_DEPENDSON = (SHI50F_RDONLY or SHI50F_FULL); {根据用户口令访问} {下面两者的关系是OR, 例如: flags := (SHI50F_RDONLY OR SHI50F_SYSTEM
) }
SHI50F_PERSIST = 256; {系统启动时建立}
SHI50F_SYSTEM = 512; {共享不可见}
ShareResource: 在指定机器上共享指定资源.
参数:
ServerName= 需要共享资源的机器的名字,如果是 Nil 则表示本机
FilePath = 需要共享的资源的目录. (字母都应大写);
NetName = 共享资源的网络名称(别名),最长12个字母
Re = 备注,可以为空
ShareType = 资源类别,参见常量设定.
Flags = 共享标记,参见常量设定.
RWPass = 读/写权限的口令,可以为空
ROPass = 只读权限的口令,可以为空 例如: ShareResource(Nil, 'C:\TEMP', 'TESTING', 'My Comment', STYPE_DIS
KTREE, SHI50F_RDONLY, '','MYPASS');
这里需要将本机的 C:\TEMP共享为'TESTING',备注是 'My Comment'。
访问权限是只读(Read Only), 只读权限口令是 'MYPASS'. 没有全权访问口令 function ShareResource(ServerName : PChar; FilePath : PChar;
NetName : PChar; Re : PChar;
ShareType : Byte; Flags : Word;
RWPass : PChar; ROPass : PChar ) : Integer;
{ DeleteShare: 在指定机器上删除指定的已经共享的资源.
参数:
ServerName=需要共享资源的机器的名字,如果是 Nil 则表示本机.
NetName =共享资源的网络名称(别名),最长12个字母 例如: DeleteShare(Nil, 'TESTING');
这个操作将本机上的名为'TESTING'的共享资源取消共享
function DeleteShare(ServerName : PChar; NetName : PChar) : Integer; { GetShareInfo: 取得指定机器上指定的共享资源的信息
参数:
ServerName =共享资源存在的机器的名字,如果是 Nil 则表示本机;
NetName =共享资源的网络名称(别名),最长12个字母;
ShareStruct = Share_Info50.共享资源的信息将添入到此结构中去; 例如:
var MyShareStruct : Share_Info50;
GetShareInfo(Nil, 'TESTING', MyShareStruct);这个操作将本机上的名为'TESTING'的共享资源的信息填入 MyShareStruct结
构中去}
function GetShareInfo(ServerName : PChar; NetName : PChar; Var ShareSt
ruct : Share_Info50) : Integer; { SetShareInfo: 设置指定机器上指定的共享资源的信息.
参数:
ServerName =共享资源存在的机器的名字,如果是 Nil 则表示本机;
NetName =共享资源的网络名称(别名),最长12个字母;
ShareStruct =需要设置的共享资源信息; 例如: SetShareInfo(Nil, 'TESTING', MyShareStruct);
此操作将MyShareStruct描述的共享信息写入到共享资源'TESTING'中}
function SetShareInfo(ServerName : PChar; NetName : PChar; ShareStruct
: Share_Info50) : Integer; {以下部分来自 SVRAPI.h 希望了解详细情况的读者请参考win32.hlp}
function NetShareAdd(ServerName : PChar; ShareLevel : SmallInt; Buffer
: Pointer; Size : Word) : Integer; StdCall;
function NetShareDel(ServerName : PChar; NetName : PChar; Reserved : W
ord) : Integer; StdCall;
function NetShareGetInfo(ServerName : PChar; NetName : PChar; ShareLev
el : SmallInt; Buffer : Pointer; Size : Word; Var Used : Word) : Integ
er; StdCall;
function NetShareSetInfo(ServerName : PChar; NetName : PChar; ShareLev
el : SmallInt; Buffer : Pointer; Size : Word; Reserved : SmallInt) : I
nteger; StdCall; implementation function ShareResource(ServerName : PChar; FilePath : PChar;
NetName : PChar; Re : PChar;
ShareType : Byte; Flags : Word;
RWPass : PChar; ROPass : PChar ) : Integer;
var MyShare : Share_Info50;
PMyShare : ^Share_Info50;
begin
strLcopy(MyShare.shi50_netname,NetName,13);
MyShare.shi50_type := ShareType;
MyShare.shi50_flags := Flags;
MyShare.shi50_re := Re;
MyShare.shi50_path := FilePath;
strLcopy(MyShare.shi50_rw_password,RWPass,9);
strLcopy(MyShare.shi50_ro_password,ROPass,9);
PMyShare := @MyShare;
Result := NetShareAdd(ServerName,50,PMyShare,SizeOf(MyShare));
end; function DeleteShare(ServerName : PChar; NetName : PChar) : Integer;
begin
Result := NetShareDel(ServerName,NetName,0);
end;
当然是可以的
不过也重机器嘛(exitwindow)
你所说的那个是shellapi的一个吗?
当然只是对window9x用效了
NT下的就惨些
不错,那函数是要引用Shellapi