Определение типа носителя и «серийного номера».

Нам понадобится всего 2 API — функции:

GetDriveType — определяет и возвращает тип носителя;
GetVolumeInformation — определяет информацию о носителе, среди которой содержится серийный номер.

Рассмотрим описание этих функций:
Функция GetDriveType очень простая и использует всего один параметр — указатель на том. Например «c:\»,»a:\» и т.д. Функция возвращает одно из следующих значений:

Значение Пояснение
DRIVE_UNKNOWN диск не определен/не существует
DRIVE_NO_ROOT_DIR неверный путь/путь не указывает на том
DRIVE_REMOVABLE тип устройства определяется как съемный (дискета, флешка и т.д.)
DRIVE_FIXED тип устройства — фиксированный диск (жесткий диск)
DRIVE_REMOTE тип устройства — удаленный(сетевой) диск
DRIVE_CDROM это устройство CD-ROM
DRIVE_RAMDISK виртуальный диск, созданный в оперативной памяти

Читать далее »

Функции перемещения окон

Для перемещения и изменения размеров окна hwnd вызывают функцию MoveWindow. Ей передают новые координаты окна.
Функция MoveWindow объявлена следующим образом:

1
2
3
4
5
6
7
BOOL MoveWindow( HWND hwnd,
int	x,		//новая координата левого края окна
int	у,		//новая координата верхнего края окна
int	nWidth,		//новая ширина окна
int	nHeight,	//новая высота окна
BOOL	bRepaint	//флажок перекрашивания окна
);

Если bRepaint = TRUE, немедленно после перемещения перерисовываются те части экрана, на которых отразилось перемещение окна. Иначе окно перерисовывает себя только после обработки всех поступивших к моменту перемещения сообщений. При успешном выполнении функция возвращает ненулевое значение, иначе — NULL.
Читать далее »

Функции поиска и определения состояния окон

Часто требуется определить, существует ли окно для некоторого дескриптора. На этот вопрос отвечает функция IsWindow:

1
BOOL lsWindow( HWND hwnd);

Если окно с дескриптором hwnd существует, функция возвращает ненулевое значение, иначе — NULL.
Читать далее »

Поле для ввода IP адреса (IP address control)

Поле для ввода IP адреса позволяет пользователю ввести адрес в доступной форме. Этот элемент управления также позволяет приложению получить адрес в числовой форме, а не в текстовом виде.

Этот орган управления позволяет вводить только числовые значения, которые пользователь может вводить в каждой из четырех областей. Как только три цифры введены в одной области, фокус автоматически перемещается в следующую область. Если заполнение всего поля не требуется, пользователь может ввести менее трех цифр. Читать далее »

Создание окна Windows

В основе системы Windows лежит понятие окна. Окно — это область экрана, которая связывает каждую запускаемую программу с пользователем и используется для управления работой этой программы. Все окна оформляются в одном стиле и ведут себя одинаково.

Каждое окно имеет рамку и заголовок. Рамка служит для определения рабочей области, а так же для изменения размеров окна. Заголовок содержит имя запущенной программы и ряд управляющих кнопок: свернуть, распахнуть на весь экран и закрыть и применяется для изменения местоположения окна на экране.
Читать далее »

Основы программирования Windows

Windows поддерживает два типа приложений: основанные на графическом интерфейсе (graphical user interface, GUI) и консольные (console user interface, CUI).
Приложения первого типа создают окна, имеют меню, взаимодействуют с пользователем через диалоговые окна. Почти все стандартные программы Windows являются GUI-приложениями.
Приложения консольного типа работают в текстовом режиме.

Во всех Windows-приложениях должна быть входная функция. Существует четыре такие функции:

1
2
3
4
5
6
7
int WINAPI WinMain( HINSTANCE hinstExe, HINSTANCE,PSTR pszCmdLine, int nCmdShow);
 
int WINAPT wWinMain( HINSTANCE hinstExe, HINSTANCE,PWSTR pszCmdLine, int nCmdShow);
 
int __cdecl main( int argc, char *argv[], char *envp[]);
 
int _cdecl wmain( int argc, wchar_t *argv[], wchar_t *envp[]);

GUI-приложение, работающее с ANSI-символами и строками используют WinMain

GUI-приложение, работающее с Unicode-символами и строками используют wWinMain

CUI-приложение, работающее с ANSI-символами и строками используют main

CUI-приложение, работающее с Unicode-символами и строками используют wmain
Читать далее »

Что такое API и что собой представляет Windows API.

Введение в API-программирование

API (application programming interface) — интерфейс прикладного программирования (иногда интерфейс программирования приложений). Другими словами, это те возможности (функции, переменные, константы, классы), которые предоставляет приложение для использования прикладными программами.

API определяет функциональность, которую предоставляет программа (модуль, библиотека), при этом API позволяет абстрагироваться от того, как именно эта функциональность реализована. Читать далее »

