Skip to content

什么是 win32 API?win32 都包含了哪些?

Win32 API 介绍

Win32 API 是 Microsoft Windows 操作系统提供的一组底层函数库,允许开发者与 Windows 操作系统的各种功能和资源进行交互。它提供了访问 Windows 内核、图形界面、窗口管理、内存管理、输入输出设备、文件系统等方面的能力,允许开发者编写高性能和高度定制化的 Windows 应用程序。

Win32 API 是什么?

  • Win32 API 是 Windows 操作系统上最常用的应用编程接口(API),它直接与 Windows 系统交互。
  • API 的全称是 "Application Programming Interface",它是应用程序和操作系统之间的一层接口,开发者通过调用这些接口来控制和操作操作系统。
  • Win32 API 是 32 位操作系统的 API,虽然它的名字是 Win32,但它也适用于 64 位 Windows 系统。它是 Windows 平台上开发传统桌面应用程序最基础的技术之一。

Win32 API 的分类

Win32 API 可以分为多个功能模块,涵盖了操作系统的几乎每一个重要方面。以下是一些主要的 Win32 API 功能分类:

  1. 窗口管理(Window Management)

    • 处理窗口创建、显示、消息循环等与窗口相关的操作。
    • 常见 API:CreateWindow(), ShowWindow(), UpdateWindow(), DefWindowProc()
  2. 图形设备接口(GDI, Graphics Device Interface)

    • 提供绘图功能,包括绘制文本、形状、图像等,主要用于处理应用程序的图形输出。
    • 常见 API:BitBlt(), CreateCompatibleDC(), LineTo(), TextOut()
  3. 用户输入处理(User Input)

    • 处理来自键盘、鼠标等输入设备的用户输入。
    • 常见 API:GetAsyncKeyState(), SetCursorPos(), GetCursorPos(), GetKeyState()
  4. 进程和线程管理(Process and Thread Management)

    • 提供创建和管理进程、线程的能力,以及进程间通信(IPC)等功能。
    • 常见 API:CreateProcess(), TerminateProcess(), CreateThread(), WaitForSingleObject()
  5. 内存管理(Memory Management)

    • 控制应用程序使用系统内存的方式,提供内存分配、释放等操作。
    • 常见 API:VirtualAlloc(), HeapAlloc(), HeapFree(), GlobalMemoryStatus()
  6. 文件系统操作(File System Operations)

    • 用于文件创建、删除、读写、查找等与文件系统相关的操作。
    • 常见 API:CreateFile(), ReadFile(), WriteFile(), DeleteFile()
  7. 设备输入输出(Device Input/Output)

    • 提供与系统硬件设备(如打印机、存储设备等)的交互能力。
    • 常见 API:DeviceIoControl(), ReadFile(), WriteFile()
  8. 注册表操作(Registry Operations)

    • 提供对 Windows 注册表的读写操作,常用于存储应用程序的配置。
    • 常见 API:RegOpenKeyEx(), RegSetValueEx(), RegQueryValueEx(), RegCloseKey()
  9. 网络操作(Networking)

    • 提供与网络相关的操作,包括创建网络连接、发送/接收数据等。
    • 常见 API:WSAStartup(), send(), recv(), connect()
  10. 时间管理(Time Management)

    • 提供系统时间的管理功能,包含定时器、系统时钟等。
    • 常见 API:GetSystemTime(), SetSystemTime(), Sleep(), SetTimer()
  11. 消息和消息队列(Message and Event Handling)

    • 处理应用程序的消息队列,通过消息机制在不同组件之间传递信息。
    • 常见 API:PostMessage(), GetMessage(), PeekMessage(), DispatchMessage()
  12. 安全管理(Security and Access Control)

    • 提供对系统资源的安全管理,包括用户权限、访问控制列表(ACLs)等。
    • 常见 API:OpenProcessToken(), AdjustTokenPrivileges(), SetSecurityInfo()

示例:调用 Win32 API

通过 Win32 API,开发者可以直接控制 Windows 操作系统。以下是一个简单的例子,展示如何创建一个窗口并运行消息循环:

c
#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 = {};
    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 = {};
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

总结

Win32 API 是一个庞大的系统接口集合,几乎涵盖了 Windows 操作系统的所有功能。通过学习和使用 Win32 API,开发者可以编写高度优化和高性能的应用程序,直接控制 Windows 操作系统的底层功能。

是不是 user32.dll 等,你可以枚举更多吗?

