Iniciar Sesión

Ver la Versión Completa : [PowerCOBOL + WinAPI] Obtener la version de SO Windows


Kuk
26 de abril de 2015, 13:55
IDENTIFICATION DIVISION.
PROGRAM-ID. WINVERS.
AUTHOR. KUK.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.

DATA DIVISION.

WORKING-STORAGE SECTION.

01 OSVERSIONINFO TYPEDEF.
* The size of this data structure, in bytes. Set this member to sizeof(OSVERSIONINFO).
05 dwOSVersionInfoSize PIC S9(9) COMP-5.
* The major version number of the operating system. For more information, see Remarks.
05 dwMajorVersion PIC S9(9) COMP-5.
* The minor version number of the operating system. For more information, see Remarks.
05 dwMinorVersion PIC S9(9) COMP-5.
* The build number of the operating system.
05 dwBuildNumber PIC S9(9) COMP-5.
* The operating system platform. This member can be the following value:*
* - VER_PLATFORM_WIN32_NT = 2
* The operating system is Windows 7, Windows Server 2008, Windows Vista,
* Windows Server 2003, Windows XP, or Windows 2000.
05 dwPlatformId PIC S9(9) COMP-5.
* A null-terminated string, such as "Service Pack 3", that indicates the latest Service Pack
* installed on the system. If no Service Pack has been installed, the string is empty.
05 szCSDVersion PIC X(128).

01 WS-OSINFO TYPE OSVERSIONINFO.
01 STATUS-CODE PIC S9(4) COMP-5.

LINKAGE SECTION.
01 LNK-WV-DATA.
05 LNK-WV-OUTPUT.
10 LNK-WV-RC PIC 9(2).
10 LNK-WV-VERS PIC X(100).
10 LNK-WV-SP PIC X(50).

PROCEDURE DIVISION USING LNK-WV-DATA.

INITIALIZE LNK-WV-DATA REPLACING
NUMERIC DATA BY ZEROS
ALPHANUMERIC DATA BY SPACES

MOVE 148 TO dwOSVersionInfoSize OF WS-OSINFO

CALL "GetVersionExA" WITH STDCALL USING BY REFERENCE WS-OSINFO RETURNING STATUS-CODE

IF STATUS-CODE = ZEROS
MOVE 99 TO LNK-WV-RC

MOVE SPACES TO LNK-WV-VERS

GOBACK
END-IF

MOVE ZEROS TO LNK-WV-RC

EVALUATE TRUE ALSO TRUE

WHEN dwMajorVersion = 6
ALSO dwMinorVersion = 3
MOVE "Windows 8.1" TO LNK-WV-VERS

WHEN dwMajorVersion = 6
ALSO dwMinorVersion = 2
MOVE "Windows 8" TO LNK-WV-VERS

WHEN dwMajorVersion = 6
ALSO dwMinorVersion = 1
MOVE "Windows 7" TO LNK-WV-VERS

WHEN dwMajorVersion = 6
ALSO dwMinorVersion = 0
MOVE "Windows Vista" TO LNK-WV-VERS

WHEN dwMajorVersion = 5
ALSO dwMinorVersion = 2
MOVE "Windows Server 2003" TO LNK-WV-VERS

WHEN dwMajorVersion = 5
ALSO dwMinorVersion = 1
MOVE "Windows XP" TO LNK-WV-VERS

WHEN dwMajorVersion = 5
ALSO dwMinorVersion = 0
MOVE "Windows 2000" TO LNK-WV-VERS

WHEN OTHER
MOVE "Windows UNKNOWN" TO LNK-WV-VERS

END-EVALUATE

INSPECT szCSDVersion REPLACING ALL X"00" BY SPACES

MOVE szCSDVersion TO LNK-WV-SP

GOBACK
.

eage1969
10 de mayo de 2018, 01:48
estimados por que no usar la sentencia

ACCEPT SYSTEM-INFORMATION FROM SYSTEM-INFO.

Donde SYSTEM-INFO saca toda la informacion del sisyema del equipo que se usa ... tipo os... version...usuario ... dominio etc..etc y lo recolecta anivel de la workin den SYSTEM-INFORMATION

01 SYSTEM-INFORMATION.
03 OPERATING-SYSTEM PIC X(10).
88 OS-IS-MSDOS VALUE "MS-DOS".
88 OS-IS-OS2 VALUE "OS/2".
88 OS-IS-VMS VALUES "VMS",
"VAX/VMS".
88 OS-IS-UNIX VALUES "Unix",
"Unix-V", "Unix-4",
"UNOS".
88 OS-IS-AOS VALUE "AOS/VS".
88 OS-IS-WINDOWS VALUE "WINDOWS".
88 OS-IS-WIN-NT VALUE "WIN/NT".
88 OS-IS-WIN-FAMILY VALUES "WINDOWS",
"WIN/NT".
88 OS-IS-AMOS VALUE "AMOS".
88 OS-IS-MPE VALUE "MPE/iX".
88 OS-IS-MPEIX VALUE "MPE/iX".
03 USER-ID PIC X(12).
03 STATION-ID PIC X(12).
03 FILLER PIC X.
88 HAS-INDEXED-READ-PREVIOUS VALUE "Y".
03 FILLER PIC X.
88 HAS-RELATIVE-READ-PREVIOUS VALUE "Y".
03 FILLER PIC X.
88 CAN-TEST-INPUT-STATUS VALUE "Y".
03 FILLER PIC X.
88 IS-MULTI-TASKING VALUE "Y".
03 RUNTIME-VERSION.
88 VERSION-PRIOR-TO-2-2 VALUE SPACES.
05 RUNTIME-MAJOR-VERSION PIC 99.
05 RUNTIME-MINOR-VERSION PIC 99.
05 RUNTIME-RELEASE PIC 99.
03 FILLER PIC X.
88 IS-PLUGIN VALUE "Y".
03 SERIAL-NUMBER PIC X(20).
03 FILLER PIC X.
88 HAS-LARGE-FILE-SUPPORT VALUE "Y".

Kuk
10 de mayo de 2018, 17:42
eage1969, esa sentencia a qué compilador pertenece? Imagino que es de ACU o RM.

No lo he probado, pero para mi que no es compatible con PowerCOBOL. Sobre todo porque preguntar en Power si el SO es Unix u otro que no sea Windows no tiene sentido ninguno ya que PowerCOBOL sólo existe para Windows.

eage1969
6 de junio de 2018, 05:22
Hola buenas noches..
perdón por responder tarde ...pertenece a para cualquiera de las versiones de Cobol.