OPSys, Windows 98, Windows XP

ezequiel

Member
Hi, we have some workstation in Windows 98, one in Windows 7, and most of them in Windows XP.

OPSys just returns "WIN32" for any Windows system of those, and I need certain promgram to know the workstation OS.

OS-GETENV("OS") returns Windows_NT for XP, 2003 and 7. In Windows 98 there is no a default set for variable OS.

And I'm out of ideas, is there a way to know wich windows is running in the workstation? We use Progress 9.1

(Well, I have one idea, it's setting a variable OS in all the Windows 98 workstations, but I would prefer an standard way)

Thanks
 

ezequiel

Member
Than you both.

I didn't know about SYSTEMINFO, it looks great, but I'll use the simpler (and faster) nice old DOS command "VER", I had forget about it!

Thanks again.
 

ManfredB

New Member
Hi!

If you just want to know if there is XP-Mode or classic-Mode you can use
SESSION:WINDOW-SYSTEM.
This returns "MS-WINXP" when XP-Mode or "MS-WIN95" when classic-mode.

Or you can use:

RUN winver.p
(OUTPUT dwPlatformID,
OUTPUT chPlatformID,
OUTPUT BuildNumber,
OUTPUT iMajor,
OUTPUT iMinor,
OUTPUT ReturnValue).

/* File Winver.p */


DEFINE OUTPUT PARAMETER dwPlatformID AS INTEGER NO-UNDO.
DEFINE OUTPUT PARAMETER chPlatformID AS CHARACTER NO-UNDO.
DEFINE OUTPUT PARAMETER BuildNumber AS INTEGER NO-UNDO.
DEFINE OUTPUT PARAMETER MajorVersion AS INTEGER NO-UNDO.
DEFINE OUTPUT PARAMETER MinorVersion AS INTEGER NO-UNDO.
DEFINE OUTPUT PARAMETER ReturnValue AS INTEGER NO-UNDO.

{windows.i}

DEF VAR lpVersionInfo AS MEMPTR.


SET-SIZE(lpVersionInfo) = 148.
PUT-LONG(lpVersionInfo,1) = 148.
RUN GetVersionExA IN hpApi( GET-POINTER-VALUE(lpVersionInfo),
OUTPUT ReturnValue).
dwPlatformID = GET-LONG(lpVersionInfo,17).

CASE dwPlatformID :
WHEN 0 THEN chPlatformID = "Win32s on Windows 3.1".
WHEN 1 THEN chPlatformID = "Win32 on Windows 95 or 98".
WHEN 2 THEN chPlatformID = "Win32 on Windows NT".
END.

CASE dwPlatformID :
WHEN 1 THEN BuildNumber = GET-SHORT(lpVersionInfo,13).
WHEN 2 THEN BuildNumber = GET-LONG (lpVersionInfo,13).
/* what about 'when 0' for 3.1 with win32s ?? */
END.

/* You have Windows 95 OSR 2 if:
dwPlatformID=1
and
LOWORD(BuildNumber)=1111 (probably hex??)
Unfortunately I have not had a chance to test that.
*/

CASE dwPlatformID :
WHEN 1 THEN DO:
MinorVersion = GET-BYTE(lpVersionInfo,15).
MajorVersion = GET-BYTE(lpVersionInfo,16).
END.
OTHERWISE DO:
MajorVersion = GET-LONG(lpVersionInfo, 5).
MinorVersion = GET-LONG(lpVersionInfo, 9).
END.
END.

/*
MESSAGE "MajorVersion=" MajorVersion SKIP
"MinorVersion=" MinorVersion SKIP
"BuildNumber=" BuildNumber SKIP
"PlatformID=" chPlatFormId SKIP
"CSDversion=" GET-STRING(lpVersionInfo,21) SKIP(2)
"on NT, CSDversion contains version of latest Service Pack" SKIP
"on 95/98, CSDversion contains arbitrary extra info, if any"
VIEW-AS ALERT-BOX.
*/

SET-SIZE(lpVersionInfo) = 0.

This returns every Information you need.

Best regards
Manfred Brandl
 

ManfredB

New Member
Hi you also need windows.i

/* ====================================================================
file windows.i
by Jurjen Dijkstra, 1997
mailto:jurjen@global-shared.com
http://www.global-shared.com
language Progress 8.2A
==================================================================== */

&IF DEFINED(WINDOWS_I) = 0
&THEN
&GLOBAL-DEFINE WINDOWS_I
&GLOBAL-DEFINE A A

/* data types */
&GLOBAL-DEFINE HWND LONG
&GLOBAL-DEFINE BOOL LONG
&GLOBAL-DEFINE HINSTANCE LONG
&GLOBAL-DEFINE INT LONG
&GLOBAL-DEFINE INTSIZE 4

/* libraries */
&GLOBAL-DEFINE USER "user32"
&GLOBAL-DEFINE KERNEL "kernel32"
&GLOBAL-DEFINE SHELL "shell32"
&GLOBAL-DEFINE MAPI "mapi32"
&GLOBAL-DEFINE GDI "gdi32"
&GLOBAL-DEFINE MMEDIA "winmm"
&GLOBAL-DEFINE WINSPOOL "winspool.drv"
&GLOBAL-DEFINE ADVAPI "advapi32"
&GLOBAL-DEFINE A A

/* messages */
&GLOBAL-DEFINE WM_PAINT 15
&GLOBAL-DEFINE WM_HSCROLL 276
&GLOBAL-DEFINE WM_VSCROLL 277
&GLOBAL-DEFINE WM_LBUTTONDOWN 513
&GLOBAL-DEFINE WM_LBUTTONUP 514
&GLOBAL-DEFINE WM_RBUTTONDOWN 516
&GLOBAL-DEFINE WM_RBUTTONUP 517
&GLOBAL-DEFINE WM_USER 1024

/* mouse buttons */
&GLOBAL-DEFINE MK_LBUTTON 1
&GLOBAL-DEFINE MK_RBUTTON 2

/* scrollbars */
&GLOBAL-DEFINE SB_HORZ 0
&GLOBAL-DEFINE SB_VERT 1
&GLOBAL-DEFINE SB_BOTH 3
&GLOBAL-DEFINE SB_THUMBPOSITION 4

/* editors */
&IF "{&OPSYS}":U="WIN32":U
&THEN
&GLOBAL-DEFINE EM_SETPASSWORDCHAR 204
&ELSE
&GLOBAL-DEFINE EM_SETPASSWORDCHAR {&WM_USER} + 28
&ENDIF

/* some window styles */
&GLOBAL-DEFINE GWL_STYLE -16
&GLOBAL-DEFINE WS_MAXIMIZEBOX 65536
&GLOBAL-DEFINE WS_MINIMIZEBOX 131072
&GLOBAL-DEFINE WS_THICKFRAME 262144
&GLOBAL-DEFINE WS_CAPTION 12582912
&GLOBAL-DEFINE WS_BORDER 8388608

/* some extended window styles */
&GLOBAL-DEFINE GWL_EXSTYLE -20
&GLOBAL-DEFINE WS_EX_CONTEXTHELP 1024
&GLOBAL-DEFINE WS_EX_PALETTEWINDOW 392

/* system commands/menu */
&GLOBAL-DEFINE SC_SIZE 61440
&GLOBAL-DEFINE SC_MINIMIZE 61472
&GLOBAL-DEFINE SC_MAXIMIZE 61488
&GLOBAL-DEFINE MF_BYCOMMAND 0

/* placement order (Z-order) */
&GLOBAL-DEFINE HWND_TOPMOST -1
&GLOBAL-DEFINE HWND_NOTOPMOST -2

/* window-positioning flags */
&GLOBAL-DEFINE SWP_NOSIZE 1
&GLOBAL-DEFINE SWP_NOMOVE 2
&GLOBAL-DEFINE SWP_NOZORDER 4
&GLOBAL-DEFINE SWP_NOACTIVATE 16
&GLOBAL-DEFINE SWP_FRAMECHANGED 32
&GLOBAL-DEFINE SWP_SHOWWINDOW 64

/* registry */
&GLOBAL-DEFINE HKEY_CLASSES_ROOT -2147483648
&GLOBAL-DEFINE HKEY_CURRENT_USER -2147483647
&GLOBAL-DEFINE HKEY_LOCAL_MACHINE -2147483646
&GLOBAL-DEFINE HKEY_USERS -2147483645
&GLOBAL-DEFINE HKEY_PERFORMANCE_DATA -2147483644
&GLOBAL-DEFINE HKEY_CURRENT_CONFIG -2147483643
&GLOBAL-DEFINE HKEY_DYN_DATA -2147483642

&GLOBAL-DEFINE ERROR_SUCCESS 0
&GLOBAL-DEFINE ERROR_NO_MORE_ITEMS 259

&GLOBAL-DEFINE MAX_PATH 260

/* results from WaitForSingleObject */
&GLOBAL-DEFINE WAIT_ABANDONED 128
&GLOBAL-DEFINE WAIT_OBJECT_0 0

/* menu manipulation */
&GLOBAL-DEFINE MF_BYPOSITION 1024
&GLOBAL-DEFINE MF_REMOVE 256

/* get a handle to the procedure definitions */
&IF DEFINED(DONTDEFINE-HPAPI)=0
&THEN
DEFINE NEW GLOBAL SHARED VARIABLE hpApi AS HANDLE NO-UNDO.
IF NOT VALID-HANDLE(hpApi) THEN RUN windows/Windows.p PERSISTENT SET hpApi.

/* forward function declarations. Must not be included in windows.p : */
{winfunc.i}
&ENDIF
&ENDIF /* &IF DEFINED(WINDOWS_I)=0 */
 

ManfredB

New Member
And Maybe also winfunc.i

/* ===========================================================================
file : WINFUNC.I
by : Jurjen Dijkstra, 1997
mailto:jurjen@global-shared.com
http://www.global-shared.com
purpose : Forward declarations for functions that call API procedures.
This include file is included in windows.i
=========================================================================== */

/* prevent multiple inclusion: */
&IF DEFINED(WINFUNC_I) = 0
&THEN
&GLOBAL-DEFINE WINFUNC_I

/* start persistent procedure holding the function implementations.
The forward declarations are needed in winfunc.p, but the
"run winfunc.p persistent" part must be prevented in winfunc.p : */

DEFINE NEW GLOBAL SHARED VARIABLE hpWinFunc AS HANDLE NO-UNDO.
&IF DEFINED(DONTRUN-WINFUNC)=0
&THEN
IF NOT VALID-HANDLE(hpWinFunc) THEN RUN windows/Winfunc.p PERSISTENT SET hpWinFunc.
&ELSE
hpWinFunc = THIS-PROCEDURE:HANDLE.
&ENDIF

/* --- the forward declarations : --- */

FUNCTION GetLastError /* 1:1 implementation of API */
RETURNS INTEGER /* = dwErrorID */
()
IN hpWinFunc.

FUNCTION GetParent /* 1:1 implementation of API */
RETURNS INTEGER /* = hWnd van parent */
(INPUT HWND AS INTEGER)
IN hpWinFunc.

FUNCTION ShowLastError /* calls GetLastError and views it as alert-box */
RETURNS INTEGER /* = dwErrorID */
()
IN hpWinFunc.

FUNCTION CreateProcess /* wrapper for the big API definition */
RETURNS INTEGER /* = if success then hProcess else 0 */
(INPUT CommandLine AS CHAR,
INPUT CurrentDir AS CHAR,
INPUT wShowWindow AS INTEGER)
IN hpWinFunc.

&ENDIF /* &IF DEFINED(WINFUNC_I) = 0 */
 

ezequiel

Member
This looks great, Manfred, thank you!

I'll try the code today.

However SESSION:WINDOW-SYSTEM retuirns "WIN95" in my XP PC and the Win2003 server. I suppose this refers to the mode we are running Progress.

Thanks again

Ezequiel
 

ManfredB

New Member
Hi!

I think that Win98 is dead, an the only what Progress has to know is, if there is classical-mode or xp-mode.
And if this returns "MS-WinXP" from within Server2003 you have activatet Designs and use XO-Mode.

regards
Manfred
 
Top