Autorarchive: ralf

get windows version – 1

prototype:  api-function: GetVersionEx( *group), bool, pascal, raw, name('GetVersionExA')
procedure:  GetWinVersion(), long
return:     0-error, 1-win32s, 2-win95, 3-win98, 4-nt4, 5-nt2000

code: 
 execute 1+ GetWinVersion()
   s"= 'error in GetWinVersion'
   s"= 'win32s'
   s"= 'win95'
   s"= 'win98'
   s"= 'nt4'
   s"= 'nt2000'
 end
 message( s")

definition:

GetWinVersion     procedure 
ret               long, auto
tosvi             group, type
dwOSVersionInfoSize ulong
dwMajorVersion      ulong
dwMinorVersion      ulong
dwBuildNumber       ulong
dwPlatformId        ulong
szCSDVersion        cstring( 128)
                  end
osviex            group, auto
osvi                group( tosvi).
wServicePackMajor   long
wServicePackMinor   long
wSuiteMask          long
wProductType        byte
wReserved           byte
                  end
 code
 ret= 0
 clear( osviex, -1)
 osviex.osvi.dwOSVersionInfoSize= size( osviex)
 if not GetVersionEx( osviex)
   osviex.osvi.dwOSVersionInfoSize= size( osviex.osvi)
   if not GetVersionEx( osviex) then return ret.
 end
 execute 1+ osviex.osvi.dwPlatformId
   do win32s
   do win9x
   do winnt
 end
 return( ret)  

winnt routine
 if osviex.osvi.dwMajorVersion <= 4
   ret= 4
 elsif osviex.osvi.dwMajorVersion = 5
   ret= 5
 end

win9x routine
 if osviex.osvi.dwMajorVersion > 4 or |
    ( osviex.osvi.dwMajorVersion = 4 and osviex.osvi.dwMinorVersion > 
0)
   ret= 3
 else
   ret= 2
 end

win32s routine
 ret= 1

 omit( '->')
---------------------------------------------------------------------------------------------
BOOL DisplaySystemVersion()
{
   OSVERSIONINFOEX osvi;
   BOOL bOsVersionInfoEx;

   // Try calling GetVersionEx using the OSVERSIONINFOEX structure,
   // which is supported on Windows 2000.
   //
   // If that fails, try using the OSVERSIONINFO structure.

   ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
   osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

   if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
   {
      // If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO.

      osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
      if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) 
         return FALSE;
   }

   switch (osvi.dwPlatformId)
   {
      case VER_PLATFORM_WIN32_NT:

      // Test for the product.

         if ( osvi.dwMajorVersion <= 4 )
            printf( "Microsoft Windows NT ");

         if ( osvi.dwMajorVersion == 5 )
            printf ("Microsoft Windows 2000 ");

      // Test for workstation versus server.

         if( bOsVersionInfoEx )
         {
            if ( osvi.wProductType == VER_NT_WORKSTATION )
               printf ( "Professional " );

            if ( osvi.wProductType == VER_NT_SERVER )
               printf ( "Server " );
         }
         else
         {
            HKEY hKey;
            char szProductType[80];
            DWORD dwBufLen;

            RegOpenKeyEx( HKEY_LOCAL_MACHINE,
               "SYSTEM\\CurrentControlSet\\Control\\ProductOptions",
               0, KEY_QUERY_VALUE, &hKey );
            RegQueryValueEx( hKey, "ProductType", NULL, NULL,
               (LPBYTE) szProductType, &dwBufLen);
            RegCloseKey( hKey );
            if ( lstrcmpi( "WINNT", szProductType) == 0 )
               printf( "Workstation " );
            if ( lstrcmpi( "SERVERNT", szProductType) == 0 )
               printf( "Server " );
         }

      // Display version, service pack (if any), and build number.

         printf ("version %d.%d %s (Build %d)\n",
            osvi.dwMajorVersion,
            osvi.dwMinorVersion,
            osvi.szCSDVersion,
            osvi.dwBuildNumber & 0xFFFF);

         break;

      case VER_PLATFORM_WIN32_WINDOWS:

         if ((osvi.dwMajorVersion > 4) || 
            ((osvi.dwMajorVersion == 4) && (osvi.dwMinorVersion > 0)))
         {
             printf ("Microsoft Windows 98 ");
         } 
         else printf ("Microsoft Windows 95 ");

         break;

      case VER_PLATFORM_WIN32s:

         printf ("Microsoft Win32s ");
         break;
   }
   return TRUE; 
}

