原创作者:郑同学的笔记
原文链接: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

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