How to Use WNetGetUser() in Windows for Workgroups from VB 3.0ID: Q113688
|
The information from this article is taken from the following Microsoft
Knowledge Base article:
Q96772 : INF: How to Use WNetGetUser() in Windows for Workgroups
Until the release of the Windows for Workgroups Software Development Kit
(SDK), the WNetGetUser() function was used internally by Windows. It is
documented in the Windows version 3.1 "Device Driver Adaptation Guide" for
network device driver developers.
Now the Windows for Workgroups SDK allows you to call WNetGetUser() from an
application. However, when using this function on a system with a multinet
driver, you must activate the supporting network by first using
MNetSetNextTarget(). If the target network has not been set, the function
returns WN_SUCCESS but the returned string for the user name is empty. This
is documented in the description of MNetSetNextTarget() in the Windows for
Workgroups SDK.
It is not sufficient to just call MNetSetNextTarget() before WNetGetUser().
The current target network may not support WNetGetUser(). To set the target
network to use WNetGetUser() correctly, you must number the networks and
call WNetGetUser() for each network. If WNetGetUser() does not return
WN_SUCCESS, then increment the network number for the next target network
and iterate the loop. If the loop iterates through all of the networks but
WNetGetUser() never returns WN_SUCCESS, then none of the target networks
support WNetGetUser(). The following sample code demonstrates how to do
this.
' Enter each of the following Declare statements on one, single line:
Declare Function WNetGetUser Lib "wfwnet.drv" (ByVal szUser As String,
nBufferSize As Integer) As Integer
Declare Function MNetNetworkEnum Lib "wfwnet.drv"
(lphNetwork As Integer) As Integer
Declare Function MNetSetNextTarget Lib "wfwnet.drv"
(ByVal hNetwork As Integer) As Integer
' The following function determines the logged-in user in Windows for
' Workgroups:
Function MultiNetGetUser (UserName$) As Integer
Dim hNetDrv As Integer
Dim wRetEnum As Integer, ret As Integer
Dim wRetGetUser As Integer
Dim cb As Integer
Dim Found As Integer
Found = False
' Grab the 1st network:
hNetDrv = 0
wRetEnum = MNetNetworkEnum(hNetDrv)
' Loop while there are installed networks:
While (wRetEnum = 0) And Not Found
user$ = Space$(255)
cb = Len(user$)
' Make sure correct network is accessed in next WNetGetUser call:
ret = MNetSetNextTarget(hNetDrv)
' Get the user:
wRetGetUser = WNetGetUser(user$, cb)
' Check for success:
If wRetGetUser = 0 Then
' Just grab the relevant characters:
UserName$ = Left$(user$, cb - 1)
MsgBox UserName$, , "WNetGetUser"
Found = True
End If
' Get the next network:
wRetEnum = MNetNetworkEnum(hNetDrv)
Wend
If Not Found Then
MsgBox "WNetGetUser not supported on any of the Multinet subnets"
End If
MultiNetGetUser = Found
End Function
Sub Command1_Click()
r = MultiNetGetUser(UserName$)
End Sub
Additional query words: 2.00 3.00 3.10 3.11 username multi-net
Keywords :
Version :
Platform :
Issue type :
Last Reviewed: June 21, 1999