Bonjour, besoin d'aide API Nom machine connectée Terminal Server VB6 [Résolu]

aciclb 12 Messages postés lundi 18 octobre 2004Date d'inscription 18 avril 2012 Dernière intervention - 28 nov. 2008 à 11:09 - Dernière réponse : nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention
- 28 nov. 2008 à 18:12
Bonjour à tous,

J'ai besoin d'un coup de pouce, je sèche !

J'ai besoin de récupérer le nom de la machine de la session courante en terminal server en VB6.
J'ai déjà récupéré le login d'ouverture de session, mais je trouve pas pour le nom de la machine ...
j'ai essayé avec le GetComputerName du kernel32 mais je récupère seulement le nom du serveur, et ça n'est pas ce que je veux ...

Merci pour votre aide !!

SEB.
Afficher la suite 

6 réponses

Répondre au sujet
aciclb 12 Messages postés lundi 18 octobre 2004Date d'inscription 18 avril 2012 Dernière intervention - 28 nov. 2008 à 16:55
+3
Utile
C'est bon ...
ça je me doute bien qu'il faut bosser !! , je fais que ça !!! lol

Alors voila le resultat en VB6 pour ceux qui cherchent encore

Private Const WTS_CURRENT_SERVER_HANDLE = 0&
Private Const WTS_CURRENT_SERVER = 0&
Private Const WTS_CURRENT_SERVER_NAME = vbNullString

' ///////////////////////////////////////////////////////////////////////////////////
' // WTS Enumerations
' ///////////////////////////////////////////////////////////////////////////////////
Public Enum WTS_CONFIG_CLASS
    WTSUserConfigInitialProgram
    WTSUserConfigWorkingDirectory
    WTSUserConfigfInheritInitialProgram
    WTSUserConfigfAllowLogonTerminalServer
    WTSUserConfigTimeoutSettingsConnections
    WTSUserConfigTimeoutSettingsDisconnections
    WTSUserConfigTimeoutSettingsIdle
    WTSUserConfigfDeviceClientDrives
    WTSUserConfigfDeviceClientPrinters
    WTSUserConfigfDeviceClientDefaultPrinter
    WTSUserConfigBrokenTimeoutSettings
    WTSUserConfigReconnectSettings
    WTSUserConfigModemCallbackSettings
    WTSUserConfigModemCallbackPhoneNumber
    WTSUserConfigShadowingSettings
    WTSUserConfigTerminalServerProfilePath
    WTSUserConfigTerminalServerHomeDir
    WTSUserConfigTerminalServerHomeDirDrive
    WTSUserConfigfTerminalServerRemoteHomeDir
End Enum

Private Enum WTS_CONNECTSTATE_CLASS
    WTSActive
    WTSConnected
    WTSConnectQuery
    WTSShadow
    WTSDisconnected
    WTSIdle
    WTSListen
    WTSReset
    WTSDown
    WTSInit
End Enum

Public Enum WTS_INFO_CLASS
    WTSInitialProgram
    WTSApplicationName
    WTSWorkingDirectory
    WTSOEMId
    WTSSessionId
    WTSUserName
    WTSWinStationName
    WTSDomainName
    WTSConnectState
    WTSClientBuildNumber
    WTSClientName
    WTSClientDirectory
    WTSClientProductId
    WTSClientHardwareId
    WTSClientAddress
    WTSClientDisplay
    WTSClientProtocolType
End Enum

Private Enum ADDRESS_FAMILIES
    AF_UNSPEC = 0            ' unspecified }
    AF_UNIX = 1              ' local to host (pipes, portals) }
    AF_INET = 2              ' internetwork: UDP, TCP etc }
    AF_IMPLINK = 3           ' arpanet imp addresses }
    AF_PUP = 4               ' pup protocols: eg. BSP }
    AF_CHAOS = 5             ' mit CHAOS protocols }
    AF_NS = 6                ' XEROX NS protocols }
    AF_ISO = 7               ' ISO protocols }
    AF_OSI = AF_ISO
    AF_ECMA = 8              ' european computer manufacturers }
    AF_DATAKIT = 9           ' datakit protocols }
    AF_CCITT = 10            ' CCITT protocols, X.25 etc }
    AF_SNA = 11              ' IBM SNA }
    AF_DECnet = 12           ' DECnet }
    AF_DLI = 13              ' Direct data link interface }
    AF_LAT = 14              ' LAT }
    AF_HYLINK = 15           ' NSC Hyperchannel }
    AF_APPLETALK = 16        ' AppleTalk }
    AF_NETBIOS = 17          ' NetBios-style addresses }
    AF_MAX = 18
End Enum

' ///////////////////////////////////////////////////////////////////////////////////
' // WTS API Types Definition
' ///////////////////////////////////////////////////////////////////////////////////
Private Type WTS_PROCESS_INFO
    SessionId As Long
    ProcessId As Long
    pProcessName As Long
    pUserSid As Long