是的,user32.dll 是 Win32 API 中的一个重要模块,它负责处理与用户界面相关的操作,如窗口管理、消息处理等。除此之外,Windows 操作系统还提供了许多其他动态链接库(DLL),每个库包含不同的 API 功能。以下是一些常见的 Win32 API 库和它们的功能:

常见的 Win32 API 动态链接库(DLL):

  1. user32.dll:

    • 负责用户界面相关的操作,如窗口创建、管理、输入处理(键盘和鼠标事件)、消息循环等。
    • 常见函数:CreateWindowEx, ShowWindow, DispatchMessage, MessageBox, GetMessage.
  2. kernel32.dll:

    • 核心系统 API,负责内存管理、文件系统操作、进程和线程管理、输入输出操作等。
    • 常见函数:CreateFile, ReadFile, WriteFile, VirtualAlloc, CreateProcess, Sleep.
  3. gdi32.dll:

    • 图形设备接口(GDI)库,负责 2D 图形绘制、文本显示、位图操作等。
    • 常见函数:BitBlt, CreateCompatibleDC, LineTo, TextOut, SelectObject.
  4. advapi32.dll:

    • 高级系统 API 库,负责注册表操作、安全管理(权限、访问控制)、服务控制等。
    • 常见函数:RegOpenKeyEx, RegSetValueEx, RegQueryValueEx, OpenProcessToken, AdjustTokenPrivileges.
  5. comctl32.dll:

    • 通用控件库,提供 Windows 界面中的各种标准控件,如按钮、编辑框、列表框、进度条等。
    • 常见函数:InitCommonControls, CreateWindowEx (用于创建控件).
  6. shell32.dll:

    • 提供与 Windows Shell(桌面、文件管理器等)相关的功能,如图标处理、文件操作对话框、路径解析等。
    • 常见函数:SHGetSpecialFolderPath, ShellExecute, SHFileOperation.
  7. ole32.dll:

    • 提供面向对象的 COM(Component Object Model)服务,支持 OLE(对象链接与嵌入)、对象序列化、进程间通信等。
    • 常见函数:CoInitialize, CoCreateInstance, CoUninitialize.
  8. oleaut32.dll:

    • 提供 OLE 自动化服务,支持通过脚本或其他语言调用 COM 对象。
    • 常见函数:SysAllocString, VariantInit, VariantClear.
  9. ws2_32.dll:

    • Windows 套接字(Winsock)库,提供网络编程功能,如 TCP/IP 协议的连接、数据传输等。
    • 常见函数:socket, bind, listen, send, recv, connect.
  10. crypt32.dll:

    • 提供加密和解密服务,支持数字证书、消息加密、散列函数等。
    • 常见函数:CryptEncrypt, CryptDecrypt, CryptAcquireContext, CryptReleaseContext.
  11. iphlpapi.dll:

    • 提供 IP 帮助 API,允许访问网络适配器信息、IP 地址信息等。
    • 常见函数:GetAdaptersInfo, GetNetworkParams.
  12. ntdll.dll:

    • 包含与操作系统内核通信的 API,是系统层次最高的 DLL 文件之一,负责许多低级系统功能。
    • 常见函数:NtQueryInformationProcess, NtQuerySystemInformation, RtlInitUnicodeString.
  13. winmm.dll:

    • 提供多媒体功能,允许应用程序使用声音、计时器、操控 MIDI 设备等。
    • 常见函数:waveOutOpen, waveOutWrite, timeSetEvent, mciSendString.
  14. setupapi.dll:

    • 主要用于安装、配置和管理设备驱动程序和系统组件。
    • 常见函数:SetupDiGetDeviceRegistryProperty, SetupDiEnumDeviceInterfaces.
  15. msvcrt.dll:

    • 微软 C 运行时库,提供标准 C 函数库的实现,如内存管理、字符串操作、数学函数等。
    • 常见函数:malloc, free, printf, strcpy, memcpy.
  16. shlwapi.dll:

    • 提供对 Shell 的扩展支持,包含字符串处理、路径处理、注册表处理等辅助函数。
    • 常见函数:PathCombine, StrCmpLogicalW, SHCreateStreamOnFile.
  17. wininet.dll:

    • 提供高层次的网络服务 API,支持 HTTP、FTP 等协议的操作。
    • 常见函数:InternetOpen, InternetConnect, HttpOpenRequest, HttpSendRequest.

总结

Win32 API 涵盖了大量的系统功能,几乎每个方面都由不同的 DLL 文件管理。user32.dll, kernel32.dll, gdi32.dll, 和 advapi32.dll 等 DLL 是最常用的基础库。通过这些库,开发者可以利用 Windows 系统的底层功能,进行文件管理、图形绘制、进程控制等操作。