当前位置: 首页 > news >正文

Windows系统编程(Win32 API)

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

通用对话框(文件打开、颜色选择)

下面是一些常用API举例。

1、创建窗口和消息循环(GUI):

#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;
}

    2、文件操作:

    #include <windows.h>
    #include <stdio.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 / CreateDirectory / RemoveDirectory :遍历目录

      3、进程创建:

      #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;
      }

      同步与 IPC(进程间通信)

      互斥体/信号量CreateMutex / WaitForSingleObject

      管道(Pipe)

      CreatePipe(匿名管道) / CreateNamedPipe(命名管道)。

      4、多线程:

      #include <windows.h>DWORD WINAPI ThreadFunc(LPVOID lpParam) {printf("线程运行: %d\n", GetCurrentThreadId());return 0;
      }DWORD WINAPI MyThread(LPVOID param) {MessageBox(NULL, L"Thread running", L"Info", MB_OK);return 0;
      }int main() {HANDLE hThread = CreateThread(NULL,           // 安全属性0,              // 栈大小(默认)ThreadFunc,     // 线程函数NULL,           // 参数0,              // 创建标志NULL            // 线程 ID);WaitForSingleObject(hThread, INFINITE); // 等待线程结束CloseHandle(hThread);return 0;
      }

       5、内存管理:

      #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;
      }

      6、注册表操作

      • RegOpenKey / RegQueryValue:读写注册表。

      • RegSetValue / RegDeleteKey:修改注册表。

      7、网络编程

      • Winsock API(基于套接字):

        • socket / bind / listen / accept(类似 BSD Socket)。

      • WinINet API(HTTP/FTP):

        • InternetOpen / InternetReadFile

      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

      http://www.dtcms.com/a/266082.html

      相关文章:

    • pytorch、torchvision与python版本对应关系
    • 什么是软中断
    • 使用Visual Studio 2022创建CUDA编程项目
    • Python爬虫 XPath 三方库lxml
    • Unity Android与iOS自动重启
    • Java综合练习04
    • js代码中的作用域
    • 深度学习×第4卷:Pytorch实战——她第一次用张量去拟合你的轨迹
    • Mausezahn - 网络流量生成与测试工具(支持从链路层到应用层的协议模拟)
    • C++ 解决类相互引用导致的编译错误
    • 状态码301和302的区别
    • 智能设备远程管理:基于OpenAI风格API的自动化实践
    • 渗透靶机 Doctor 复盘
    • 粘包问题介绍
    • JS模块导出导入笔记 —— 默认导出 具名导出
    • 【嵌入式电机控制#8】编码器测速实战
    • C++讲解—类(2)
    • MCP+Cursor入门
    • AI 日报:阿里、字节等企业密集发布新技术,覆盖语音、图像与药物研发等领域
    • 前缀和与差分算法详解
    • 线程池相关介绍
    • SpringSecurity01
    • 【libm】 7 双精度正弦函数 (k_sin.rs)
    • 从混沌到澄明,AI如何重构我们的决策地图与未来图景
    • 把大象塞进冰箱总共分几步:讲讲dockerfile里conda的移植
    • IOC容器讲解以及Spring依赖注入最佳实践全解析
    • XILINX FPGA如何做时序分析和时序优化?
    • Linux之Socket编程Tcp
    • 【BurpSuite 2025最新版插件开发】基础篇7:数据的持久化存储
    • snail-job的oracle sql(oracle 11g)