WinAPI C - руководство для программистов
WINAPI (Windows API) это набор функций, структур и ресурсов, предоставляемых операционной системой Windows для разработки приложений под эту платформу. Это целая экосистема, позволяющая взаимодействовать с системными ресурсами, создавать пользовательский интерфейс и управлять процессом выполнения программы.
WINAPI предлагает разработчикам широкий набор возможностей для создания и управления окнами, обработки событий, работе с файловой системой, реестром, сетями и другими системными ресурсами.
Для работы с Windows API в языке программирования С используется специальный префикс WINAPI для объявления функций, структур и типов данных. Рассмотрим примеры кода на языке С с использованием WINAPI.
Пример 1: Создание окна с помощью WINAPI
#include <windows.h>
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
const char CLASS_NAME[] = "Sample Window Class";
WNDCLASS wc = {0};
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
RegisterClass&(wc);
HWND hwnd = CreateWindowEx(
0,
CLASS_NAME,
"Sample Window",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
if (hwnd == NULL)
{
return 0;
}
ShowWindow(hwnd, nCmdShow);
MSG msg = {0};
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
В данном примере мы создаем простое окно с помощью функций WINAPI. Здесь мы определяем функцию обработки сообщений WindowProc, которая реагирует на различные события окна. Затем в функции WinMain мы регистрируем класс окна, создаем его с помощью функции CreateWindowEx, устанавливаем его видимость с помощью ShowWindow и запускаем цикл обработки сообщений с помощью функций GetMessage, TranslateMessage и DispatchMessage.
Пример 2: Работа с реестром с использованием WINAPI
#include <windows.h>
int main()
{
HKEY hKey;
// Открываем ключ реестра
if (RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\MyApp", 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
{
// Записываем значение в реестр
RegSetKeyValue(hKey, NULL, "Key", REG_SZ, "Value", sizeof("Value"));
// Читаем значение из реестра
char value[256];
DWORD size = sizeof(value);
RegGetValue(hKey, NULL, "Key", RRF_RT_REG_SZ, NULL, value, &size);