Программное создание PPPoE подключения

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <windows.h>
#include <Ras.h>
 
void main()
{
	RASENTRY RS;
	memset(&RS, 0, sizeof(RASENTRY));
	RS.dwSize = sizeof(RS);
	RS.dwfOptions = RASEO_PreviewUserPw |
	RASEO_ModemLights |
	// RASEO_PreviewDomain |        // отображать поле "Домен" в окне ввода пользователя и пароля (вкладка "Параметры" - установить флажок "Включать домен входа в Windows")
	RASEO_ShowDialingProgress |     // вкладка "Параметры" - Параметры набора номера: установить флажок "Отображать ход подключения"
	RASEO_RemoteDefaultGateway |    // вкладка "Сеть" - "Протокол Интернета (TCP/IP)" - кнопка "Дополнительно" - установить флажок "Использовать основной шлюз в удаленной сети"
	RASEO_SwCompression |           // вкладка "Сеть" - кнопка "Параметры" - установить флажок "Использовать программное сжатие данных"
	// RASEO_RequirePAP |           // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Незашифрованный пароль (PAP)"
	// RASEO_RequireSPAP |          // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Протокол проверки пароля Shiva (SPAP)"
	RASEO_RequireCHAP |             // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Протокол проверки пароля CHAP"
	// RASEO_RequireMsCHAP |        // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Протокол проверки пароля Microsoft (MS-CHAP)"
	// RASEO_RequireW95MSCHAP |     // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Разрешить старый протокол MS-CHAP для Windows 95"
	RASEO_RequireMsCHAP2 |          // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Протокол проверки пароля Microsoft (MS-CHAP v2)"
	RASEO_SecureLocalFiles;          // вкладка "Сеть" - Компоненты, используемые этим подключением: снять флажок "Использовать основной шлюз в удаленной сети";
	RS.dwfOptions2 = RASEO2_DontNegotiateMultilink | RASEO2_ReconnectIfDropped;
	RS.dwfNetProtocols = RASNP_Ip;             // протокол Интернета
	RS.dwFramingProtocol = RASFP_Ppp;            // протокол Point-to-Point Protocol
	RS.dwType = RASET_Broadband;      // тип подключения
	RS.dwVpnStrategy = VS_Default;           // вкладка "Сеть" - По умолчанию
	RS.dwEncryptionType = ET_Optional;          // параметры шифрования (ET_None, ET_Require, ET_RequireMax, ET_Optional)
	RS.dwDialMode = RASEDM_DialAll;
	RS.dwRedialCount = 99;                   // число повторов набора номера
	RS.dwRedialPause = 120;                  // интервал между повторениями
	lstrcpy(RS.szLocalPhoneNumber, TEXT("windowsapi.ru"));
	lstrcpy(RS.szDeviceType, RASDT_PPPoE);             // RASDT_PPPoE - обуславливает тип подключения (PPPoE)
	lstrcpy(RS.szDeviceName, TEXT("PPPoE"));
 
 	DWORD dwRet = RasSetEntryProperties(NULL,TEXT("PPPoE"), &RS, sizeof(RS), NULL, 0);
 
	switch (dwRet)
	{
	case ERROR_ACCESS_DENIED:
		//cout << TEXT("The user does not have the correct privileges. Only an administrator can complete this task.");
		break;
	case ERROR_BUFFER_OVERFLOW:
		//cout << TEXT("The address or buffer specified by lpRasEntry is invalid.");
		break;
	case ERROR_CANNOT_OPEN_PROFILE:
		//cout<<TEXT("The phone book is corrupted or missing components.");
		break;
	case ERROR_INVALID_PARAMETER:
		//cout<<TEXT("The RASENTRY structure pointed to by the lpRasEntry parameter does not contain adequate information. See the description for lpRasEntry to see what information is required.");
		break;
	case ERROR_SUCCESS:
		break;
	}
}

Вспомогательные API функции работы с окнами Windows

В некоторых случаях требуется определить, существует ли окно с определенным дескриптором. Для этой цели необходимо применять функцию IsWindow, которая определена как:

1
2
3
BOOL WINAPI IsWindow (
   HWND HWnd
);

HWnd — дескриптор окна, для проверки.
Если окно с указанным дескриптором существует, то функция возвращает ненулевое значение, иначе функция возвращает NULL.
Читать далее »

Создание радиокнопки (RADIOBUTTON)

Радиокнопки создаются подобно обычным кнопкам — для этого мы должны вызвать функцию CreateWindows указав в третьем параметре стиль BS_AUTORADIOBUTTON (или BS_RADIOBUTTON — но он хуже, так как вам придется самим писать код, который будет ставить точку внутри выбранной радиокнопки). То, что радиокнопки делаюся точно также, как и обычные кнопки.
Читать далее »