Hard Disk Serial Number

> I need to read hard disk serial number from application written in Clarion
> 5.0 to protect application from unauthorized copying.

Anton Novikov:

Prototypes:
   GetVolumeInformationA(<*LPCSTR>,*LPSTR,DWORD,*DWORD,*DWORD,*DWORD,*LPSTR ,DWORD),BOOL,PASCAL,RAW
   GetLastError (),DWORD,PASCAL,NAME('GetLastError')

Parameters:
RootPathName         LPCSTR(4)
VolumeName           LPSTR(15)
VolumeNameSize       DWORD(128)
VolSerialNum         DWORD(15)                        !that's what you need
MaxCompLen           DWORD(15)
FileSysFlags         DWORD(15)
FileSysName          LPSTR(15)
FileSName            DWORD(15)

Code:
IF GetVolumeInformationA(, |
                           VolumeName, |
                           VolumeNameSize, |
                           VolSerialNum, |
                           MaxCompLen, |
                           FileSysFlags, |
                           FileSysName, |
                           FileSName)
        MESSAGE('VolumeName= ' & VolumeName & '|' & 'VolSerialNum= ' & VolSerialNum)
ELSE
        MESSAGE('API Error '& GetLastError())
END

Clarion: clib module

    !CW Low-Level Run-Time API functions
    !Last Revised 09 11 95
    !Copyright 1995 - TopSpeed Corporation

    module('CW_API')
    !Conversions
      AToF(*cstring),real,raw,name('_atof')
      AToI(*cstring),short,raw,name('_atoi')
      AToL(*cstring),long,raw,name('_atol')
      AToUL(*cstring),ulong,raw,name('_atoul')
    !Integer Math
      API_Abs(short),short,name('_abs')            !Renamed to avoid conflict with Builtins.Clw
      LAbs(long),long,name('_labs')
    !Char Type Functions
      ToUpper(short),short,name('_toupper')
      ToLower(short),short,name('_tolower')
      API_IsAlpha(short),short,name('_isalpha')    !Renamed to avoid conflict with Builtins.Clw
      API_IsLower(short),short,name('_islower')    !Renamed to avoid conflict with Builtins.Clw
      API_IsUpper(short),short,name('_isupper')    !Renamed to avoid conflict with Builtins.Clw
      IsAscii(short),short,name('_isascii')
      IsCntrl(short),short,name('_iscntrl')
      IsDigit(short),short,name('_isdigit')
      IsGraph(short),short,name('_isgraph')
      IsPrint(short),short,name('_isprint')
      IsPunct(short),short,name('_ispunct')
      IsSpace(short),short,name('_isspace')
      IsXDigit(short),short,name('_isxdigit')
    !Utility Functions
      Rand(),short,name('_rand')
      SRand(ushort),name('_srand')
    !C++ (nul terminated) String functions
      StrCat(*cstring,*cstring),cstring,raw,name('_strcat')
      StrCmp(*cstring,*cstring),short,raw,name('_strcmp')
      ChrCmp(byte,byte),short,name('_chrcmp')
      StrEqu(*cstring,*cstring),short,raw,name('_strequ')
      StrCpy(*cstring,*cstring),cstring,raw,name('_strcpy')
      StrLen(*cstring),ushort,raw,name('_strlen')
      StrChr(*cstring,short),cstring,raw,name('_strchr')
      StrCSpn(*cstring,*cstring),ushort,raw,name('_strcspn')
      StrError(short),cstring,raw,name('_strerror')
      StrSpn(*cstring,*cstring),ushort,raw,name('_strspn')
      StrStr(*cstring,*cstring),cstring,raw,name('_strstr')
      StrTok(*cstring,*cstring),cstring,raw,name('_strtok')
      StrPBrk(*cstring,*cstring),cstring,raw,name('_strpbrk')
      StrRChr(*cstring,short),cstring,raw,name('_strrchr')
      StrLwr(*cstring),cstring,raw,name('_strlwr')
      StrUpr(*cstring),cstring,raw,name('_strupr')
      StrDup(*cstring),cstring,raw,name('_strdup')
      StrRev(*cstring),cstring,raw,name('_strrev')
      StrNCat(*cstring,*cstring,ushort),cstring,raw,name('_strncat')
      StrNCmp(*cstring,*cstring,ushort),short,raw,name('_strncmp')
      StrNCpy(*cstring,*cstring,ushort),cstring,raw,name('_strncpy')
      StrNICmp(*cstring,*cstring,ushort),short,raw,name('_strnicmp')
    !Low-Level File Manipulation
      Access (*CSTRING,SIGNED),SIGNED,RAW,NAME('_access')  ! April 11, 1999 corrected according to Alexey Solovjev
