有些窗口天生就是为了辅助其它程序而使用的,典型的如“输入法窗口”。这些窗口不希望抢夺其它窗口的焦点。
有 Win32 方法来解决这样的问题,WS_EX_NOACTIVATE
便是关键。
具体来说,是给窗口样式中额外添加一个 WS_EX_NOACTIVATE
位。
var handle = GetTheWindowHandle();
int exstyle = GetWindowLong(handle, GWL_EXSTYLE);
SetWindowLong(handle, GWL_EXSTYLE, exstyle | WS_EX_NOACTIVATE);
当然,这里需要用到 P/Invoke 平台调用,可以阅读 使用 PInvoke.net Visual Studio Extension 辅助编写 Win32 函数签名 了解快速生成平台调用方法签名的方法。
于是,我们将完整的窗口代码写完,是下面这样。
注意 64 位系统中需调用 GetWindowLongPtr
和