Microsoft KB Archive/251066

= How To Determine If a Computer Is a Microsoft Terminal Server =

Article ID: 251066

Article Last Modified on 7/1/2004

-

APPLIES TO


 * Microsoft Visual FoxPro 3.0 Standard Edition
 * Microsoft Visual FoxPro 3.0b Standard Edition
 * Microsoft Visual FoxPro 5.0 Standard Edition
 * Microsoft Visual FoxPro 5.0a
 * Microsoft Visual FoxPro 6.0 Professional Edition

-



This article was previously published under Q251066



SUMMARY
This article shows how to determine if a computer is a Microsoft Windows NT or Windows 2000 Terminal Server.



MORE INFORMATION
  In Visual FoxPro, create a program file using the following code: *Start of Code LOCAL lTerminalServer

lTerminalServer = IsTerminalServer

IF (lTerminalServer) THEN =MESSAGEBOX ("This Computer is a Terminal Server") ELSE =MESSAGEBOX("This Computer is not a Terminal Server") ENDIF

FUNCTION IsTerminalServer * This function will determine if the machine is a Terminal Server. * It will return .T. if it is and .F. if not.

* Constants that are needed for Registry functions #DEFINE HKEY_LOCAL_MACHINE -2147483646 && BITSET(0,31)+2 #DEFINE REG_DWORD 4                    && A 32-bit number.

* WIN 32 API functions that are used DECLARE Integer RegOpenKey IN Win32API ; Integer nHKey, String @cSubKey, Integer @nResult DECLARE Integer RegQueryValueEx IN Win32API ; Integer nHKey, String lpszValueName, Integer dwReserved,; Integer @lpdwType, String @lpbData, Integer @lpcbData DECLARE Integer RegCloseKey IN Win32API ; Integer nHKey DECLARE GetVersionEx IN win32api STRING @OSVERSIONINFO

* Local variables used LOCAL nErrCode     && Error Code returned from Registry functions LOCAL nKeyHandle   && Handle to Key that is opened in the Registry LOCAL lpdwValueType    && Type of Value that we are looking for LOCAL lpbValue     && The data stored in the value LOCAL lpcbValueSize    && Size of the variable LOCAL lpdwReserved     && Reserved Must be 0 LOCAL cKey         && Key we need to open LOCAL cValueToGet      && Value to get LOCAL lTerminalServer  && True if it is a Terminal Server LOCAL nTSEnabled   && Numeric value of TSEnabled LOCAL OSVersion    && OS Version LOCAL cMajorVersion    && Just the Version number i.e. 4 or 5 * Initialize the variables cKey = "System\CurrentControlSet\Control\Terminal Server" cValueToGet = "TSEnabled" nKeyHandle = 0 lpdwReserved = 0       && Must be 0 lpdwValueType = REG_DWORD lpcbValueSize = 4         && DWORD is 4 bytes lTerminalServer = .F.     && Assume it isn't a Terminal Server lpbValue = SPACE(4)

nErrCode = RegOpenKey(HKEY_LOCAL_MACHINE, cKey, @nKeyHandle) * If the error code isn't 0, then the key doesn't exist or can't be opened. IF (nErrCode # 0) THEN RETURN .F.  ENDIF

* We need to check and see what version we are running NT 4 and Windows 2000 are different OSVersion = LongToStr(148) + REPLICATE(CHR(0), 144) =GetVersionEx(@OSVersion) nMajorVersion = StrToLong(SUBSTR(OSVersion, 5, 4)) cMajorVersion = ALLTRIM(STR(nMajorVersion))

* If it is NT 4 and we made it this far the machine is a Terminal Server IF (cMajorVersion = "4") THEN * Close the key when done. =RegCloseKey(nKeyHandle) RETURN .T.  ENDIF

* Get the value of TSEnabled. 1 is a Terminal Server 0 isn't    nErrCode=RegQueryValueEx(nKeyHandle, cValueToGet, lpdwReserved, @lpdwValueType, @lpbValue, @lpcbValueSize)

* Close the key when done. =RegCloseKey(nKeyHandle)

IF (nErrCode # 0) THEN RETURN .F.  ELSE nTSEnabled = StrToLong(lpbValue) ENDIF * Check to see if it is a Terminal Server IF (nTSEnabled = 1) THEN RETURN .T.  ELSE RETURN .F.          ENDIF ENDFUNC

FUNCTION StrToLong PARAMETERS cLongStr
 * This function converts a String to a Long

LOCAL nLoopVar, nRetval

nRetval = 0 FOR nLoopVar = 0 TO 24 STEP 8 nRetval = nRetval + (ASC(cLongStr) * (2^nLoopVar)) cLongStr = RIGHT(cLongStr, LEN(cLongStr) - 1) NEXT RETURN nRetval

FUNCTION LongToStr PARAMETERS nLongVal
 * This function converts a long to a string

LOCAL nLoopVar, strReturn

strReturn = "" FOR nLoopVar = 24 TO 0 STEP -8 strReturn = CHR(INT(nLongVal/(2^nLoopVar))) + strReturn nLongVal = MOD(nLongVal, (2^nLoopVar)) NEXT RETURN strReturn  Run the program created in step 1. The result appears in a message box as:
 * End of Code

This computer is a Terminal Server.

-or-

This computer is not a Terminal Server.



Keywords: kbhowto kbapi kbcodesnippet KB251066

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.