End Type

Private Type WTS_SESSION_INFO
    SessionId As Long
    pWinStationName As Long
    state As WTS_CONNECTSTATE_CLASS
End Type

Private Type WTS_CLIENT_ADDRESS
    AddressFamily As Long
    Address(20) As Byte
End Type

Private Type WTS_CLIENT_DISPLAY
    HorizontalResolution As Long
    VerticalResolution As Long
    ColorDepth As Long
End Type

Private Declare Function WTSQuerySessionInformation Lib "wtsapi32.dll" Alias "WTSQuerySessionInformationA" (ByVal hServer As Long, ByVal SessionId As Long, ByVal WTSInfoClass As WTS_INFO_CLASS, ByRef ppBuffer As Long, ByRef pCount 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 lstrlenA Lib "kernel32" (ByVal lpString As String) As Long
Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As Long) As Long

Public Function ComputerName() As String
'************************************************************
'     Fonction retournant le nom de l'ordinateur            *
'************************************************************
    
     Dim stTmp As String
     Dim lgTmp As Long
    
     stTmp = Space$(250)
     lgTmp = 251
    
     Call GetComputerName(stTmp, lgTmp)
     ComputerName = Split(stTmp, Chr$(0))(0)
   
End Function

Private Function GetStringFromLP(ByVal StrPtr As Long) As String
   Dim b As Byte
   Dim tempStr As String
   Dim bufferStr As String
   Dim Done As Boolean

   Done = False
   Do
      ' Get the byte/character that StrPtr is pointing to.
      CopyMemory b, ByVal StrPtr, 1
      If b = 0 Then  ' If you've found a null character, then you're done.
         Done = True
      Else
         tempStr = Chr$(b)  ' Get the character for the byte's value
         bufferStr = bufferStr & tempStr 'Add it to the string
               
         StrPtr = StrPtr + 1  ' Increment the pointer to next byte/char
      End If
   Loop Until Done
   GetStringFromLP = bufferStr
End Function

Private Function GetLongFromLP(ByVal lngPtr As Long) As Long
    Dim uLong As Long
   
    ' Get the uLong
    CopyMemory uLong, ByVal lngPtr, Len(uLong)
  
    GetLongFromLP = uLong
End Function

Private Function GetIntFromLP(ByVal nPtr As Long) As Long
    Dim uInt As Integer
   
    ' Get the uLong
    CopyMemory uInt, ByVal nPtr, Len(uInt)
  
    GetIntFromLP = uInt
End Function

Public Function GetSessionInformation(ByRef nSessionID As Long, ByRef Info As WTS_INFO_CLASS)
    Dim RetVal As Long
    Dim lpbuffer As Long
    Dim Count As Long
    Dim i As Integer
    Dim arrSessionInfo() As WTS_SESSION_INFO
    Dim arrReturn As Variant
    Dim szState As String
    Dim p As Long
    Dim szColorDepth As String
    Dim nColorDepth As Long
   
    RetVal = WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, nSessionID, Info, lpbuffer, Count)
   
    If RetVal Then
        Select Case Info
        Case WTSInitialProgram
            GetSessionInformation = GetStringFromLP(lpbuffer)
        Case WTSApplicationName
            GetSessionInformation = GetStringFromLP(lpbuffer)
        Case WTSWorkingDirectory
            GetSessionInformation = GetStringFromLP(lpbuffer)
        Case WTSOEMId
            GetSessionInformation = GetStringFromLP(lpbuffer)
        Case WTSSessionId
            GetSessionInformation = GetLongFromLP(lpbuffer)
        Case WTSUserName
            GetSessionInformation = GetStringFromLP(lpbuffer)
        Case WTSWinStationName
            GetSessionInformation = GetStringFromLP(lpbuffer)
        Case WTSDomainName
            GetSessionInformation = GetStringFromLP(lpbuffer)
        Case WTSConnectState
            Select Case GetIntFromLP(lpbuffer)
            Case WTS_CONNECTSTATE_CLASS.WTSActive
                GetSessionInformation = "Active"
            Case WTS_CONNECTSTATE_CLASS.WTSConnected
                GetSessionInformation = "Connecté"
            Case WTS_CONNECTSTATE_CLASS.WTSConnectQuery
                GetSessionInformation = "Connect Query"
            Case WTS_CONNECTSTATE_CLASS.WTSDisconnected
                GetSessionInformation = "Déconnecté"
            Case WTS_CONNECTSTATE_CLASS.WTSDown
                GetSessionInformation = "Down"
            Case WTS_CONNECTSTATE_CLASS.WTSIdle
                GetSessionInformation = "Idle"
            Case WTS_CONNECTSTATE_CLASS.WTSInit
                GetSessionInformation = "Init"
            Case WTS_CONNECTSTATE_CLASS.WTSListen
                GetSessionInformation = "Listen"
            Case WTS_CONNECTSTATE_CLASS.WTSReset
                GetSessionInformation = "Reset"
            Case WTS_CONNECTSTATE_CLASS.WTSShadow
                GetSessionInformation = "Shadow"
            End Select
           
        Case WTSClientBuildNumber
            GetSessionInformation = GetLongFromLP(lpbuffer)
        Case WTSClientName
            GetSessionInformation = GetStringFromLP(lpbuffer)
        Case WTSClientDirectory
            GetSessionInformation = GetStringFromLP(lpbuffer)
        Case WTSClientProductId
            GetSessionInformation = GetLongFromLP(lpbuffer)
        Case WTSClientHardwareId
            GetSessionInformation = GetLongFromLP(lpbuffer)
        Case WTSClientAddress
            Dim ClientAddress As WTS_CLIENT_ADDRESS
           
            p = lpbuffer
            CopyMemory ClientAddress, ByVal p, LenB(ClientAddress)
           
            GetSessionInformation = CStr(ClientAddress.Address(2) & "." & ClientAddress.Address(3) & "." & ClientAddress.Address(4) & "." & ClientAddress.Address(5))
        Case WTSClientDisplay
            Dim ClientDisplay As WTS_CLIENT_DISPLAY
           
            p = lpbuffer
            CopyMemory ClientDisplay, ByVal p, LenB(ClientDisplay)
           
            nColorDepth = ClientDisplay.ColorDepth
            Select Case nColorDepth
            Case 1
                nColorDepth = 16
            Case 2
                nColorDepth = 256
            Case 4
                nColorDepth = 65536
            Case 8
                nColorDepth = 16777216
            End Select
           
            GetSessionInformation = CStr(ClientDisplay.HorizontalResolution & " X " & ClientDisplay.VerticalResolution & " X " & CStr(nColorDepth))
        Case WTSClientProtocolType
            GetSessionInformation = GetStringFromLP(lpbuffer)
        End Select
                      
        ' Free the memory buffer.
        WTSFreeMemory lpbuffer
    End If
