Работа с некоторыми Win API функциями (информация о системе)

В этой статьеи будет рассмотрены некоторые Win API функции:

1) GetLogicalDrives

Функция GetLogicalDrives возвращает число-битовую маску в которой храняться все

Доступныедиски.

DWORD GetLogicalDrives(VOID);

Параметры:

Эта функция не имеет параметров.

Возвращаемое значение:

Если функция вызвана правильно, то она возвращает число-битовую маску в которой

Храняться все доступные диски ( если 0 бит равен 1, то диск “A:” присутствует, и т. д. )

Если функция вызвана не правильно, то она возвращает 0.

Пример:

Int n;

Char dd[4];

DWORD dr = GetLogicalDrives();

For( int i = 0; i < 26; i++ )

{

N = ((dr>>i)&;0x00000001);

If( n == 1 )

{

Dd[0] = char(65+i); dd[1] = ‘:’; dd[2] = ‘\’; dd[3] = 0;

Cout << “Available disk drives : ” << dd << endl;

}

}

2) GetDriveType

Функция GetDriveType возвращаеттипдиска (removable, fixed, CD-ROM,

RAM disk, или network drive).

UINT GetDriveType(LPCTSTR lpRootPathName);

Параметры:

LpRootPathName

[in] Указатель на не нулевую стоку в которой хранится имя

Главной директории на диске. Обратный слэш должен присутствовать!

Если lpRootPathName равно NULL, то функция использует текущую директорию.

Возвращаемое значение:

Функция возвращает тип диска. Могут быть следующие значения:

Значение Описание

DRIVE_UNKNOWN Не известный тип.

DRIVE_NO_ROOT_DIR Не правильный путь.

DRIVE_REMOVABLE Съемный диск.

DRIVE_FIXED Фиксированный диск.

DRIVE_REMOTE Удаленныйили network диск.

DRIVE_CDROM CD-ROM диск.

DRIVE_RAMDISK RAM диск.

Пример:

Int d;

D = GetDriveType( “c:\” );

If( d == DRIVE_UNKNOWN ) cout << ” UNKNOWN” << endl;

If( d == DRIVE_NO_ROOT_DIR ) cout << ” DRIVE NO ROOT DIR” << endl;

If( d == DRIVE_REMOVABLE ) cout << ” REMOVABLE” << endl;

If( d == DRIVE_FIXED ) cout << ” FIXED” << endl;

If( d == DRIVE_REMOTE ) cout << ” REMOTE” << endl;

If( d == DRIVE_CDROM ) cout << ” CDROM” << endl;

If( d == DRIVE_RAMDISK ) cout << ” RAMDISK” << endl;

3) GetVolumeInformation

Функция GetVolumeInformation возвращает информацию о файловой системе и

Дисках( директориях ).

BOOL GetVolumeInformation(

LPCTSTR lpRootPathName, // имя диска(директории) [in]

LPTSTR lpVolumeNameBuffer, // названиедиска [out]

DWORD nVolumeNameSize, // длина буфера названия диска [in]

LPDWORD lpVolumeSerialNumber, // сериальный номер диска [out]

LPDWORD lpMaximumComponentLength, // максимальная длина фыйла [out]

LPDWORD lpFileSystemFlags, // опции файловой системы [out]

LPTSTR lpFileSystemNameBuffer, // имя файловой системы [out]

DWORD nFileSystemNameSize // длина буфера имени файл. сист. [in]

);

Возвращаемое значение:

Если функция вызвана правильно, то она возвращает не нулевое значение(TRUE).

Если функция вызвана не правильно, то она возвращает 0(FALSE).

Пример:

Char VolumeNameBuffer[100];

Char FileSystemNameBuffer[100];

Unsigned long VolumeSerialNumber;

BOOL GetVolumeInformationFlag = GetVolumeInformationA(

“c:\”,

VolumeNameBuffer,

100,

&;VolumeSerialNumber,

NULL, //&;MaximumComponentLength,

NULL, //&;FileSystemFlags,

FileSystemNameBuffer,

100

);

If(GetVolumeInformationFlag!= 0)

{

Cout << ” Volume Name is ” << VolumeNameBuffer << endl;

Cout << ” Volume Serial Number is ” << VolumeSerialNumber << endl;

Cout << ” File System is ” << FileSystemNameBuffer << endl;

}

