请高手帮忙,我花了很多时间搜索,发现大多说是用WTSQuerySessionInformation或者ProcessIdtoSessionId来实现,但都没有源代码,请高手提供代码,非常感谢!

解决方案 »

  1.   

    Option ExplicitPrivate Const WTS_CURRENT_SERVER_HANDLE = 0&
        
    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