Private Declare Function WTSQuerySessionInformationW Lib "wtsapi32" (ByVal hServer As Long, _ ByVal SessionID As Long, _ ByVal wtsInfoClass As Long, _ ByRef pBuffer As Long, _ ByRef pBytesReturned As Long _ ) As Long
Private Declare Sub WTSFreeMemory Lib "wtsapi32.dll" (ByVal pMemory As Long) Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal length As Long) Private Declare Function GetCurrentProcessId Lib "Kernel32.dll" () As Long Private Declare Sub ProcessIdToSessionId Lib "Kernel32.dll" (ByVal dwProcessId As Long, ByRef dwSectionId As Long) Private Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As LongPrivate Function IsRemoteUser() As Boolean Dim dwProcessId As Long Dim dwSectionId As Long Dim dwRet As Long Dim nBytesReturned As Long Dim pBuffer As Long
Private Declare Function WTSQuerySessionInformationW Lib "wtsapi32" (ByVal hServer As Long, _
ByVal SessionID As Long, _
ByVal wtsInfoClass As Long, _
ByRef pBuffer As Long, _
ByRef pBytesReturned As Long _
) As Long
Private Enum wtsInfoClass
WTSInitialProgram
WTSApplicationName
WTSWorkingDirectory
WTSOEMId
WTSSessionId
WTSUserName
WTSWinStationName
WTSDomainName
WTSConnectState
WTSClientBuildNumber
WTSClientName
WTSClientDirectory
WTSClientProductId
WTSClientHardwareId
WtsClientAddress
WTSClientDisplay
WTSClientProtocolType
End Enum
Private Declare Sub WTSFreeMemory Lib "wtsapi32.dll" (ByVal pMemory As Long)
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal length As Long)
Private Declare Function GetCurrentProcessId Lib "Kernel32.dll" () As Long
Private Declare Sub ProcessIdToSessionId Lib "Kernel32.dll" (ByVal dwProcessId As Long, ByRef dwSectionId As Long)
Private Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As LongPrivate Function IsRemoteUser() As Boolean
Dim dwProcessId As Long
Dim dwSectionId As Long
Dim dwRet As Long
Dim nBytesReturned As Long
Dim pBuffer As Long
dwProcessId = GetCurrentProcessId
ProcessIdToSessionId dwProcessId, dwSectionId
dwRet = WTSQuerySessionInformationW(WTS_CURRENT_SERVER_HANDLE, dwSectionId, WTSClientName, pBuffer, nBytesReturned)
If dwRet <> 0 And nBytesReturned <> 0 And pBuffer <> 0 Then
IsRemoteUser = lstrlenW(pBuffer)
WTSFreeMemory pBuffer
End If
End Function
Private Sub Form_Load()
If IsRemoteUser Then
MsgBox "远程用户"
Else
MsgBox "本地用户"
End If
End Sub