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; }
Autorarchive: ralf
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: test if record changed
ThisWindow.TakeCompleted embed:
IF Access:MyFile.EqualBuffer(SELF.Saved) MESSAGE('No changes') ELSE MESSAGE('Changed') END
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)