Else cout << ” Not Present (GetVolumeInformation)” << endl;

4) GetDiskFreeSpaceEx

Функция GetDiskFreeSpaceEx выдает информацию о доступном месте на диске.

BOOL GetDiskFreeSpaceEx(

LPCTSTR lpDirectoryName, // имя диска(директории) [in]

PULARGE_INTEGER lpFreeBytesAvailable, // доступно для использования(байт) [out]

PULARGE_INTEGER lpTotalNumberOfBytes, // максимальный объем( в байтах ) [out]

PULARGE_INTEGER lpTotalNumberOfFreeBytes // свободно на диске( в байтах ) [out]

);

Возвращаемое значение:

Если функция вызвана правильно, то она возвращает не нулевое значение(TRUE).

Если функция вызвана не правильно, то она возвращает 0(FALSE).

Пример:

DWORD FreeBytesAvailable;

DWORD TotalNumberOfBytes;

DWORD TotalNumberOfFreeBytes;

BOOL GetDiskFreeSpaceFlag = GetDiskFreeSpaceEx(

“c:\”, // directory name

(PULARGE_INTEGER)&;FreeBytesAvailable, // bytes available to caller

(PULARGE_INTEGER)&;TotalNumberOfBytes, // bytes on disk

(PULARGE_INTEGER)&;TotalNumberOfFreeBytes // free bytes on disk

);

If(GetDiskFreeSpaceFlag!= 0)

{

Cout << ” Total Number Of Free Bytes = ” << (unsigned long)TotalNumberOfFreeBytes

<< “( ” << double(unsigned long(TotalNumberOfFreeBytes))/1024/1000

<< ” Mb )” << endl;

Cout << ” Total Number Of Bytes = ” << (unsigned long)TotalNumberOfBytes

<< “( ” << double(unsigned long(TotalNumberOfBytes))/1024/1000

<< ” Mb )” << endl;

}

Else cout << ” Not Present (GetDiskFreeSpace)” << endl;

5) GlobalMemoryStatus

Функция GlobalMemoryStatus возвращает информацию о используемой системой памяти.

VOID GlobalMemoryStatus(

LPMEMORYSTATUS lpBuffer // указательнаструктуру MEMORYSTATUS

);

Typedef struct _MEMORYSTATUS {

DWORD dwLength; // длинаструктурывбайтах

DWORD dwMemoryLoad; // загрузка памяти в процентах

SIZE_T dwTotalPhys; // максимальное количество физической памяти в байтах

SIZE_T dwAvailPhys; // свободное количество физической памяти в байтах

SIZE_T dwTotalPageFile; // макс. кол. памяти для программ в байтах

SIZE_T dwAvailPageFile; // свободное кол. памяти для программ в байтах

SIZE_T dwTotalVirtual; // максимальное количество... виртуальной памяти в байтах

SIZE_T dwAvailVirtual; // свободное количество виртуальной памяти в байтах

} MEMORYSTATUS, *LPMEMORYSTATUS;

Возвращаемое значение:

Эта функция не возвращает параметров

Пример:

// The MemoryStatus structure is 32 bytes long.

// It should be 32.

// 78 percent of memory is in use.

// There are 65076 total Kbytes of physical memory.

// There are 13756 free Kbytes of physical memory.

// There are 150960 total Kbytes of paging file.

// There are 87816 free Kbytes of paging file.

// There are 1fff80 total Kbytes of virtual memory.

// There are 1fe770 free Kbytes of virtual memory.

#define DIV 1024

#define WIDTH 7

Char *divisor = “K”;

MEMORYSTATUS stat;

GlobalMemoryStatus (&;stat);

Printf (“The MemoryStatus structure is %ld bytes long. n”,

Stat. dwLength);

Printf (“It should be %d. n”, sizeof (stat));

Printf (“%ld percent of memory is in use. n”,

Stat. dwMemoryLoad);

Printf (“There are %*ld total %sbytes of physical memory. n”,

WIDTH, stat. dwTotalPhys/DIV, divisor);

Printf (“There are %*ld free %sbytes of physical memory. n”,

WIDTH, stat. dwAvailPhys/DIV, divisor);

Printf (“There are %*ld total %sbytes of paging file. n”,

WIDTH, stat. dwTotalPageFile/DIV, divisor);