!!      Access(*cstring,short),short,raw,name('_access')
      ChMod(*cstring,short),short,raw,name('_chmod')
      API_Remove(*cstring),short,raw,name('_remove')            !Renamed to avoid conflict with Builtins.Clw
      API_Rename(*cstring,*cstring),short,raw,name('_rename')   !Renamed to avoid conflict with Builtins.Clw
      FnMerge(*cstring,*cstring,*cstring,*cstring,*cstring),raw,name('_fnmerge')
      FnSplit(*cstring,*cstring,*cstring,*cstring,*cstring),short,raw,name('_fnsplit')
      MkDir(*cstring),short,raw,name('_mkdir')
      RmDir(*cstring),short,raw,name('_rmdir')
      GetCurDir(short,*cstring),short,raw,name('_getcurdir')
      ChDir(*cstring),short,raw,name('_chdir')
      GetDisk(),short,name('_getdisk')
      SetDisk(short),short,name('_setdisk')
    end

Clarion: Equates for Paper

PAPER:LETTER              EQUATE(1)       ! Letter 8 1/2 x 11 in
PAPER:LETTERSMALL         EQUATE(2)       ! Letter Small 8 1/2 x 11 in
PAPER:TABLOID             EQUATE(3)       ! Tabloid 11 x 17 in
PAPER:LEDGER              EQUATE(4)       ! Ledger 17 x 11 in
PAPER:LEGAL               EQUATE(5)       ! Legal 8 1/2 x 14 in
PAPER:STATEMENT           EQUATE(6)       ! Statement 5 1/2 x 8 1/2 in
PAPER:EXECUTIVE           EQUATE(7)       ! Executive 7 1/4 x 10 1/2 in
PAPER:A3                  EQUATE(8)       ! A3 297 x 420 mm
PAPER:A4                  EQUATE(9)       ! A4 210 x 297 mm
PAPER:A4SMALL             EQUATE(10)      ! A4 Small 210 x 297 mm
PAPER:A5                  EQUATE(11)      ! A5 148 x 210 mm
PAPER:B4                  EQUATE(12)      ! B4 250 x 354
PAPER:B5                  EQUATE(13)      ! B5 182 x 257 mm
PAPER:FOLIO               EQUATE(14)      ! Folio 8 1/2 x 13 in
PAPER:QUARTO              EQUATE(15)      ! Quarto 215 x 275 mm
PAPER:10X14               EQUATE(16)      ! 10x14 in
PAPER:11X17               EQUATE(17)      ! 11x17 in
PAPER:NOTE                EQUATE(18)      ! Note 8 1/2 x 11 in
PAPER:ENV_9               EQUATE(19)      ! Envelope #9 3 7/8 x 8 7/8
PAPER:ENV_10              EQUATE(20)      ! Envelope #10 4 1/8 x 9 1/2
PAPER:ENV_11              EQUATE(21)      ! Envelope #11 4 1/2 x 10 3/8
PAPER:ENV_12              EQUATE(22)      ! Envelope #12 4 \276 x 11
PAPER:ENV_14              EQUATE(23)      ! Envelope #14 5 x 11 1/2
PAPER:CSHEET              EQUATE(24)      ! C size sheet
PAPER:DSHEET              EQUATE(25)      ! D size sheet
PAPER:ESHEET              EQUATE(26)      ! E size sheet
PAPER:ENV_DL              EQUATE(27)      ! Envelope DL 110 x 220mm
PAPER:ENV_C5              EQUATE(28)      ! Envelope C5 162 x 229 mm
PAPER:ENV_C3              EQUATE(29)      ! Envelope C3  324 x 458 mm
PAPER:ENV_C4              EQUATE(30)      ! Envelope C4  229 x 324 mm
PAPER:ENV_C6              EQUATE(31)      ! Envelope C6  114 x 162 mm
PAPER:ENV_C65             EQUATE(32)      ! Envelope C65 114 x 229 mm
PAPER:ENV_B4              EQUATE(33)      ! Envelope B4  250 x 353 mm
PAPER:ENV_B5              EQUATE(34)      ! Envelope B5  176 x 250 mm
PAPER:ENV_B6              EQUATE(35)      ! Envelope B6  176 x 125 mm
PAPER:ENV_ITALY           EQUATE(36)      ! Envelope 110 x 230 mm
PAPER:ENV_MONARCH         EQUATE(37)      ! Envelope Monarch 3.875 x 7.5 in
PAPER:ENV_PERSONAL        EQUATE(38)      ! 6 3/4 Envelope 3 5/8 x 6 1/2 in
PAPER:FANFOLD_US          EQUATE(39)      ! US Std Fanfold 14 7/8 x 11 in
PAPER:FANFOLD_STD_GERMAN  EQUATE(40)      ! German Std Fanfold 8 1/2 x 12 in
PAPER:FANFOLD_LGL_GERMAN  EQUATE(41)      ! German Legal Fanfold 8 1/2 x 13 in
PAPER:LAST                EQUATE(41)
PAPER:USER                EQUATE(256)

