=========================================================================== BBS: The Abacus * HST/DS * Potterville, MI Date: 03-08-93 (14:30) Number: 119 From: JOHN RIHERD Refer#: 140 To: BOB SEWELL Recvd: NO Subj: Re: Detecting Windows Conf: (35) Quick Basi --------------------------------------------------------------------------- The code: '********************************************************************** '* CHEKWIN.BAS * '* * '* This program will determine whether Windows is running and, if * '* so, its operating mode. * '* QuickBASIC must be loaded, as follows: QB /L QB * '* * '********************************************************************** DECLARE FUNCTION ChekWindows% (Ver1 AS INTEGER, Ver2 AS INTEGER) '$INCLUDE: 'Qb.bi' 'Include file for interrupt calls CONST MULTIPLEX = &H2F 'multiplex interrupt number CONST NOWIN = &H0 'Return for no Windows CONST WIN386 = &H1 'Return for Windows-386 V2.? CONST REAL = &H81 'Return for Windows in real mode CONST STANDARD = &H82 'Return for Windows in standard mode CONST ENHANCED = &H83 'Return fo Windows in enhanced mode DIM WellIsIt AS INTEGER DIM Ver1 AS INTEGER 'Primary version number DIM Ver2 AS INTEGER 'Secondary version number WellIsIt = ChekWindows%(Ver1, Ver2) 'Do the test and return values SELECT CASE WellIsIt CASE NOWIN PRINT "Windows is not running" CASE WIN386 PRINT "Windows-386 V 2.? is running" CASE REAL PRINT "Windows is running in real mode" CASE STANDARD PRINT "Windows is running in standard mode" CASE ENHANCED PRINT "Windows Vers. "; LTRIM$(STR$(Ver1)); "."; PRINT LTRIM$(STR$(Ver2)); " is running in enhanced mode" END SELECT FUNCTION ChekWindows% (Ver1 AS INTEGER, Ver2 AS INTEGER) DIM Regs AS RegTypeX 'Processor registers for interrupt call DIM VBuffer AS INTEGER 'To store version number Ver1 = 0 'Initialize version numbers Ver2 = 0 Regs.ax = &H1600 'Function number CALL INTERRUPTX(MULTIPLEX, Regs, Regs) VBuffer = Regs.ax 'Set regs.AX SELECT CASE VBuffer MOD 256 'Get the low byte of AX CASE &H1, &HFF 'Windows-386 running Ver1 = 2 'Primary version Ver2 = 0 'Secondary version is unavailable ChekWindows% = WIN386 CASE &H0, &H80 Regs.ax = &H4680 'Check for real or standard mode CALL INTERRUPTX(MULTIPLEX, Regs, Regs) IF (Regs.ax MOD 256) = &H80 THEN 'Check if Windows is running ChekWindows% = NOWIN 'No ELSE 'Check for real or standard mode Regs.ax = &H1605 'Set registers and function Regs.bx = &H0 Regs.si = &H0 Regs.cx = &H0 Regs.es = &H0 Regs.ds = &H0 Regs.dx = &H1 CALL INTERRUPTX(MULTIPLEX, Regs, Regs) IF Regs.cx = &H0 THEN 'Check for real mode ChekWindows% = REAL ELSE 'Windows in standard mode ChekWindows% = STANDARD END IF END IF CASE ELSE Ver1 = VBuffer AND &HF 'Get the low byte for primary version Ver2 = VBuffer \ 256 'Get the high byte for second. version ChekWindows% = ENHANCED END SELECT END FUNCTION --- T.A.G. 2.6d Beta * Origin: CSI Online - USR/DS - TagScan/TagRAM Alpha Sites... (1:106/3198) SEEN-BY: 1/211 11/2 4 13/13 101/1 108/89 109/25 110/69 114/5 123/19 124/1 SEEN-BY: 153/752 154/40 77 157/2 159/100 125 430 950 203/23 209/209 280/1 SEEN-BY: 390/1 396/1 15 397/2 2230/100 3603/20