Сделать сетевое подключение и разорвать его можно при помощи функций Windows API WNetUseConnection() и WNetCancelConnection(). Вот прототипы этих функций:
! DWORD WNetUseConnection(
! HWND hwndOwner, // owner window
! LPNETRESOURCE lpNetResource, // structure
! LPCTSTR lpUserId, // user
! LPCTSTR lpPassword, // password
! DWORD dwFlags, // options
! LPTSTR lpAccessName, // buffer
! LPDWORD lpBufferSize, // buffer size
! LPDWORD lpResult // recives connection information
! );
WNetUseConnection(Long,Long,Long,Long,Long,Long,Long,Long),Long,RAW,PASCAL,NAME('WNetUseConnectionA')
! DWORD WNetCancelConnection2(
! LPTSTR lpName, // resouce name
! DWORD dwFlags, // connection type
! BOOL fForce // unconditional disconnect option
! );
WNetCancelConnection2(Long,Long,BOOL),Long,RAW,PASCAL,NAME('WNetCancelConnection2A')
Используемые структуры, переменные и константы:
RESOURCE_CONNECTED Equate(1) !!!!
RESOURCE_GLOBALNET Equate(2)
RESOURCE_REMEMBERED Equate(3)
RESOURCETYPE_ANY Equate(0)
RESOURCETYPE_DISK Equate(1)
RESOURCETYPE_PRINT Equate(2)
RESOURCETYPE_UNKNOWN Equate(0FFFFFFFFh)
RESOURCEDISPLAYTYPE_GENERIC Equate(0)
RESOURCEDISPLAYTYPE_SHARE Equate(3)
RESOURCEDISPLAYTYPE_FILE Equate(4)
CONNECT_UPDATE_PROFILE Equate(0)
CONNECT_INTERACTIVE Equate(8)
CONNECT_PROMPT Equate(10h)
CONNECT_REDIRECT Equate(80h)
CONNECT_LOCALDRIVE Equate(100h)
NETRESOURCE GROUP,PRE( NR )
NR:Scope DWORD
NR:Type DWORD ! Тип ресурса = RESOURCETYPE_DISK
NR:DisplayType DWORD
NR:Usage DWORD
NR:lpLocalName LONG ! 'Z:' или 'LPT1'
NR:lpRemoteName LONG ! '\\Server\ShareName'
NR:lpComment LONG
NR:lpProvider LONG ! = Null или ''
END
Пример создания, проверки и разрыва сетевого подключения:
nr:LocalName CSTRING(255) nr:RemoteName CSTRING(255) nr:Comment CSTRING(255) nr:Provider CSTRING(255) loc:UserID CSTRING(30) loc:Password CSTRING(30) loc:AccessName CSTRING(255) loc:BufferSize ULONG loc:Result LONG
code
loc:UserID = ''
loc:Password = ''
loc:BufferSize = 255
nr:LocalName = 'Y:'
nr:RemoteName = '\\Server01\ShareName1'
nr:Comment = ''
nr:Provider = ''
NR:Scope = RESOURCE_CONNECTED
NR:Type = RESOURCETYPE_DISK
NR:DisplayType = RESOURCEDISPLAYTYPE_SHARE
NR:Usage = 1
NR:lpLocalName = address(nr:LocalName)
NR:lpRemoteName = address(nr:RemoteName)
NR:lpComment = address(nr:Comment)
NR:lpProvider = address(nr:Provider)
r# = WNetUseConnection( THIS{prop:Handle}, |
address(NETRESOURCE),0,0, |
CONNECT_INTERACTIVE + CONNECT_REDIRECT, |
address(loc:AccessName), |
address(loc:BufferSize), |
address(loc:Result) )
if r# <> 0
! Message( 'r#=' & r#, 'Error WNetUseConnection' )
else
! Message( 'loc:AccessName=' & clip(loc:AccessName), ' WNetUseConnection' )
.
r# = DiskExist( 'y' ) ! Проверка, существует ли сетевой диск 'Y:'
if r# <> 4 ! 4 = Сетевой диск
Message( 'Компьютер не подключен!' )
.
wn# = WNetCancelConnection2( address(nr:LocalName), 0, 1 )