2000系统下API实现目录共享/删除 3661512(原作)'共享类型 Private Const STYPE_ALL As Long = -1 Private Const STYPE_DISKTREE As Long = 0 Private Const STYPE_PRINTQ As Long = 1 Private Const STYPE_DEVICE As Long = 2 Private Const STYPE_IPC As Long = 3 Private Const STYPE_SPECIAL As Long = &H80000000'共享权限 Private Const ACCESS_READ As Long = &H1 Private Const ACCESS_WRITE As Long = &H2 Private Const ACCESS_CREATE As Long = &H4 Private Const ACCESS_EXEC As Long = &H8 Private Const ACCESS_DELETE As Long = &H10 Private Const ACCESS_ATRIB As Long = &H20 Private Const ACCESS_PERM As Long = &H40 Private Const ACCESS_ALL As Long = ACCESS_READ Or _ ACCESS_WRITE Or _ ACCESS_CREATE Or _ ACCESS_EXEC Or _ ACCESS_DELETE Or _ ACCESS_ATRIB Or _ ACCESS_PERM'共享信息 Private Type SHARE_INFO_2 shi2_netname As Long '共享名 shi2_type As Long '类型 shi2_re As Long '备注 shi2_permissions As Long '权限 shi2_max_uses As Long '最大用户 shi2_current_uses As Long ' shi2_path As Long '路径 shi2_passwd As Long '密码 End Type
'设置共享 Private Declare Function NetShareAdd Lib "netapi32" _ (ByVal ServerName As Long, _ ByVal level As Long, _ buf As Any, _ parmerr As Long) As Long'删除共享 Private Declare Function NetShareDel Lib "netapi32.dll" _ (ByVal ServerName As Long, _ ByVal ShareName As Long, _ ByVal dword As Long) As Long
'设置共享 Private Sub Command1_Click() Dim success As Long
End Sub'删除共享 Private Sub Command2_Click() Dim success As Long
success = DelShare("\\XP","DOWNLOAD")
End Sub'设置共享(返回0 为成功) '参数: 'sServer 计算机名 'sSharePath 要共享路径 'sShareName 显示的共享名 'sShareRe 备注 'sSharePw 密码 Private Function ShareAdd(sServer As String, _ sSharePath As String, _ sShareName As String, _ sShareRe As String, _ sSharePw As String) As Long
Dim lngServer As Long Dim lngNetname As Long Dim lngPath As Long Dim lngRe As Long Dim lngPw As Long Dim parmerr As Long Dim si2 As SHARE_INFO_2
End Function'删除共享(返回0 表示成功) '参数: 'sServer 计算机名 'sShareName 共享名 Private Function DelShare(sServer As String, _ sShareName As String) As Long
Dim lngServer As Long '计算机名 Dim lngNetname As Long '共享名 lngServer = StrPtr(sServer) '转成地址 lngNetname = StrPtr(sShareName) '删除共享 DelShare = NetShareDel(lngServer, lngNetname, 0)End Function
98/ME下实现文件夹的共享和删除共享 3661512(翻译)独立模块中输入 Option Explicit ' 共享错误信息 Public Const NERR_NoWorkstation = 2102 ' 工作站驱动器未被安装. Public Const NERR_UnknownServer = 2103 ' 机器名不可用. Public Const NERR_RemoteOnly = 2106 ' 该操作不被机器支持. Public Const NERR_ServerNotStarted = 2114 ' 服务未启动. Public Const NERR_UnknownDevDir = 2116 ' 目录或驱动器不存在. Public Const NERR_RedirectedPath = 2117 ' 该共享资源不能被共享. Public Const NERR_DuplicateShare = 2118 ' 该共享名已被使用. Public Const NERR_NetworkError = 2136 ' 发生一般网络错误,共享失败. Public Const NERR_InvalidAPI = 2142 ' 该API不被远端机器所支持.' 标准错误信息 Public Const ERROR_ACCESS_DENIED = 5 Public Const ERROR_INVALID_PARAMETER = 87 Public Const ERROR_INVALID_NAME = 123 Public Const ERROR_INVALID_LEVEL = 124 Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpDest As Any, lpSource As Any, ByVal lBytes As Long)' 共享类型 Public Const STYPE_DISKTREE = 0 Public Const STYPE_PRINTQ = 1 Public Const STYPE_DEVICE = 2 Public Const STYPE_IPC = 3 Public Const STYPE_SPECIAL = &H80000000Public Const SHI_USES_UNLIMITED = -1&' 共享权限 Public Const SHI50F_RDONLY = &H1 Public Const SHI50F_FULL = &H2 Public Const SHI50F_DEPENDSON = SHI50F_RDONLY Or SHI50F_FULL Public Const SHI50F_ACCESSMASK = SHI50F_RDONLY Or SHI50F_FULL Public Const SHI50F_PERSIST = &H100 Public Const SHI50F_SYSTEM = &H200 '/* 该共享是不可见的 */ Public Const LM20_NNLEN = 12 '// LM 2.0 机器名长度 Public Const LM20_UNLEN = 20 '// LM 2.0 用户名称最大长度 Public Const LM20_PWLEN = 14 '// LM 2.0 密码最大长度 Public Const SHPWLEN = 8 '// 共享密码 (bytes) Public Const SHARELEVEL50 = 50Public Type SHARE_INFO_50 yNetName(LM20_NNLEN) As Byte 'charshi50_netname[LM20_NNLEN+1]; '/* 共享名称 */ yType As Byte ' unsigned char shi50_type; nFlags As Integer ' short shi50_flags; lpzRe As Long ' char FAR *shi50_re; lpzPath As Long ' char FAR *shi50_path; '/* 共享路径 */ yRWPassword(SHPWLEN) As Byte ' char shi50_rw_password[SHPWLEN+1]; '/* 可读/写共享密码 */ yROPassword(SHPWLEN) As Byte ' char shi50_ro_password[SHPWLEN+1]; '/* 只读共享密码 */ End TypePublic Declare Function NetShareAdd50 Lib "svrapi" Alias "NetShareAdd" _ (ByVal lpzServerName As String, _ ByVal nShareLevel As Integer, _ ShareInfo As Any, _ ByVal nBufferSize As Integer) As LongPublic Declare Function NetShareDelete Lib "svrapi" Alias "NetShareDel" _ (ByVal lpzServerName As String, _ ByVal sShareName As String, _ ByVal nReserved As Integer) As Long '*************建立共享******************** Public Function CreateShare(ByVal sSharePath As String, _ ByVal sShareName As String, _ ByVal sRe As String, _ ByVal sROPass As String, _ ByVal sRWPass As String) As Long Dim ShareInfo As SHARE_INFO_50 Dim lReturn As Long Dim sServerName As String Dim ySharePath() As Byte Dim yRe() As Byte sServerName = "" '建立一个本地共享 With ShareInfo .yType = STYPE_DISKTREE ' Disk type share .nFlags = SHI50F_PERSIST + SHI50F_DEPENDSON ' + SHI50F_SYSTEM ' ySharePath() = StrConv(UCase$(sSharePath & vbNullChar), vbFromUnicode) .lpzPath = VarPtr(ySharePath(0)) yRe() = StrConv(sRe & vbNullChar, vbFromUnicode) .lpzRe = VarPtr(yRe(0)) Erase .yNetName() sShareName = UCase$(sShareName & vbNullChar) CopyMemory .yNetName(0), ByVal sShareName, Len(sShareName) Erase .yRWPassword() sRWPass = UCase$(sRWPass & vbNullChar) CopyMemory .yRWPassword(0), ByVal sRWPass, Len(sRWPass) Erase .yROPassword() sROPass = UCase$(sROPass & vbNullChar) CopyMemory .yROPassword(0), ByVal sROPass, Len(sROPass) End With lReturn = NetShareAdd50(sServerName, SHARELEVEL50, ShareInfo, LenB(ShareInfo)) Debug.Print "lReturn:"; lReturn CreateShare = lReturnEnd Function '******************删除共享************************** Public Function DeleteShare(ByVal sShareName As String) As Long DeleteShare = NetShareDelete("", UCase$(sShareName), 0) Debug.Print "lReturn:"; DeleteShare, "DLL Error:"; Err.LastDllErrorEnd Function
Private Const STYPE_ALL As Long = -1
Private Const STYPE_DISKTREE As Long = 0
Private Const STYPE_PRINTQ As Long = 1
Private Const STYPE_DEVICE As Long = 2
Private Const STYPE_IPC As Long = 3
Private Const STYPE_SPECIAL As Long = &H80000000'共享权限
Private Const ACCESS_READ As Long = &H1
Private Const ACCESS_WRITE As Long = &H2
Private Const ACCESS_CREATE As Long = &H4
Private Const ACCESS_EXEC As Long = &H8
Private Const ACCESS_DELETE As Long = &H10
Private Const ACCESS_ATRIB As Long = &H20
Private Const ACCESS_PERM As Long = &H40
Private Const ACCESS_ALL As Long = ACCESS_READ Or _
ACCESS_WRITE Or _
ACCESS_CREATE Or _
ACCESS_EXEC Or _
ACCESS_DELETE Or _
ACCESS_ATRIB Or _
ACCESS_PERM'共享信息
Private Type SHARE_INFO_2
shi2_netname As Long '共享名
shi2_type As Long '类型
shi2_re As Long '备注
shi2_permissions As Long '权限
shi2_max_uses As Long '最大用户
shi2_current_uses As Long '
shi2_path As Long '路径
shi2_passwd As Long '密码
End Type
'设置共享
Private Declare Function NetShareAdd Lib "netapi32" _
(ByVal ServerName As Long, _
ByVal level As Long, _
buf As Any, _
parmerr As Long) As Long'删除共享
Private Declare Function NetShareDel Lib "netapi32.dll" _
(ByVal ServerName As Long, _
ByVal ShareName As Long, _
ByVal dword As Long) As Long
'设置共享
Private Sub Command1_Click() Dim success As Long
success = ShareAdd("\\XP","C:\","DOWNLOAD","资源目录","")
End Sub'删除共享
Private Sub Command2_Click()
Dim success As Long
success = DelShare("\\XP","DOWNLOAD")
End Sub'设置共享(返回0 为成功)
'参数:
'sServer 计算机名
'sSharePath 要共享路径
'sShareName 显示的共享名
'sShareRe 备注
'sSharePw 密码
Private Function ShareAdd(sServer As String, _
sSharePath As String, _
sShareName As String, _
sShareRe As String, _
sSharePw As String) As Long
Dim lngServer As Long
Dim lngNetname As Long
Dim lngPath As Long
Dim lngRe As Long
Dim lngPw As Long
Dim parmerr As Long
Dim si2 As SHARE_INFO_2
lngServer = StrPtr(sServer) '转成地址
lngNetname = StrPtr(sShareName)
lngPath = StrPtr(sSharePath)
'如果有备注信息
If Len(sShareRe) > 0 Then
lngRe = StrPtr(sShareRe)
End If
'如果有密码
If Len(sSharePw) > 0 Then
lngPw = StrPtr(sSharePw)
End If
'初始化共享信息
With si2
.shi2_netname = lngNetname
.shi2_path = lngPath
.shi2_re = lngRe
.shi2_type = STYPE_DISKTREE
.shi2_permissions = ACCESS_ALL
.shi2_max_uses = -1
.shi2_passwd = lngPw
End With
'设置共享(用户名,共享类型,共享信息,)
ShareAdd = NetShareAdd(lngServer, _
2, _
si2, _
parmerr)
End Function'删除共享(返回0 表示成功)
'参数:
'sServer 计算机名
'sShareName 共享名
Private Function DelShare(sServer As String, _
sShareName As String) As Long
Dim lngServer As Long '计算机名
Dim lngNetname As Long '共享名 lngServer = StrPtr(sServer) '转成地址
lngNetname = StrPtr(sShareName) '删除共享
DelShare = NetShareDel(lngServer, lngNetname, 0)End Function
Option Explicit
' 共享错误信息
Public Const NERR_NoWorkstation = 2102 ' 工作站驱动器未被安装.
Public Const NERR_UnknownServer = 2103 ' 机器名不可用.
Public Const NERR_RemoteOnly = 2106 ' 该操作不被机器支持.
Public Const NERR_ServerNotStarted = 2114 ' 服务未启动.
Public Const NERR_UnknownDevDir = 2116 ' 目录或驱动器不存在.
Public Const NERR_RedirectedPath = 2117 ' 该共享资源不能被共享.
Public Const NERR_DuplicateShare = 2118 ' 该共享名已被使用.
Public Const NERR_NetworkError = 2136 ' 发生一般网络错误,共享失败.
Public Const NERR_InvalidAPI = 2142 ' 该API不被远端机器所支持.' 标准错误信息
Public Const ERROR_ACCESS_DENIED = 5
Public Const ERROR_INVALID_PARAMETER = 87
Public Const ERROR_INVALID_NAME = 123
Public Const ERROR_INVALID_LEVEL = 124
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpDest As Any, lpSource As Any, ByVal lBytes As Long)' 共享类型
Public Const STYPE_DISKTREE = 0
Public Const STYPE_PRINTQ = 1
Public Const STYPE_DEVICE = 2
Public Const STYPE_IPC = 3
Public Const STYPE_SPECIAL = &H80000000Public Const SHI_USES_UNLIMITED = -1&' 共享权限
Public Const SHI50F_RDONLY = &H1
Public Const SHI50F_FULL = &H2
Public Const SHI50F_DEPENDSON = SHI50F_RDONLY Or SHI50F_FULL
Public Const SHI50F_ACCESSMASK = SHI50F_RDONLY Or SHI50F_FULL
Public Const SHI50F_PERSIST = &H100
Public Const SHI50F_SYSTEM = &H200 '/* 该共享是不可见的 */
Public Const LM20_NNLEN = 12 '// LM 2.0 机器名长度
Public Const LM20_UNLEN = 20 '// LM 2.0 用户名称最大长度
Public Const LM20_PWLEN = 14 '// LM 2.0 密码最大长度
Public Const SHPWLEN = 8 '// 共享密码 (bytes)
Public Const SHARELEVEL50 = 50Public Type SHARE_INFO_50
yNetName(LM20_NNLEN) As Byte 'charshi50_netname[LM20_NNLEN+1];
'/* 共享名称 */
yType As Byte ' unsigned char shi50_type; nFlags As Integer ' short shi50_flags; lpzRe As Long ' char FAR *shi50_re; lpzPath As Long ' char FAR *shi50_path;
'/* 共享路径 */
yRWPassword(SHPWLEN) As Byte ' char shi50_rw_password[SHPWLEN+1];
'/* 可读/写共享密码 */
yROPassword(SHPWLEN) As Byte ' char shi50_ro_password[SHPWLEN+1];
'/* 只读共享密码 */
End TypePublic Declare Function NetShareAdd50 Lib "svrapi" Alias "NetShareAdd" _
(ByVal lpzServerName As String, _
ByVal nShareLevel As Integer, _
ShareInfo As Any, _
ByVal nBufferSize As Integer) As LongPublic Declare Function NetShareDelete Lib "svrapi" Alias "NetShareDel" _
(ByVal lpzServerName As String, _
ByVal sShareName As String, _
ByVal nReserved As Integer) As Long
'*************建立共享********************
Public Function CreateShare(ByVal sSharePath As String, _
ByVal sShareName As String, _
ByVal sRe As String, _
ByVal sROPass As String, _
ByVal sRWPass As String) As Long Dim ShareInfo As SHARE_INFO_50
Dim lReturn As Long Dim sServerName As String
Dim ySharePath() As Byte
Dim yRe() As Byte sServerName = "" '建立一个本地共享 With ShareInfo .yType = STYPE_DISKTREE ' Disk type share
.nFlags = SHI50F_PERSIST + SHI50F_DEPENDSON ' + SHI50F_SYSTEM '
ySharePath() = StrConv(UCase$(sSharePath & vbNullChar), vbFromUnicode)
.lpzPath = VarPtr(ySharePath(0)) yRe() = StrConv(sRe & vbNullChar, vbFromUnicode)
.lpzRe = VarPtr(yRe(0))
Erase .yNetName()
sShareName = UCase$(sShareName & vbNullChar)
CopyMemory .yNetName(0), ByVal sShareName, Len(sShareName)
Erase .yRWPassword()
sRWPass = UCase$(sRWPass & vbNullChar)
CopyMemory .yRWPassword(0), ByVal sRWPass, Len(sRWPass)
Erase .yROPassword()
sROPass = UCase$(sROPass & vbNullChar)
CopyMemory .yROPassword(0), ByVal sROPass, Len(sROPass)
End With lReturn = NetShareAdd50(sServerName, SHARELEVEL50, ShareInfo, LenB(ShareInfo)) Debug.Print "lReturn:"; lReturn CreateShare = lReturnEnd Function
'******************删除共享**************************
Public Function DeleteShare(ByVal sShareName As String) As Long DeleteShare = NetShareDelete("", UCase$(sShareName), 0) Debug.Print "lReturn:"; DeleteShare, "DLL Error:"; Err.LastDllErrorEnd Function
shell "cmd.exe /c net shaer"命令修改就行了,但不支持win98