Clarion Equates for Cursors

CURSOR:None       EQUATE ('<0FFH,01H,00H,00H>')
CURSOR:Arrow      EQUATE ('<0FFH,01H,01H,7FH>')
CURSOR:IBeam      EQUATE ('<0FFH,01H,02H,7FH>')
CURSOR:Wait       EQUATE ('<0FFH,01H,03H,7FH>')
CURSOR:Cross      EQUATE ('<0FFH,01H,04H,7FH>')
CURSOR:UpArrow    EQUATE ('<0FFH,01H,05H,7FH>')
CURSOR:Size       EQUATE ('<0FFH,01H,81H,7FH>')
CURSOR:Icon       EQUATE ('<0FFH,01H,82H,7FH>')
CURSOR:SizeNWSE   EQUATE ('<0FFH,01H,83H,7FH>')
CURSOR:SizeNESW   EQUATE ('<0FFH,01H,84H,7FH>')
CURSOR:SizeWE     EQUATE ('<0FFH,01H,85H,7FH>')
CURSOR:SizeNS     EQUATE ('<0FFH,01H,86H,7FH>')
CURSOR:DragWE     EQUATE ('<0FFH,02H,01H,7FH>')
CURSOR:Drop       EQUATE ('<0FFH,02H,02H,7FH>')
CURSOR:NoDrop     EQUATE ('<0FFH,02H,03H,7FH>')
CURSOR:Zoom       EQUATE ('<0FFH,02H,04H,7FH>')

Clarion Equates for Icons