End Function

----> Donc :
la fonction GetSessionInformation(-1, WTSClientName) renvoie le nom de la machine connectée
la fonction GetSessionInformation(-1, WTSClientAddress) renvoie l'IP de la machine connectée

Amusez vous bien
Et merci pour tout.
SEB.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de aciclb
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 28 nov. 2008 à 11:26
0
Utile
Salut

Regardes avec WMI si tu n'as pas plus de renseignement

exemple de script http://forums.adventnet.com/viewtopic.php?t=32763

N'hesite pas a mettre ton script une fois réalisé (en remplacant le nom des machines)
si il y a des personnes intéréssées par la manip.
Commenter la réponse de nhervagault
aciclb 12 Messages postés lundi 18 octobre 2004Date d'inscription 18 avril 2012 Dernière intervention - 28 nov. 2008 à 11:32
0
Utile
Salut,

J'ai besoin du nom de la machine logguée sur la session terminal server courante, pas de la liste des machine logguées...

merci.

SEB.
Commenter la réponse de aciclb
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 28 nov. 2008 à 12:39
0
Utile
Salut aciclb
Je pense que la solution proposée par nhervagault est une bonne solution.
Il te suffit de l'étudier pour comprendre qu'elle peut certainement répondre à ta question, suffit de se pencher sur les innombrables possibilités de WMI (ah bah oui, faut bosser un peu, c'est sûr).

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 28 nov. 2008 à 13:46
0
Utile
Et oui,

J'ai donné une piste mais pas la solution, n'ayant pas ta plateforme sous les yeux ni de tse à dispo,
le reste du travail est à faire par toi même.

WMI est tellement riche, peu de personnes y pense pour faire ce type de recherche, d'ou la piste.
Car les API windows sont encapsulés dans cette interface plus simple d'accès car il y a des browsers WMI
qui permet de voir la réponse à chaque classe.

Il suffit de trouver la classe correspondante à la demande ;-)

Voici une fonction trouvée sur internet
Function GetComputerName()

        On Error Resume Next

        Set OpSysSet = GetObject("winmgmts:\root\cimv2").ExecQuery("select * from Win32_ComputerSystem")

        For each i in OpSysSet

                GetComputerName = i.Name

        Next

End Function

http://msdn.microsoft.com/en-us/library/aa394102(VS.85).aspx

Il te reste à faire la fusion des deux exemples.
(il y a peut être un service WMI à activer sur le serveur )

Bonne recherche
Commenter la réponse de nhervagault
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 28 nov. 2008 à 18:12
0
Utile
Tu peux en faire un source si tu veux et valider le post si tu as trouvé la réponse ;-)
Commenter la réponse de nhervagault

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.