Använder man API-funktionen GetComputerName så får man reda på vad datorn heter. So far so good. Testa med: Stort tack ! Ska genast testa ! Dok om nämnda API ? Var kan man tänkas hitta det ? (Jag har INTE någon Citrixserver installerad på hemmasajten!) Nu har jag testat ! Fungerar bra om man kör RDP:en mot en Win 2K Terminal Server, men vad händer när man kör ICA-klient mot en Citrix MetaFrame ? Funktionen är ju för Windows Terminal Server. Så jag vet inte om Citrix MetaFrame stödjer den.GetComputerName
Men! Om man kör en Citrix- eller TerminalServer-client och använder GetComputerName så får man serverns namn. Man kan kanske inte påstå att det är fel....men det var inte det jag ville veta, jag vill veta namnet på den dator där jag fysiskt sitter placerad.
Någon som har ett tips ?
(Jag skulle kunna tänka mig att det blir liknande resultat om man frågar efter DiskID, NätkortsID, CPU eller liknande, har dock ej testat.)Sv: GetComputerName
<code>
Option Explicit
Private Enum WTS_INFO_CLASS
WTSInitialProgram
WTSApplicationName
WTSWorkingDirectory
WTSOEMId
WTSSessionId
WTSUserName
WTSWinStationName
WTSDomainName
WTSConnectState
WTSClientBuildNumber
WTSClientName
WTSClientDirectory
WTSClientProductId
WTSClientHardwareId
WTSClientAddress
WTSClientDisplay
WTSClientProtocolType
End Enum
Private Const WTS_CURRENT_SERVER_HANDLE As Long = 0&
Private Declare Function GetCurrentProcessId _
Lib "kernel32" ( _
) As Long
Private Declare Function ProcessIdToSessionId _
Lib "kernel32" ( _
ByVal lProcessId As Long, _
ByRef lSessionId As Long _
) As Long
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 pBytesReturned As Long _
) As Long
Private Declare Sub WTSFreeMemory _
Lib "wtsapi32.dll" ( _
ByVal pMemory As Long _
)
Public Declare Function lstrcpyA _
Lib "kernel32" ( _
ByVal RetVal As String, _
ByVal Ptr As Long _
) As Long
Public Declare Function lstrlenA _
Lib "kernel32" ( _
ByVal Ptr As Any _
) As Long
Public Function GetWTSClientName() As String
Dim lProcId As Long
Dim lRet As Long
Dim lMySessionId As Long
Dim lpBuffer As Long
Dim lBytes As Long
lProcId = GetCurrentProcessId
lRet = ProcessIdToSessionId(lProcId, lMySessionId)
If lRet <> 0 Then
lRet = WTSQuerySessionInformation( _
WTS_CURRENT_SERVER_HANDLE, _
lMySessionId, _
WTS_INFO_CLASS.WTSClientName, _
lpBuffer, _
lBytes)
If lRet Then
GetWTSClientName = String$(lstrlenA(ByVal lpBuffer), 0)
Call lstrcpyA(ByVal GetWTSClientName, ByVal lpBuffer)
If lpBuffer <> 0 Then
WTSFreeMemory lpBuffer
End If
End If
End If
End Function
</code>
Funkar när jag testade på min server. Retunerade klientens namn.
För mer information om API anrop du kan använda se:
Terminal Services API
http://msdn.microsoft.com/library/en-us/termserv/termserv/terminal_services_api.aspSv: GetComputerName
Sv: GetComputerName
Är just nu inne på Citrix-webben och rotar. Kan bara testa hos kund med den miljön tidigast imorgon.
Du verkar ju "kunna en hel del", tror Du att din lösning "fungerar av bara farten" eller skiljer sig dessa mycket åt ?
Det går att använda ICA-klienten mot TS och RDP mot MetaFrame. Tror jag.....eller är jag ute och cyklar nu igen ?
/A ASv: GetComputerName
Testa och återkom med resultatet.
ÄR för övrigt inte så insatt i Citrix MetaFrame. Kör med inbyggt Terminal Server stöd på min server för att kunna administrera över internet.