Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Новости ИТ Программы Книги Games   Обои   Экспорт RSS E-Books
 
Поиск по сайту

TOP-10 программ
Symantec Norton Ghost 9.0
Partition Magic 8.0.2 Pro
Xilisoft 3GP Video Converter v3.1.7.0616b
Norton AntiVirus 2005
Xilisoft 3GP Video Converter v2.1.52.831b
Антивирус Касперского Personal 5.0.303 beta 2
RAR Password Cracker 4.12
ABBYY PDF Transformer v1.00.820
Windows Movie Maker 2.6
MP3 To Ringtone Gold v3.02
 
Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
 
 

   Программирование -> C / C++ -> Visual C++ для начинающих


Глава 25. Работа с некоторыми 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 : " <



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" <


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 " <


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 
			 <<"( " <


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;



Отсюда можно взять рабочую программу под MFC, с использованием Win API функций.



 
Популярные книги

SQL для "чайников", 5-е издание

Подробнее

Общая информатика. Универсальный курс

Подробнее

Photoshop CS2 для пользователя

Подробнее


 
Новости ИТ
10.01.2009  Skype появился на Android и готовится к покорению iPhone
10.01.2009  Студенты-хакеры улучшат безопасность бостонского метро
09.01.2009  Exeda -- корпоративный цифровой ассистент с Android Linux
09.01.2009  Правительство Вьетнама массово переходит на Open Source
09.01.2009  Windows 7 build 7000
09.01.2009  Silicon Power представила скоростную SDHC
09.01.2009  CES 2009: RealView 360 3D Desktop Scanner - настольный 3D-сканер, один из первых в мире
09.01.2009  W90 - очень быстрый мультимедийный ноутбук ASUS «Ultimate-уровня»
09.01.2009  CES 2009: SanDisk представила семейство G3 - самых быстрых SSD-накопителей на флэш-памяти MLC
09.01.2009  ZOTAC GeForce GTX 285 и GTX 285 AMP! Edition - 3D-ускорители для геймеров на новом GPU NVIDIA
09.01.2009  Net Applications: в декабре доли Firefox и Chrome росли за счет IE
09.01.2009  Imation говорит о «новом классе» SSD и первом в отрасли полном наборе для модернизации на основе SSD
09.01.2009  Маршрутизатор D-Link Xtreme N DIR-685 может играть роль NAS, сервера печати... и цифровой фоторамки
09.01.2009  Очень тонкая фотокамера Pentax Optio P70 имеет разрешение 12 Мп
09.01.2009  pureSilicon 1TB Nitro - первый в мире 2,5-дюймовый SSD объемом 1 ТБ
09.01.2009  Дебютировали мобильные GPU ATI Mobility Radeon HD 4000
09.01.2009  NVIDIA GeForce GTX 285 и GTX 295 представлены официально
09.01.2009  Scythe выпустила процессорный кулер Mugen 2
09.01.2009  Optio E70 - новая компактная камера Pentax начального уровня
09.01.2009  Новый iPhone получит четырехъядерный процессор?
 
Полезно

 
Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.
 
Rambler's Top100