分类
标签
.NET 9008 adb android apt asp.net ASP.NET Core audio bug C c++ C++ chrome cmd csharp CSharp css css3 debian debug dotnet dotnet Framework dpkg GDI&GDI+ gdi&gdi+ golang graphics html html5 http java javascript json kali linux linux mci microsoft minimap MSBuild mysql OpenCV PInvoke powershell python QQ rust shell speex sql tutorial ubuntu ui unity vb.net visual studio Visual Studio web Web win32 winapi windows winform WinForm wpf WPF xaml xfce 列表 刷机 前端 加密 反射 反编译 可视化 图像处理 多线程 字符串 安卓 实例 局域网 幻影坦克 库 开发语言 异步 微信 手册 手机 接口 摘要 救砖 数字签名 数字证书 数字音频 数据库 桌面程序 游戏 游戏引擎 源码 爬虫 玩游戏 电脑硬件 笔记 算法 类库 线性代数 编程语言 网络 脚本语言 计算机图形学 计算机基础 设计模式 语音编解码 运维 进制 面向对象编程 音频 音频编码解码
303 字
2 分钟
[Win32] 在不创建窗口的情况下接收处理消息.
如果你在使用一个控制台程序, 并且还希望处理一些全局快捷键, 那么这个方法是合适的.
这里说的不创建窗口指的是不创建可见的窗口
使用 MessageOnly 窗口
Windows 中存在一个特殊的窗体句柄 HWND_MESSAGE, 它的值是 -3, 当一个窗口的父窗口是它的时候, 这个窗口会成为 “仅消息窗口”
使用仅消息窗口可以发送和接收消息。 它不可见、没有 z 顺序、无法枚举且不接收广播消息。 该窗口只是调度消息。
若要创建仅消息窗口,请在 CreateWindowEx 函数的 hWndParent 参数中指定HWND_MESSAGE常量或现有仅消息窗口的句柄。 还可以通过在 SetParent 函数的 hWndNewParent 参数中指定HWND_MESSAGE,将现有窗口更改为仅消息窗口。
WPF 的使用示例:
// 窗口创建的参数
HwndSourceParameters hwndSourceParameters =
new HwndSourceParameters()
{
HwndSourceHook = Hook,
ParentWindow = (IntPtr)(-3), // a magic window handle
};
// 创建窗口
hwndSource =
new HwndSource(hwndSourceParameters);
// Hook 消息方法定义
IntPtr Hook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
// 这里处理消息
}
[Win32] 在不创建窗口的情况下接收处理消息.
https://slimenull.com/posts/20230328075624/