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 * This function converts a String to a Long PARAMETERS cLongStr 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 * This function converts a long to a string PARAMETERS nLongVal 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 *End of Code
- Run the program created in step 1. The result appears in a message box as:
This computer is a Terminal Server.
-or-
This computer is not a Terminal Server.
Keywords: kbhowto kbapi kbcodesnippet KB251066