« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга

Тестирование 64-битных приложений

ПнВтСрЧтПтСбВс
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          
    Популярное
Макросы

Функция AccessResource

Использование вложенных объектов

Оптимальное использование MySQL для новичков

Функция SetVoiceSound

Функция GetWinFlags

DECnet. Архитектура цифровой сети (DNA), Доступ к среде, Сетевой уровень, Формат длока данных маршрутизации DECnet Phase IV, Адресация, Уровни маршрутизации, Транспортный уровень, Протоколы высших уровней

Функция AllocDStoCSAlias

Функция Catch

Сверхдинамичные веб-интерфейсы




    Архив файлов



    Сообщества



    Документация

Статьи:: C/С++ :: Visual C++ начинающему :: Работа с некоторыми Win API функциями (информация о системе)


отправить ссылку другу версия для печати  Обсудить на форуме

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

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








Инструменты Internet Explorer 8 Beta 2 для разработчиков.

Вебмастеру

В марте этого года мы уже писали об инструментах для разработчика в IE8 Beta 1, но IE8 Beta2 позволяет более полно использовать инструменты за счет значительных изменений в имеющихся функциях, а также новых возможностей. В принципе инструменты для разработчика должны обладать следующими свойствами: Быть интегрированными и простыми в использовании; Иметь визуальный интерфейсC их помощью можно быстро протестировать сайт.


Подробнее... | Рубрика: Вебмастеру | Добавлено: 05.09.2008

Google Developer Day 2008 в Москве.

Мероприятия

Дата проведения: 28 октября 2008 г.; Место проведения: Амбер Плаза, Москва, Россия. Конференция для веб-разработчиков и разработчиков мобильных приложений в Москве. Узнайте, как наилучшим образом использовать инструменты разработки и API от Google, чтобы создавать социальные, мобильные и картографические приложения, как использовать AJAX/JavaScript инструменты и библиотеки от Google и многое другое из первых уст.


Подробнее... | Рубрика: Мероприятия | Добавлено: 05.09.2008

ТОП 10 самых раздражающих факторов для программиста.

Разное

Совсем недавно наткнулся в интернете на забавный "хит-парад" наиболее раздражающих вещей для программиста. Поскольку он был на английском — решил перевести текст и несколько адаптировать к нашим реалиям…


Подробнее... | Рубрика: Разное | Добавлено: 03.09.2008

Остальные статьи:

Windows Server 7, 8 и 9
jQuery для JavaScript-программистов
Инновационный веб-броузер Google Chrome стартует уже сегодня
Windows 7: подход к производительности системы
Trac + Subversion @ Ubuntu: Revisited
[g]Vim в режиме Python: Рекомпиляция в Windows
Java + JSON. Пути к дружбе
Драйвер SQL Server 2005 для PHP
Типы данных в MySQL (сжатый справочник для PHP программиста)
PHP класс для работы с Яндекс.XML
Ошибки начинающих PHP разработчиков
Наследование шаблонов в Smarty
Особенности хранения сессий PHP в memcached
Internet Explorer 8 beta 2
9 правил для начинающего Ajax-разработчика
ExtJS 2.2 - полная поддержка Firefox 3, новые виджеты и другие нововведения


Цитата дня (все,добавить):



    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование

Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 76
Пользователей: 0