ICON:None         EQUATE ('<0FFH,01H,00H,00H>')
ICON:Application  EQUATE ('<0FFH,01H,01H,7FH>')
ICON:Hand         EQUATE ('<0FFH,01H,02H,7FH>')
ICON:Question     EQUATE ('<0FFH,01H,03H,7FH>')
ICON:Exclamation  EQUATE ('<0FFH,01H,04H,7FH>')
ICON:Asterisk     EQUATE ('<0FFH,01H,05H,7FH>')
ICON:Pick         EQUATE ('<0FFH,02H,01H,7FH>')
ICON:Save         EQUATE ('<0FFH,02H,02H,7FH>')
ICON:Print        EQUATE ('<0FFH,02H,03H,7FH>')
ICON:Paste        EQUATE ('<0FFH,02H,04H,7FH>')
ICON:Open         EQUATE ('<0FFH,02H,05H,7FH>')
ICON:New          EQUATE ('<0FFH,02H,06H,7FH>')
ICON:Help         EQUATE ('<0FFH,02H,07H,7FH>')
ICON:Cut          EQUATE ('<0FFH,02H,08H,7FH>')
ICON:Copy         EQUATE ('<0FFH,02H,09H,7FH>')
ICON:Child        EQUATE ('<0FFH,02H,0AH,7FH>')
ICON:Frame        EQUATE ('<0FFH,02H,0BH,7FH>')
ICON:Clarion      EQUATE ('<0FFH,02H,0CH,7FH>')
ICON:NoPrint      EQUATE ('<0FFH,02H,0DH,7FH>')
ICON:Zoom         EQUATE ('<0FFH,02H,0EH,7FH>')
ICON:NextPage     EQUATE ('<0FFH,02H,0FH,7FH>')
ICON:PrevPage     EQUATE ('<0FFH,02H,10H,7FH>')
ICON:JumpPage     EQUATE ('<0FFH,02H,11H,7FH>')
ICON:Thumbnail    EQUATE ('<0FFH,02H,12H,7FH>')
ICON:Tick         EQUATE ('<0FFH,02H,13H,7FH>')
ICON:Cross        EQUATE ('<0FFH,02H,14H,7FH>')
ICON:Connect      EQUATE ('<0FFH,02H,15H,7FH>')
ICON:Print1       EQUATE ('<0FFH,02H,16H,7FH>')
ICON:Ellipsis     EQUATE ('<0FFH,02H,17H,7FH>')

Clarion Equates for Colors

COLOR:NONE              EQUATE (-1)
COLOR:SCROLLBAR         EQUATE (80000000H)
COLOR:BACKGROUND        EQUATE (80000001H)
COLOR:ACTIVECAPTION     EQUATE (80000002H)
COLOR:INACTIVECAPTION   EQUATE (80000003H)
COLOR:MENU              EQUATE (80000004H)
COLOR:WINDOW            EQUATE (80000005H)
COLOR:WINDOWFRAME       EQUATE (80000006H)
COLOR:MENUTEXT          EQUATE (80000007H)
COLOR:WINDOWTEXT        EQUATE (80000008H)
COLOR:CAPTIONTEXT       EQUATE (80000009H)
COLOR:ACTIVEBORDER      EQUATE (8000000AH)
COLOR:INACTIVEBORDER    EQUATE (8000000BH)
COLOR:APPWORKSPACE      EQUATE (8000000CH)
COLOR:HIGHLIGHT         EQUATE (8000000DH)
COLOR:HIGHLIGHTTEXT     EQUATE (8000000EH)
COLOR:BTNFACE           EQUATE (8000000FH)
COLOR:BTNSHADOW         EQUATE (80000010H)
COLOR:GRAYTEXT          EQUATE (80000011H)
COLOR:BTNTEXT           EQUATE (80000012H)
COLOR:INACTIVECAPTIONTEXT EQUATE (80000013H)
COLOR:BTNHIGHLIGHT        EQUATE (80000014H)

COLOR:Black             EQUATE (0000000H)
COLOR:Maroon            EQUATE (0000080H)
COLOR:Green             EQUATE (0008000H)
COLOR:Olive             EQUATE (0008080H)
COLOR:Navy              EQUATE (0800000H)
COLOR:Purple            EQUATE (0800080H)
COLOR:Teal              EQUATE (0808000H)
COLOR:Gray              EQUATE (0808080H)
COLOR:Silver            EQUATE (0C0C0C0H)
COLOR:Red               EQUATE (00000FFH)
COLOR:Lime              EQUATE (000FF00H)
COLOR:Yellow            EQUATE (000FFFFH)
COLOR:Blue              EQUATE (0FF0000H)
COLOR:Fuschia           EQUATE (0FF00FFH)
COLOR:Aqua              EQUATE (0FFFF00H)
COLOR:White             EQUATE (0FFFFFFH)