首页 > 解决方案 > 如何使用 setWindowLongPtr (hwnd, GWL_EXSTYLE, WS_EX_NOACTIVATE)?

问题描述

我需要一个具有以下属性的窗口:

由于不存在通过 Qt 的解决方案,我知道我们必须使用 Windows 平台的 Win32 API。我必须使用这个调用:
SetWindowLongPtr(hwnd, GWL_EXSTYLE, WS_EX_NOACTIVATE)
但是我怎样才能在我的 Python 代码中实现它呢?

在这里很好地解释了:qt_forum

我的代码:

class Ui_self(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(150, 200)
        self.secret_button = QtWidgets.QPushButton(self) 
        self.secret_button.setText("# tag")
        elf.setWindowFlags(Qt.WindowStaysOnTopHint) 
        elf.setWindowFlags(Qt.FramelessWindowHint)
        self.secret_button.setFocusPolicy(Qt.NoFocus)
        self.setFocusPolicy(Qt.NoFocus)
        self.setAttribute(Qt.WA_ShowWithoutActivating)
           
if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = Ui_self()
    ex.show()
    sys.exit(app.exec()) 

标签: pythonwinapipyqt5pywin32

解决方案


您需要获取 HWND,然后使用 SetWindowLong:

import win32gui
import win32con
from ctypes.wintypes import HWND
hw = HWND(int(self.winId()))
win32gui.SetWindowLong(hw, win32con.GWL_EXSTYLE, win32con.WS_EX_NOACTIVATE)

推荐阅读