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

2016-08-02СтудИзба

Описание файла

Документ из архива "Работа с некоторыми Win API функциями (информация о системе)", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "45736"

Текст из документа "45736"

Работа с некоторыми 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;

Список литературы

Для подготовки данной работы были использованы материалы с сайта http://www.realcoding.net/

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5140
Авторов
на СтудИзбе
441
Средний доход
с одного платного файла
Обучение Подробнее