Danke vielmals zunächst,
nun bin ich solangsam an dem Punkt, wo ich wenigesten ein Paar Werte aus den API Calls als Ergebnis bekomme. Nur scheint eine Funktion nicht zu funktionieren. Finde den Grund auch mit Hilfe von pinkvoke.net nicht (leider).
Hier mein aktueller Code Ausschnitt:
Die Deklarattionen
'Funktionsdefinition API-Aufruf für Session-Daten auslesen
<DllImport("wtsapi32", CharSet:=CharSet.Ansi)> _
Public Function WTSQuerySessionInformation( _
ByVal hServer As Int32, _
ByVal SessionId As Int32, _
ByVal InfoClass As WTSInfoClass, _
ByRef ppBuffer As IntPtr, _
ByRef pCount As Int32) As Int32
End Function
'Funktionsdefinition für API-Aufruf "Speicher freigeben",
<DllImport("wtsapi32", ExactSpelling:=True, SetLastError:=False)> _
Private Sub WTSFreeMemory(ByVal pMemory As IntPtr)
End Sub
'String API's
<DllImport("kernel32", EntryPoint:="lstrcpyA", SetLastError:=True, _
CharSet:=CharSet.Ansi)> _
Private Function StrCopyA(ByVal retval As String, ByVal Ptr As IntPtr) As _
Int32
End Function
<DllImport("kernel32", EntryPoint:="lstrlenA", SetLastError:=True, _
CharSet:=CharSet.Ansi)> _
Private Function StrLenA(ByVal Ptr As IntPtr) As Int32
End Function Der Rest:
Public Function GetWTSQueryHost(ByVal SessionID As Int32) As String
Dim retval As Int32
Dim lpBuffer As Int32
Dim Count As Int32
Dim lName As Int32
Dim sName As String = ""
Try
'Remotesitzungsinformationen holen
retval = WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, _
SessionID, WTSInfoClass.WTSClientName, lpBuffer, Count)
'Funktionsausschnitt
' Prozedur erfolgreich
If retval Then
'Stringlänge ermitteln
lName = StrLenA(lpBuffer)
If lName <> 0 Then
'String initialisieren
sName = New String(" ", lName)
'String kopieren
Call StrCopyA(sName, lpBuffer)
End If
' Speicher wieder freigeben
WTSFreeMemory(lpBuffer)
Else .... Ich habe nun das Poblem, dass die Funktion StrCopyA mit den übergebenen buffer nicht in die Variable zurückfüllt.
Zwar sind die Ergebnisse in der Variable lBuffer zwischen vb6 und .net noch unterschiedlich lName ist in beiden Fällen gleich, aber das kann ja nicht das Problem am Ende sein.
Gibt es dafür keine .net Lösung um das Thema anzugehen? Mir ist bei Funktionen, wo man nicht weiss was wie und wo passiert etwas unwohl. Man sieht es ja... Finde den Fehler nicht.
An die Cracks unter Euch. pls help. Ein kleiner Tipp wäre auch schon sehr hilfreich.
Greetz SuperEbse |