【Qt教程24】Windows SDK 开发入门教程
【Qt教程24】Windows SDK 开发入门教程
原创作者:郑同学的笔记
原文链接:https://zhengjunxue.blog.csdn.net/article/details/151822883
Windows SDK(Software Development Kit)是微软提供的完整开发生态系统,包含了开发Windows平台应用程序所需的全部工具、库、头文件和文档。
一、安装Windows SDK
推荐安装方式:
1、通过Visual Studio Installer安装(推荐):
安装Visual Studio 2019/2022
选择"使用C++的桌面开发"工作负载
在"单个组件"中确保选中最新的Windows SDK
2、独立安装(在线、离线):
下载Windows SDK
微软官网:https://www.microsoft.com/zh-cn/



二、Windows SDK 的广阔天地
Windows SDK(Software Development Kit)是微软提供的综合性开发工具包,用于构建运行在 Windows 操作系统上的各类应用程序。它不仅包含 API,还提供完整的开发、调试、测试和部署工具链。
1、 Windows SDK 核心组件对比
| 类型 | 序号 | 组件/工具名称 | 主要功能描述 |
|---|---|---|---|
| 核心API与运行时 | 1 | Win32 API | Windows操作系统核心应用程序接口 提供窗口管理、文件操作、内存管理等基础功能 |
| 2 | COM组件模型 | 组件对象模型(Component Object Model) 支持跨语言组件通信,是许多Windows服务的基础 |
|
| 3 | C运行时库(CRT) | 标准C函数实现库 包括内存分配、文件操作和字符串处理功能 |
|
| 4 | Windows Runtime (WinRT) | 现代Windows应用的核心API框架 基于元数据和COM,支持C++、C#、JavaScript等语言 |
|
| 5 | DirectX图形库 | 高性能图形、音频和输入API集合 包含Direct3D、Direct2D、XAudio2等组件 |
|
| 6 | 活动模板库(ATL) | 简化COM组件开发的C++模板库 提供轻量级的COM支持 |
|
| 7 | Windows App SDK | 统一的现代Windows应用开发平台 整合Win32/WinRT能力,支持桌面与UWP融合开发 |
|
| 8 | SDK 头文件与导入库 | 包含API声明(如 windows.h)和链接符号(如 kernel32.lib)是C/C++调用Windows API的必备基础 |
|
| 开发与构建工具 | 9 | cl.exe | Microsoft C/C++ 编译器 支持C/C++17/20标准、优化和代码生成 |
| 10 | link.exe | Microsoft 链接器 将目标文件和库链接生成可执行文件或DLL |
|
| 11 | rc.exe | 资源编译器 将.rc资源脚本编译为二进制资源文件(.res) |
|
| 12 | mc.exe | 消息编译器 从消息定义文件生成事件日志字符串和头文件 |
|
| 13 | midl.exe | MIDL编译器 将接口定义语言(.idl)编译为COM代理/存根代码 |
|
| 调试与诊断工具 | 14 | cdb.exe | 控制台调试器 用于命令行下用户模式程序调试 |
| 15 | WinDbg | 图形化调试工具 支持用户态与内核态调试,可分析内存转储 |
|
| 16 | WPR / WPA | Windows性能记录与分析工具 WPR采集系统性能数据,WPA进行可视化分析 |
|
| 17 | 事件查看器 | 系统事件管理工具 查看应用程序、系统和安全日志 |
|
| 18 | Process Monitor | 高级监控工具 实时追踪文件系统、注册表、进程/线程活动 |
|
| 19 | Application Verifier | 应用程序验证工具 检测内存损坏、句柄泄漏等运行时错误 |
|
| 部署与打包工具 | 20 | MakeAppx.exe | 应用程序打包工具 创建MSIX或APPX格式的应用包 |
| 21 | SignTool.exe | 数字签名工具 为可执行文件、驱动、应用包添加代码签名 |
|
| 22 | MSI API 与工具 | Windows Installer 支持 提供创建和管理MSI安装包的接口与命令行工具 |
|
| 23 | App Installer | 现代应用安装框架 支持通过URL或本地部署MSIX/APPX包 |
|
| 24 | Windows App Certification Kit | Windows应用认证工具 验证应用是否符合Microsoft Store提交要求 |
2、核心API与运行时—— Win32 API
Windows操作系统核心应用程序接口
提供以下基础功能:
- 进程与线程管理:创建、同步、调度(如
CreateThread,Mutex) - 内存管理:虚拟内存、堆管理(
VirtualAlloc,HeapAlloc) - 文件与I/O:文件读写、异步I/O、管道
- 网络通信:Winsock、HTTP Server API、RPC
- 窗口与消息:GUI 窗口、消息循环、用户输入
- 注册表:系统配置存储访问
是 C/C++ 原生应用开发的基石
3、Win32 API和SDK 头文件与导入库,是什么关系
一句话总结:
Win32 API 是“功能规范”,而 SDK 头文件与导入库是“使用这些功能的桥梁”。
| 概念 | 是什么 |
|---|---|
| Win32 API | Windows 操作系统提供的一组函数接口规范 如:CreateWindow, CreateThread, ReadFile 等 |
| SDK 头文件(.h) | 声明这些函数的“说明书” 告诉编译器:CreateWindow 长什么样?参数是什么? |
| SDK 导入库(.lib) | 包含函数符号的“联络表” 告诉链接器:CreateWindow 在 user32.dll 里,去那里找 |
| 系统 DLL(如 kernel32.dll) | 真正实现 API 功能的动态链接库 运行时由操作系统加载 |
- 关键关系图
你的代码
↓
#include <windows.h> ← SDK 头文件(.h)
↓
调用 CreateWindow() ← Win32 API(函数名)
↓
链接 user32.lib ← SDK 导入库(.lib)
↓
运行时加载 user32.dll ← Windows 系统 DLL(实现 API)
↓
最终执行 Win32 功能
三、 第一个Windows程序
之前用windows socket写的通信软件,应该算第一个windows程序,仅仅是当时对windows sdk了解的不够深入。再后来用性能phd实现了性能监测软件,应该的第二次用。但之前都用到了c++或者qt的接口。而下面这个程序是完完整整的windows程序。
#include <Windows.h>
#pragma comment(lib, "user32.lib")
#pragma comment(lib, "gdi32.lib")
#pragma comment(lib, "kernel32.lib")
// 窗口过程函数声明
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI wWinMain(
_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
// 1. 注册窗口类
const wchar_t CLASS_NAME[] = L"Sample Window Class";
WNDCLASS wc = {};
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
RegisterClass(&wc);
// 2. 创建窗口
HWND hwnd = CreateWindowEx(
0,
CLASS_NAME,
L"Windows SDK 教程",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 800, 600,
NULL, NULL, hInstance, NULL
);
if (hwnd == NULL) return 0;
// 3. 显示窗口
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
// 4. 消息循环
MSG msg = {};
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
// 窗口过程函数实现
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
// 绘制文本
TextOut(hdc, 50, 50, L"欢迎使用Windows SDK开发!", 12);
EndPaint(hwnd, &ps);
}
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
运行结果
进一步学习建议
学习COM编程:了解组件对象模型,这是许多Windows技术的基础
探索Windows Shell编程:学习如何与Windows Shell集成
研究Windows服务开发:学习如何创建后台服务程序
了解Windows安全模型:学习安全描述符、访问控制列表等概念
学习最新Windows API:如Windows Runtime (WinRT) API
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)