tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
390
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Outsider77 Outsider77 ist offline Mitglied Silber
    Registriert seit
    Sep 2008
    Beiträge
    96
    Hallo zusammen!
    Mit folgendem Modul lese ich den aktuell über Remote Desktop verbundenen Client aus:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    
    Imports System.Runtime.InteropServices
    Imports System
     
    Module RDP_API
     
        Private Const WTS_CURRENT_SERVER_HANDLE As Long = 0
     
        Public Enum WTSInfoClass
            WTSInitialProgram
            WTSApplicationName
            WTSWorkingDirectory
            WTSOEMID
            WTSSessionId
            WTSUserName
            WTSWinStationName
            WTSDomainName
            WTSConnectState
            WTSClientBuilderNumber
            WTSClientName
            WTSClientDirectory
            WTSClientProductId
            WTSClientHardwareId
            WTSClientAddress
            WTSClientDisplay
            WTSClientProtocolType
        End Enum
     
        'WTS Sitzungsanfragen-Struktur
        Public Structure WTS_SESSION_QUERY
            Public SessionID As Int32
            Public pWinStationName As Int32
            Public WTSClientName As String
            Public senum As WTSInfoClass
        End Structure
     
        'Funktionsdefinition API-Aufruf für Session-Daten auslesen
        <DllImport("wtsapi32", CharSet:=CharSet.Ansi)> _
        Public Function _
             WTSQuerySessionInformation(ByVal hServer As System.IntPtr, ByVal _
             sessionId As Integer, ByVal wtsInfoClass As WTSInfoClass, ByRef _
             ppBuffer As System.IntPtr, ByRef pBytesReturned As System.UInt32) As  _
             UInt32
     
        End Function
     
     
        'Funktionsdefinition für API-Aufruf "Speicher freigeben",
        <DllImport("wtsapi32", ExactSpelling:=True, SetLastError:=False)> _
        Private Sub WTSFreeMemory(ByVal pMemory As IntPtr)
     
        End Sub
     
     
        'Funktion für Auslesen des RDP-Hostnames
        Public Function GetWTSQueryHost(ByVal SessionID As Int32) As String
            Dim retval As Int32
            Dim lpBuffer As System.IntPtr = IntPtr.Zero
     
     
            Dim Count As System.UInt32
            Dim lName As Int32
            Dim sName As String = ""
     
            Try
     
     
                'Remotesitzungsinformationen holen
                'retval = WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, _
                '    SessionID, WTSInfoClass.WTSClientName, lpBuffer, Count)
     
     
                retval = WTSQuerySessionInformation(System.IntPtr.Zero, _
                  WTS_CURRENT_SERVER_HANDLE, WTSInfoClass.WTSClientName, lpBuffer, _
                  Count)
                'Funktionsausschnitt
                ' Prozedur erfolgreich
                If retval Then
     
                    'Stringlänge ermitteln
                    lName = Strings.Len( _
                      System.Runtime.InteropServices.Marshal.PtrToStringAnsi( _
                      lpBuffer))
     
                    If lName <> 0 Then
     
                        sName = _
                          System.Runtime.InteropServices.Marshal.PtrToStringAnsi( _
                          lpBuffer)
     
                    End If
     
                    ' Speicher wieder freigeben
                    WTSFreeMemory(lpBuffer)
                Else
     
                    'Prozedurfehler: Keine RDP, Keine DLL da oder sonstwas faul...
                    MsgBox("Fehler beim Auslesen der RDP-Sitzungsdaten. Es konnten" _
                      & _
                        "keine Informationen gewonnen werden. ", vbCritical, _
                        "DLL-Zugriffsfehler " & Err.LastDllError)
     
                End If
     
                'Returnwert
                Return sName
                'Form1.Label1.Text = sName
            Catch ex As Exception
                Return ""
            End Try
        End Function
     
    End Module

    Code :
    1
    
    GetWTSQueryHost(-1)
    liefert mir diesen Usernamen.

    Ich lasse regelmäßig den Namen des aktuellen Users in eine Text-Datei schreiben, die von einem anderen Programm ausgelesen wird. Wenn keine Verbindung besteht, soll "frei" in die Text-Datei geschrieben werden. Bei der ersten aktiven Verbindung kappt alles, allerdings beim Trennen dieser "merkt" der Pc sich anscheinend den User, weil immer weiter der Name in die Text-Datei geschrieben wird. Also anstatt "frei" bei keiner Verbindung schreibt er den Namen des ersten Users. Wieso wird nicht erkannt, dass aktuell keine Verbindung besteht? Bin für jede Hilfe dankbar!

    Gruß Outsider
    Geändert von Outsider77 (13.09.11 um 12:44 Uhr)
     

  2. #2
    Outsider77 Outsider77 ist offline Mitglied Silber
    Registriert seit
    Sep 2008
    Beiträge
    96
    Sorry, hatte gleiches Thema bereits vor einem jahr gepostet!
    Dieser Thread kann gelöscht werden!
     

Ähnliche Themen

  1. Client zu Client.Kommunikation mit geringstem Leistungsaufwand.
    Von klanawagna im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 20.09.10, 09:25
  2. Antworten: 5
    Letzter Beitrag: 18.02.10, 08:41
  3. Antworten: 4
    Letzter Beitrag: 08.11.09, 10:55
  4. Antworten: 8
    Letzter Beitrag: 15.03.06, 20:15
  5. Antworten: 2
    Letzter Beitrag: 23.05.05, 22:30