如果你在使用一个控制台程序, 并且还希望处理一些全局快捷键, 那么这个方法是合适的.
这里说的不创建窗口指的是不创建可见的窗口
使用 MessageOnly 窗口
Windows 中存在一个特殊的窗体句柄 HWND_MESSAGE, 它的值是 -3, 当一个窗口的父窗口是它的时候, 这个窗口会成为 “仅消息窗口”
使用仅消息窗口可以发送和接收消息。 它不可见、没有 z 顺序、无法枚举且不接收广播消息。 该窗口只是调度消息。
若要创建仅消息窗口,请在 CreateWindowEx 函数的 hWndParent 参数中指定HWND_MESSAGE常量或现有仅消息窗口的句柄。 还可以通过在 SetParent 函数的 hWndNewParent 参数中指定HWND_MESSAGE,将现有窗口更改为仅消息窗口。
参考: 窗口功能:仅消息窗口 -Win32 apps | Microsoft Learn
WPF 的使用示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| // 窗口创建的参数
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)
{
// 这里处理消息
}
|