[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]

    {
    BB>   What code can I use to detect all three of the following:

    BB>  1.  : DPMI
    BB>  2.  : DeskView
    BB>  3.  : Windows
    BB>  4.  : OS/2

    Detecting Windows ...
    }

    {   Copyright (C) 1991 by: NativSoft Computing
                               1155 College Ave.
                               Adrian, MI, 49221
                               CIS 71160,1045

        Based on information published in an article
        by Ben Myers of Spirit of Performance, Inc.
        (Dr. Dobb's Journal, #172, January, 1991, pg 116)

        Compiled with Turbo Pascal v6.

        Modified by Tom Clark.  Changed Errorlevel values.

        Return Errorlevel 0 if Windows not running,
                          1 if Windows 2.x,
                          2 if Windows 3 real or standard mode,
                          3 if Windows 3 enhanced mode.

    }

    program findwin;

    var t     : byte;
        valu  : word;

    BEGIN

      {Inline assembler or macro is necessary to make the multiplex (2Fh) call
       because Turbo Pascal only *fakes* INTR procedure -- i.e., this DOESN'T
       work:           var regs : registers;
                         ...
                       regs.ax := $1600;
                       intr($2F,regs);
                       valu := regs.al
    }

      ASM
        MOV AX, 1600h
        INT 2Fh
        MOV valu, AX
      END;

      case lo(valu) of
        $01,$FF : t := 1;  {win/386, ver 2.xx running}
        $00,$80 : begin    {Enhanced, WIN/386, or WIN ver 2.xx NOT RUNNING
                                ... so, test for real or standard win 3.x }
                    ASM
                      MOV AX, 4680h
                      INT 2Fh
                      MOV valu, AX
                    END;

                    if valu = 0 then t := 2 {real or standard win 3.x running}
                    else t := 0;            {apparently NO WIN is running}
                  end;
        else t := 3;  {enhanced win 3.x running}
      end; {case}

    END.

[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]