Как сделать сетевое подключение и разорвать его

Сделать сетевое подключение и разорвать его можно при помощи функций 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 )

 



Hosted by uCoz