Windows API常用关键字
1.MAX_PATH
MAX_PATH是 Windows API 中定义的用于限制路径长度的常量,其值为 260。- 对于需要处理超过 260 个字符的路径,可以使用长路径前缀(如
\\?\)或启用 Windows 的长路径支持。 - 在现代 C++ 中,推荐使用
std::filesystem来处理路径,避免固定长度缓冲区的限制和潜在问题。
2.DWORD
DWORD是 Windows API 中表示无符号 32 位整数的常见数据类型。- 它在标志位、系统调用、文件操作、时间处理等场景中被广泛使用。
- 在现代 C++ 中,
DWORD可以用std::uint32_t替代以提高可移植性。 -
类型 大小 范围 描述 BYTE1 字节 0 到 255 无符号 8 位整数 WORD2 字节 0 到 65,535 无符号 16 位整数 DWORD4 字节 0 到 4,294,967,295 无符号 32 位整数 QWORD(非标准)8 字节 0 到 18,446,744,073,709,551,615 无符号 64 位整数 LONG4 字节 -2,147,483,648 到 2,147,483,647 有符号 32 位整数 ULONGLONG8 字节 0 到 18,446,744,073,709,551,615 无符号 64 位整数
3.wstring
std::wstring是 C++ 中适合处理宽字符(wchar_t)字符串的工具。- 它特别适合在 Windows 环境中使用,尤其是需要处理多语言文本或与 Windows API 交互时。
- 但在跨平台开发中,应注意
wchar_t的平台差异,并考虑使用更标准的 Unicode 处理方式(如std::u16string)。
4.COLORREF: COLORREF 是一个 32 位的无符号整数(实际上是 DWORD 类型的别名)
| 功能 | 方法/宏 |
|---|---|
| 创建颜色 | RGB(r, g, b) |
| 获取红色分量 | GetRValue(color) |
| 获取绿色分量 | GetGValue(color) |
| 获取蓝色分量 | GetBValue(color) |
| 用途 | 设置背景色、文本色等 |
5.HINSTANCE
HINSTANCE是 Windows API 中的一个核心数据类型,用于标识模块的实例。- 它常用于加载资源、创建窗口、操作 DLL 等。
- 在典型的 Windows 应用程序中,
HINSTANCE是WinMain函数的一个重要参数,也是许多 Windows API 的必需参数。
6.DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2
背景:DPI 及 DPI 感知
- DPI (Dots Per Inch):指屏幕分辨率的一个度量单位,表示每英寸内的像素数量。
- DPI 感知:Windows 引入了 DPI 感知模式,用于处理高分辨率显示器,以确保应用程序界面和内容的清晰度。
主要的 DPI 感知模式
-
DPI Unaware (DPI 无感知):
- 应用程序完全不知道 DPI 的存在。
- 界面可能在高 DPI 显示器上显得模糊或失真。
-
System DPI Aware (系统 DPI 感知):
- 应用程序使用启动时的系统 DPI。
- 对于不同的显示器,界面不会动态调整。
-
Per-Monitor DPI Aware (每显示器 DPI 感知):
- 应用程序能够根据每个显示器的 DPI 动态调整。
-
Per-Monitor DPI Aware V2 (每显示器感知 V2):
- Per-Monitor DPI 感知的改进版本,引入更多功能和兼容性支持。
7.WNDCLASSEXW
WNDCLASSEXW是 Windows API 中用于定义窗口类属性的结构体,支持宽字符(Unicode)。- 它必须在调用
RegisterClassExW注册窗口类之前正确初始化。 - 通过
WNDCLASSEXW,开发者可以自定义窗口的外观和行为,包括背景颜色、图标、光标等。 - 在现代 Windows 应用程序开发中,
WNDCLASSEXW是创建自定义窗口的基础组件。
8.WPARAM
| 特性 | WPARAM | LPARAM |
|---|---|---|
| 定义 | 无符号整数(UINT_PTR) |
有符号整数(LONG_PTR) |
| 大小 | 与系统架构相关:32 位或 64 位 | 与系统架构相关:32 位或 64 位 |
| 常用场景 | 传递简单的附加信息(如标志、键码、标识符等) | 传递复杂的数据(如指针、坐标、高级结构体等) |
9.LRESULT
LRESULT是 Windows API 中用于表示窗口过程返回值的数据类型。- 它的具体值取决于消息类型,用于告知系统消息的处理结果或状态。
- 在编写窗口过程时,必须正确返回
LRESULT值,以确保程序的正常运行。 - 对于未处理的消息,始终调用
DefWindowProc进行默认处理。
GWLP_USERDATA是一个窗口字段,用于存储与窗口相关的用户自定义数据。- 它通过
SetWindowLongPtr和GetWindowLongPtr函数进行设置和检索。 - 在开发过程中,
GWLP_USERDATA是一个非常有用的工具,特别是在需要将自定义数据与窗口关联的场景中,例如消息处理、控件管理等。
11.WM_CREATE
WM_CREATE是在窗口创建时发送的消息,用于执行初始化操作。- 它的附加参数
lParam包含指向CREATESTRUCT的指针,提供了窗口的详细信息。 - 处理
WM_CREATE消息时,返回0表示成功,返回-1表示窗口创建失败。 - 常用于初始化窗口的子控件、资源分配或设置窗口属性。
12.LPCREATESTRUCT
LPCREATESTRUCT是指向CREATESTRUCT的指针,用于在窗口创建时传递初始化数据。- 通过
WM_CREATE消息的lParam参数,可以访问LPCREATESTRUCT,提取窗口的创建参数。 - 它是 Windows 编程中用于窗口初始化的重要工具,适用于传递和解析自定义数据。
13.__ImageBase
__ImageBase是一个全局符号,指向当前模块的基地址。- 它是 Microsoft 编译器提供的功能,适用于 Windows 平台。
- 常用于替代
GetModuleHandle获取当前模块句柄,也用于计算资源或其他数据在内存中的地址。 - 简单、高效,但受限于平台,跨平台代码中应避免使用。
14.SetWinEventHook
SetWinEventHook是一个强大的工具,用于监听和处理 Windows 系统事件和用户界面事件。- 适用于开发辅助功能(如屏幕阅读器)或调试工具。
- 通过灵活设置事件范围和钩子类型,可以高效地捕获所需的事件,同时避免性能问题。
- 配合
UnhookWinEvent和消息循环,确保资源得到正确释放和管理。
15.RemoveProp
RemoveProp是一个简单但非常实用的函数,用于删除与窗口相关联的自定义属性。- 配合
SetProp和GetProp,可以轻松实现窗口自定义数据的存储、检索和删除。 - 在使用时需要注意一致性、资源管理和错误处理。
16.WINDOW_IS_PINNED_PROP
WINDOW_IS_PINNED_PROP是一个常用的窗口属性键,通常用于标记窗口是否被固定。- 通过 Windows API 的
SetProp、GetProp和RemoveProp函数,可以方便地管理与窗口相关的自定义属性。 - 在使用时需要注意资源管理、错误处理和属性键的唯一性。
17.GWL_EXSTYLE
GWL_EXSTYLE是用于操作窗口扩展样式的关键字,配合GetWindowLong和SetWindowLong使用。- 扩展样式提供了许多额外的窗口特性,例如透明窗口、顶层窗口、工具窗口等。
- 在使用时需要注意样式的叠加和刷新窗口以使更改生效。
- 了解常见的扩展样式标志,可以更好地定制窗口行为和外观。
18.TraceLoggingWrite
TraceLoggingWrite是 Windows 提供的事件日志记录工具,用于记录运行时的调试和性能信息。- 它基于 ETW 系统,具有高性能和低开销的特点。
- 使用时需要定义和注册提供程序,并通过字段宏添加详细的事件信息。
- 是调试和诊断 Windows 应用程序的重要工具之一。
19.EnumWindows
EnumWindows是 Windows API 中用于枚举顶级窗口的强大工具。- 它需要一个回调函数来处理每个窗口的句柄和相关信息。
- 可用于调试、监控或与其他程序交互。
- 配合其他 API 函数(如
GetWindowText和GetWindowThreadProcessId),可以获取详细的窗口信息。

浙公网安备 33010602011771号