Windows系统编程 API(也叫 Windows API 或 Win32 API)是 Microsoft 提供的一组 C 风格的函数接口,直接与 Windows 操作系统交互和编程,进行底层系统级功能开发。是一系列接口函数、宏、数据类型、数据结构的集合,为桌面应用程序、系统服务、驱动程序、图形界面、文件/进程/网络控制等底层功能所提供的一组 API 函数,它是构建传统 Windows 程序(.exe/.dll)的核心工具。常用功能可划分为以下几类:
分类 | 描述 |
---|---|
核心系统(Kernel32.dll) | 文件I/O(读写文件、目录管理)、内存(虚拟内存、堆分配)、线程和进程(多任务处理)、同步 |
用户界面(User32.dll) | 窗口管理、消息循环、输入、对话框 |
图形界面(GDI32.dll) | 绘图、字体、图像处理 |
网络(ws2_32.dll) | TCP/IP、HTTP、Socket(Wininet, WinSock) |
安全(Advapi32.dll) | 注册表(系统配置存储)、用户权限、服务控制 |
Shell(Shell32.dll) | 文件浏览器、任务栏、快捷方式(文件资源管理器相关) |
多媒体(MMSystem.dll) | 音频播放、定时器、MIDI |
COM/OLE/ActiveX | 面向组件开发与自动化接口 |
comdlg32.dll | 通用对话框(文件打开、颜色选择) |
1、创建窗口和消息循环(GUI)
cpp
HWND hwnd = CreateWindowEx(
0, L"STATIC", L"Hello WinAPI!",
WS_OVERLAPPEDWINDOW,
100, 100, 400, 300,
NULL, NULL, hInstance, NULL
);
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);
// 消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
cpp
#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) {
// 注册窗口类
WNDCLASS wc = {0};
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = "MyWindowClass";
RegisterClass(&wc);
// 创建窗口
HWND hwnd = CreateWindow(
"MyWindowClass", // 窗口类名
"Win32 API 窗口示例", // 窗口标题
WS_OVERLAPPEDWINDOW, // 窗口样式
CW_USEDEFAULT, // X 坐标
CW_USEDEFAULT, // Y 坐标
400, // 宽度
300, // 高度
NULL, // 父窗口
NULL, // 菜单句柄
hInstance, // 实例句柄
NULL // 附加数据
);
ShowWindow(hwnd, nCmdShow);
// 消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
-
CreateWindow
/DestroyWindow
:窗口管理。 -
GetMessage
/DispatchMessage
:消息循环。 -
SendMessage
/PostMessage
:窗口间通信。
2、文件操作:
cpp
HANDLE hFile = CreateFile(
L"example.txt",
GENERIC_WRITE,
0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL
);
DWORD written;
WriteFile(hFile, "Hello, file", 11, &written, NULL);
CloseHandle(hFile);
cpp
#include <windows.h>
int main() {
// 创建文件
HANDLE hFile = CreateFile(
"C:\\test.txt", // 文件名
GENERIC_WRITE, // 访问模式(写入)
0, // 共享模式(不共享)
NULL, // 安全属性
CREATE_ALWAYS, // 创建方式(总是新建)
FILE_ATTRIBUTE_NORMAL, // 文件属性
NULL // 模板文件句柄
);
if (hFile == INVALID_HANDLE_VALUE) {
printf("CreateFile 失败: %d\n", GetLastError());
return 1;
}
// 写入数据
const char* data = "Hello, Win32 API!";
DWORD bytesWritten;
WriteFile(hFile, data, strlen(data), &bytesWritten, NULL);
// 关闭文件
CloseHandle(hFile);
return 0;
}
-
CreateFile
/ReadFile
/WriteFile
:文件操作。 -
GetFileAttributes
/SetFileAttributes
:文件属性管理。 -
FindFirstFile
/FindNextFile
:遍历目录。
3、进程创建:
cpp
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
CreateProcess(
NULL, L"notepad.exe", NULL, NULL, FALSE,
0, NULL, NULL, &si, &pi
);
cpp
#include <windows.h>
int main() {
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
// 启动记事本
BOOL success = CreateProcess(
"C:\\Windows\\notepad.exe", // 应用程序路径
NULL, // 命令行参数
NULL, // 进程安全属性
NULL, // 线程安全属性
FALSE, // 是否继承句柄
0, // 创建标志
NULL, // 环境变量
NULL, // 当前目录
&si, // 启动信息
&pi // 进程信息
);
if (success) {
WaitForSingleObject(pi.hProcess, INFINITE); // 等待进程结束
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
} else {
printf("CreateProcess 失败: %d\n", GetLastError());
}
return 0;
}
-
CreateProcess
:启动新进程。 -
OpenProcess
/TerminateProcess
:控制进程。 -
GetCurrentProcessId
:获取当前进程 ID。
4、多线程:
cpp
DWORD WINAPI MyThread(LPVOID param) {
MessageBox(NULL, L"Thread running", L"Info", MB_OK);
return 0;
}
HANDLE hThread = CreateThread(NULL, 0, MyThread, NULL, 0, NULL);
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
cpp
#include <windows.h>
DWORD WINAPI ThreadFunc(LPVOID lpParam) {
printf("线程运行: %d\n", GetCurrentThreadId());
return 0;
}
int main() {
HANDLE hThread = CreateThread(
NULL, // 安全属性
0, // 栈大小(默认)
ThreadFunc, // 线程函数
NULL, // 参数
0, // 创建标志
NULL // 线程 ID
);
WaitForSingleObject(hThread, INFINITE); // 等待线程结束
CloseHandle(hThread);
return 0;
}
5/、内存管理:
cpp
#include <windows.h>
int main() {
// 分配虚拟内存
LPVOID pMem = VirtualAlloc(
NULL, // 由系统选择地址
4096, // 分配大小(4KB)
MEM_COMMIT, // 提交物理内存
PAGE_READWRITE // 可读可写
);
if (pMem) {
strcpy((char*)pMem, "Hello, VirtualAlloc!");
printf("%s\n", (char*)pMem);
// 释放内存
VirtualFree(pMem, 0, MEM_RELEASE);
}
return 0;
}
-
VirtualAlloc
/VirtualFree
:虚拟内存管理。 -
HeapAlloc
/HeapFree
:堆内存管理。 -
GlobalAlloc
/LocalAlloc
(旧式 API,不推荐使用)。 -
CreateThread
:创建线程。 -
WaitForSingleObject
/WaitForMultipleObjects
:线程同步。 -
Sleep
:线程休眠。
以下是常用的 Win32 API 分类及关键函数:
(1) 文件与 I/O
-
文件操作:
-
CreateFile
/ReadFile
/WriteFile
:文件创建和读写。 -
GetFileAttributes
/SetFileAttributes
:文件属性管理。
-
-
目录操作:
-
CreateDirectory
/RemoveDirectory
。 -
FindFirstFile
/FindNextFile
:遍历目录。
-
(2) 进程与线程
-
进程管理:
-
CreateProcess
:启动新进程。 -
OpenProcess
/TerminateProcess
:控制进程。
-
-
线程管理:
-
CreateThread
:创建线程。 -
WaitForSingleObject
:线程同步。
-
-
DLL 动态链接库:
LoadLibrary
/GetProcAddress
:动态加载 DLL。
(3) 内存管理
-
VirtualAlloc
/VirtualFree
:虚拟内存分配。 -
HeapAlloc
/HeapFree
:堆内存管理。
(4) 窗口与消息循环(GUI)
-
RegisterClass
/CreateWindow
:创建窗口。 -
GetMessage
/DispatchMessage
:消息循环。 -
SendMessage
/PostMessage
:窗口间通信。
(5) 注册表操作
-
RegOpenKey
/RegQueryValue
:读写注册表。 -
RegSetValue
/RegDeleteKey
:修改注册表。
(6) 网络编程
-
Winsock API(基于套接字):
socket
/bind
/listen
/accept
(类似 BSD Socket)。
-
WinINet API(HTTP/FTP):
InternetOpen
/InternetReadFile
。
(7) 同步与 IPC(进程间通信)
互斥体/信号量 :CreateMutex
/ WaitForSingleObject
。
共享内存:
管道(Pipe):
cpp
CreatePipe(匿名管道) / CreateNamedPipe(命名管道)。

1、创建一个GUI:
cpp
#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) {
// 注册窗口类
WNDCLASS wc = {0};
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = "MyWindowClass";
RegisterClass(&wc);
// 创建窗口
HWND hwnd = CreateWindow("MyWindowClass", "Hello Windows", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, nCmdShow);
// 消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
2、读写文件:
cpp
#include <windows.h>
#include <stdio.h>
int main() {
HANDLE hFile = CreateFile("test.txt", GENERIC_READ | GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE) {
printf("Error: %d\n", GetLastError());
return 1;
}
const char* data = "Hello, Windows API!";
DWORD bytesWritten;
WriteFile(hFile, data, strlen(data), &bytesWritten, NULL);
CloseHandle(hFile);
return 0;
}
Win32 API 的现代替代方案
用途 | Win32 API | 现代替代方案 |
---|---|---|
GUI 开发 | user32.dll |
WinUI 3 / WPF |
文件操作 | kernel32.dll |
C++17 filesystem |
网络通信 | ws2_32.dll |
cURL / Boost.Asio |
多线程 | CreateThread |
C++11 <thread> |
跨平台开发 | 仅 Windows | Qt / Electron |