SPO5
.pdf11
// " > osvi osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(!GetVersionEx ((OSVERSIONINFO *) &osvi))
{
return false;
}
switch (osvi.dwPlatformId)
{
//# # Windows NT. case VER_PLATFORM_WIN32_NT:
//# .
if ( osvi.wProductType == VER_NT_WORKSTATION )
{
//xfy z fc {y| }~ z c$y•y| ocf ! #=# !
//.
}
// # #.
else if ( osvi.wProductType == VER_NT_SERVER )
{
//xfy z fc {y| }~ z c$y•y| ocf ! #=# !
//#.
}
//c … #, service pack ( ),
//!.
if ( osvi.dwMajorVersion <= 4 )
{
cout << "version "
<<osvi.dwMajorVersion << "."
<<osvi.dwMinorVersion
<<osvi.szCSDVersion
<<"(Build "
<<(osvi.dwBuildNumber & 0xFFFF)<<")\n"; *file << "version "
<<osvi.dwMajorVersion << "."
<<osvi.dwMinorVersion
<<osvi.szCSDVersion
<<"(Build "
<<(osvi.dwBuildNumber & 0xFFFF)<<")\n";
}
else
{
cout << osvi.szCSDVersion << "(Build " << (osvi.dwBuildNumber & 0xFFFF) << ")\n";
*file << osvi.szCSDVersion << "(Build " << (osvi.dwBuildNumber & 0xFFFF) << ")\n";
}
break;
12
// # # Windows 95. case VER_PLATFORM_WIN32_WINDOWS:
//xfy z fc {y| }~ z c$y•y| ocf ! #=# !
//# Winˆ.
break;
}
return TRUE;
}
//////////////////////////////////////////////////////////////////
//
void MemmoryStat(std::ofstream *file)
{
// ! ! =?
MEMORYSTATUS stat;
stat.dwLength = sizeof(MEMORYSTATUS); // ! =
GlobalMemoryStatus (&stat);
cout << "\nMemmory Statistics\n"; cout << "===================\n";
//xfy z fc {y| }~ z c$y•y| ocf ! #=# !
//ƒ
*file << "\nMemmory Statistics\n"; *file << "===================\n";
//xfy z fc {y| }~ z c$y•y| ocf ! #=# !
//#
}
/////////////////////////////////////////////////////////////
// P ! void CurrentDir(std::ofstream *file)
{
char szCurrentDir[_MAX_PATH]; char szFullDisk[5];
//P !
GetCurrentDirectory(_MAX_PATH-1, szCurrentDir);
//xfy z fc {y| }~ z c$y•y| ocf ! #=# !
//P ! # ƒ
}
1.2.1.
13
. / Windows 2 / ( 9 /
D 02 / 02. ! 8 /( ( 0
1 2.
|
|
|
BOOL |
'% ( (D 9 1 " ( TRUE |
|
|
FALSE). |
|
BYTE |
' 6 (8 !). |
|
CHAR |
Windows. |
|
CONST |
. |
|
DWORD |
6 (32 ! ). |
|
INT |
= " 1 . |
|
LONG |
32- 1 (/ 1 8. |
|
LONGLONG |
. ( A? 6 " 6 / 6 6 / 0 (64 |
|
|
! ). |
|
LPCCH |
1 9 |
( 06 Windows. |
LPCH |
1 9 |
Windows. |
LPCSTR |
1 9 |
( %A % Windows |
|
% 0 8. |
|
LPCTSTR |
1 9 |
( %A % Unicode % 0 |
|
8 % Windows |
|
LPSTR |
1 9 |
% Windows % 0 - |
|
8. |
|
LPTCH |
1 9 |
Unicode Windows. |
LPVOID |
1 9 |
A! 6 . |
LPWORD |
1 9 |
! 1 1 (16 !). |
LPWSTR |
1 9 |
9 %A % Unicode % 0 |
|
8. |
|
PCCH |
1 9 |
( 06 Windows. |
PCHAR |
1 9 |
Windows. |
PCSTR |
1 9 |
( %A % Windows |
|
% 0 8. |
|
PLONG |
1 9 |
1 8 / 6 (32 ! ). |
PSTR |
1 9 |
% Windows % 0 |
|
8. |
|
PTCH |
1 9 |
Windows Unicode. |
|
|
|
|
|
14 |
|
|
PTCHAR |
|
1 9 |
Windows Unicode. |
|
|
|
|
|
||||
|
PTSTR |
|
1 9 |
9 %A % Windows Unicode |
|
|
|
|
|
% 0 8. |
|
||
|
PUCHAR |
|
1 9 |
Windows ! 1 1 . |
|
|
|
PUINT |
|
1 |
9 |
8 " ! 1 1 . |
|
|
PULONG |
|
1 |
9 |
! 11 8 / 6 (32 ! ). |
|
|
PVOID |
|
1 |
9 |
A! 6 . |
|
|
PWSTR |
|
1 |
9 |
9 %A % Unicode % 0 |
|
|
|
|
8. |
|
||
|
TCHAR |
|
Unicode Windows. |
|
||
|
UCHAR |
|
Windows ! 1 1 . |
|
||
|
UINT |
|
= " ! 1 1 . |
|
||
|
ULONG |
|
8 " ! 1 1 (32 ! ). |
|
||
|
VOID |
|
5A! 6 . |
|
|
|
|
WCHAR |
|
Unicode. |
|
||
|
WORD |
|
' 1 1 (16 !). |
|
1.2.2.
( %" ( 7 8 / D 91 9 7% 8 A GetDriveType. k " 9 ( 7% 8 (:
UINT GetDriveType( |
|
// > . |
LPCTSTR lpRootPathName |
||
); |
|
|
m% 8 ( 1 ? / : |
||
DRIVE_UNKNOWN |
// ># |
|
DRIVE_NO_ROOT_DIR |
// ! # |
|
DRIVE_REMOVABLE |
// ># = ! |
|
DRIVE_FIXED |
// … ! |
|
DRIVE_REMOTE |
// ! =, . . # |
|
DRIVE_CDROM |
// |
DROM – # ! |
DRIVE_RAMDISK |
// ! # # |
15
1.2.3.
( %" ( / 02 ! / " 2 / 2
91% ( 7% 8 ( GetDiskFreeSpace 6,
/:
BOOL GetDiskFreeSpace( LPCTSTR lpRootPathName,
LPDWORD lpSectorsPerCluster, LPDWORD lpBytesPerSector, LPDWORD lpNumberOfFreeClusters, LPDWORD lpTotalNumberOfClusters
);
m% 8 ( 1 7 8 A ! / /, A- " ( !w ! / /.
.0:
•lpRootPathName – c / (A? ( 6 %- 6 , !w / / 9( . “A:\”-/ ( /-
/ ). z lpRootPathName NULL, 1 ? (
!w %? (.
• lpSectorsPerCluster – " .
•lpBytesPerSector – " ! 6 .
•lpNumberOfFreeClusters – " ! / 02
/.
•lpTotalNumberOfClusters – " /.
1 ? 0 1 " (:
•z 7% 8 ( / ! ( % 2 , 1 ? 1 " –
TRUE;
•z 7% 8 ( %/ "%, 1 ? ( " –
FALSE.
16
1.2.4. -
BOOL GetVersionEx(
LPOSVERSIONINFO lpVersionInfo // > ,
//# !
//.
);
% % LPOSVERSIONINFO /:
typedef struct _OSVERSIONINFOEX |
|
|
{ |
|
// > = |
DWORD dwOSVersionInfoSize; |
||
DWORD dwMajorVersion; |
// ! |
|
DWORD dwMinorVersion; |
// = |
|
// ! # |
||
DWORD dwBuildNumber; |
// ! |
|
DWORD dwPlatformId; |
// |
|
TCHAR szCSDVersion[128]; |
// ! |
|
WORD |
wServicePackMajor; |
// |
// ! Service Pack |
||
WORD |
wServicePackMinor; |
// # Service Pack |
WORD |
wSuiteMask; |
// ! ! |
BYTE |
wProductType; |
// ! |
BYTE |
wReserved; |
// > > # # |
}OSVERSIONINFOEX;
. / 91 7% 8 GetVersionEx / % 1 91 % % 0 dwOSVersionInfoSize.
+ 8 6 0 / ( ( 1 " ( dwPlat-
formId, wProductType, wProductType, dwMajorVersion dwMinorVersion ! 8 6.
17
dwPlatformId |
wProductType |
|
dwMajorVersion |
dwMinorVersion |
+ OS |
|
|
|
|
|
|
VER_PLATFORM_WIN32_NT |
VER_NT_WORKSTATION |
5 |
|
1 |
Microsoft |
|
|
|
Windows XP |
||
|
|
|
|
|
|
|
VER_NT_SERVER |
5 |
|
2 |
Microsoft |
|
|
|
|
Windows |
|
|
|
|
|
|
.NET |
|
|
4 |
|
2 |
|
|
|
|
|
|
|
VER_PLATFORM_WIN32_WINDOWS |
F / |
4 |
|
0 |
Windows 95 |
|
|
4 |
|
10 |
Windows 98 |
|
|
|
|
|
Microsoft |
|
|
4 |
|
90 |
Windows |
|
|
|
Millennium |
||
|
|
|
|
|
|
|
|
|
|
|
Edition |
1.2.5. !
( %" ( / 02 %? 6 / 91% (
7% 8 ( GetCurrentDirectory. . 7% 8:
DWORD GetCurrentDirectory |
|
|
( |
// |
> |
DWORD nBufferLength, |
||
LPTSTR lpBuffer |
// |
> |
); |
|
|
1.3. / 01 2 2 5 3 622 7 3 2
18
( %" ( / 02 ( 91% ( 7% 8 ( GetCurrentDirectory. / 7% 8:
void GlobalMemoryStatus ( |
// ! = |
MEMORYSTATUS *stat |
|
); |
|
% % MEMORYSTATUS /:
typedef struct _MEMORYSTATUS {
DWORD dwLength; |
// > = |
DWORD dwMemoryLoad; |
// > # |
DWORD dwTotalPhys; |
// > , |
DWORD dwAvailPhys; |
// # ! > , |
DWORD dwTotalPageFile; |
// > !, |
DWORD dwAvailPageFile; |
// # ! =? # ! |
DWORD dwTotalVirtual; |
// # , > |
DWORD dwAvailVirtual; |
// |
// # ! # |
} MEMORYSTATUS, *LPMEMORYSTATUS;
F !2 / 9 /%, " / 01 7% 8 lobalMemoryStatus !2 / 8 1 8 ( ( dwLength.
1.4. # 2 > 08 > 0
F 9 %, 0 /(?%A i :
•%A 7 8 A ! / 6 ( 2 " 2
/ 2 2 2;
•%A 7 8 A (;
•7 8 A OS;
•7 8 A %? 6 / %? " /-;
•/ ( 0 / 2 !? 6, 9 i 1 D, 9- 1 9 8%.
19
2., .2. / 2 5 7 3-. 1
2.1.( 2 > 4 > ?
= ( / 6 ! 6 ! 0 ( (A (:
1.%" 0 ! 0 / 6 6;
2.1 % 0 ! ! 7-
8;
3.1 / 0 7% 8 ( 7 6 /.
. / D 9 9 ! 0:
• ( 9 ( ! – 4 " ;
•! 9A – 2 " .
2.2.? 2 3 I 7 2 5 4
0, 1% 0 , " D 1/ 9
/ % 0: 8 " % 0.
K 91% ( ( % - / ( 7% 8, / A? 1 / 1 " ( 6 D 7% 8, / % % . - ( i 1 " , " 7% 8 ( 010 % !(. F , 0"-
7 1 / ( /%A? % 0 K:
0 = 1= ∙ − 1
. / 9 ( / / :
= 1 ∙ 2 ∙ 3 ∙ 4 ∙ … ∙ = !
20
; % %A 7% 8 A 0" ( 7 D / -
9 /%A? ! 1:
double Factorial(int n)
{
double f;
if(n<0) return -1; // ƒ g
//# # > … • #=
//(#=? ! > ).
if(n==0 || n == 1) f = 1.0;
else
f = n*Factorial(n-1); return f;
}
C! 1 " ( 1 ? 7% 8 6
Factorial().
. % ( ?9A
if(n==0 || n == 1)
! " 9 1 D 9 ( 0" ( 7 -
1! 0!, 1 K 7% 8 ! 1 91-
( %. %" 0 2 / !- " , /, . k / 6-
% 1 K A 0.
0" 7 / 0 9- 1 ( 6 %. 1 D ( % (, /
7% 8 ( ! ? ( ! / , .% 01 / % 6 7% 8 6 / D ( 01 6.
. %? % 02 ( (A ( 1 / " 2,
02 i 1 9 2 / ! 02 % i.
. / ! 6 % 8 ( ( ( ( . 2.1):D/ ( D / D 9 7 6 0, / % .
( , " !0 0 / D D/ , !2- / 0 9 / 8: 0 1 ( 2 7 6 2-