Printf (“There are %*ld free %sbytes of paging file. n”,

WIDTH, stat. dwAvailPageFile/DIV, divisor);

Printf (“There are %*lx total %sbytes of virtual memory. n”,

WIDTH, stat. dwTotalVirtual/DIV, divisor);

Printf (“There are %*lx free %sbytes of virtual memory. n”,

WIDTH, stat. dwAvailVirtual/DIV, divisor);

6) GetComputerName, GetUserNameA

Функция GetComputerName возвращает NetBIOS имялокальногокомпьютера.

BOOL GetComputerName(

LPTSTR lpBuffer, // имялокальногокомпьютера( длинабуфераравна MAX_COMPUTERNAME_LENGTH + 1 ) [out]

LPDWORD lpnSize // размербуфера ( лучшепоставить MAX_COMPUTERNAME_LENGTH + 1 ) [out/in]

);

Функция GetUserName возвращает имя текущего узера.

BOOL GetUserName(

LPTSTR lpBuffer, // имя юзера( длина буфера равна UNLEN + 1 ) [out]

LPDWORD nSize // размер буфера ( лучше поставить UNLEN + 1 ) [out/in]

);

Возвращаемые значения:

Если функции вызваны правильно, то они возвращают не нулевое значение(TRUE).

Если функции вызваны не правильно, то они возвращают 0(FALSE).

Пример:

Char ComputerName[MAX_COMPUTERNAME_LENGTH + 1];

Unsigned long len_ComputerName = MAX_COMPUTERNAME_LENGTH + 1;

Char UserName[UNLEN + 1];

Unsigned long len_UserName = UNLEN + 1;

BOOL comp = GetComputerName(

ComputerName,

&;len_ComputerName

);

If( comp!= 0 ) { cout << “Computer Name is ” << ComputerName << endl; }

Else cout << “Computer Name is NOT FOUND!!! ” << endl;

Comp = GetUserNameA (

UserName,

&;len_UserName

);

If( comp!= 0 ) { cout << “User Name is ” << UserName << endl; }

Else cout << “User Name is NOT FOUND!!! ” << endl;

7) GetSystemDirectory, GetTempPath, GetWindowsDirectory, GetCurrentDirectory

Функция GetSystemDirectory возвращаетпутьксистемнойдиректории.

UINT GetSystemDirectory(

LPTSTR lpBuffer, // буфердлясистемнойдиректории [out]

UINT uSize // размербуфера [in]

);

Возвращаемое значение:

Эта функция возвращает размер буфера для системной директории не включая нулевого

Значения в конце, если она вызвана правильно.

Если функция вызвана не правильно, то она возвращает 0.

Функция GetTempPath возвращает путь к директории, отведенной для временных файлов.

DWORD GetTempPath(

DWORD nBufferLength, // размербуфера [in]

LPTSTR lpBuffer // буфер для временной директории [out]

);

Возвращаемое значение:

Эта функция возвращает размер буфера для системной директории не включая нулевого

Значения в конце, если она вызвана правильно.

Если функция вызвана не правильно, то она возвращает 0.

Функция GetWindowsDirectory возвращает путь к Windows директории.

UINT GetWindowsDirectory(

LPTSTR lpBuffer, // буфердля Windows директории [out]

UINT uSize // размербуфера [in]

);

Возвращаемое значение:

Эта функция возвращает размер буфера для системной директории не включая нулевого

Значения в конце, если она вызвана правильно.

Если функция вызвана не правильно, то она возвращает 0.

Функция GetCurrentDirectory возвращает путь к текущей директории.

DWORD GetCurrentDirectory(

DWORD nBufferLength, // размербуфера [in]

LPTSTR lpBuffer // буфер для текущей директории [out]

);

Возвращаемое значение:

Эта функция возвращает размер буфера для системной директории не включая нулевого

Значения в конце, если она вызвана правильно.

Если функция вызвана не правильно, то она возвращает 0.

Пример:

Char path[100];

GetSystemDirectory( path, 100 );

Cout << “System Directory is ” << path << endl;

GetTempPath( 100, path );

Cout << “Temp path is ” << path << endl;

GetWindowsDirectory( path, 100 );

Cout << “Windows directory is ” << path << endl;

GetCurrentDirectory( 100, path );

Cout << “Current directory is ” << path << endl;


Зараз ви читаєте: Работа с некоторыми Win API функциями (информация о системе)