避免应用程序激活,并在单击其上的按钮时关注 - Windows API或Qt

Der*_*rek 6 winapi qt focus click always-on-top

情况:无边框QDialog在其他应用程序之上成功保留.

问题是当点击这个永远在顶部的应用程序窗口时,会发生以下情况:

  • 单击的always-on-top应用程序将被激活
  • 点击的永远在线应用程序窗口窃取了以前的活跃/专注应用程序的焦点

是否有可能在单击此永远在线的非活动和未聚焦的应用程序窗口时,

  • 当前的应用程序不会松动激活和焦点
  • 用户仍然能够与永远在线的应用程序进行交互(点击按钮或下拉菜单,拖动窗口)?

我正在使用Qt,但使用本机Windows API没有问题.

我尝试了以下Qt windowFlag:

  • Qt::WindowDoesNotAcceptFocus 但它不起作用:永远在线的应用程序被激活,专注.
  • Qt::WindowTransparentForInput总是在顶部的应用程序对点击非常透明:没有激活而没有集中注意力,但遗憾的是,点击时不会触发按钮.

Der*_*rek 6

使用Windows标志(#include <qt_windows.h>)单击它时,可以使窗口不可激活且不可聚焦.创建窗口并显示后,必须使用以下内容:

HWND winHandle = (HWND)winId();
ShowWindow(winHandle, SW_HIDE);
SetWindowLong(winHandle, GWL_EXSTYLE, GetWindowLong(winHandle, GWL_EXSTYLE)
    | WS_EX_NOACTIVATE | WS_EX_APPWINDOW);
ShowWindow(winHandle, SW_SHOW);
Run Code Online (Sandbox Code Playgroud)