Python中如何使用wxPython捕获alt+tab切换窗口事件和ctrl+c强制中断事件?

如题,我想取消这两个功能,让程序不能被切换,不能被强制终止。
Python中如何使用wxPython捕获alt+tab切换窗口事件和ctrl+c强制中断事件?

5 回复

是我自己弱智了,应该用异常处理哈。我去研究研究。谢谢


import wx

class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(None, title="快捷键捕获示例")
        
        # 创建快捷键加速器表
        accel_tbl = wx.AcceleratorTable([
            (wx.ACCEL_ALT, ord('T'), wx.ID_ANY),  # Alt+T
            (wx.ACCEL_CTRL, ord('C'), wx.ID_ANY), # Ctrl+C
        ])
        self.SetAcceleratorTable(accel_tbl)
        
        # 绑定快捷键事件
        self.Bind(wx.EVT_MENU, self.on_hotkey, id=wx.ID_ANY)
        
        # 绑定窗口焦点事件(用于Alt+Tab切换)
        self.Bind(wx.EVT_ACTIVATE, self.on_activate)
        
        # 绑定系统级快捷键(需要额外处理)
        self.RegisterHotKey(1000, wx.MOD_ALT, ord('T'))  # Alt+T
        self.Bind(wx.EVT_HOTKEY, self.on_system_hotkey, id=1000)
        
        self.Show()

    def on_hotkey(self, event):
        """处理程序内快捷键"""
        print("程序内快捷键被触发")

    def on_activate(self, event):
        """处理窗口激活/失焦事件"""
        if event.GetActive():
            print("窗口获得焦点")
        else:
            print("窗口失去焦点(可能按了Alt+Tab)")

    def on_system_hotkey(self, event):
        """处理系统级快捷键"""
        print("系统级Alt+T被捕获")

if __name__ == "__main__":
    app = wx.App()
    frame = MyFrame()
    app.MainLoop()

注意:完全捕获Alt+Tab需要系统级钩子,wxPython本身有限制。Ctrl+C在控制台程序中用signal模块处理更合适。

用wxPython的EVT_ACTIVATE事件配合加速器表基本够用。

关闭窗口的问题倒是解决了,利用 EVT_CLOSE 这个事件即可。但 alt+tab 切换的问题始终没找到解决办法。各位大侠有思路吗?

没做过 但是想提一个思路 不一定对 窗口切换是不是系统级别的 能不能通过修改注册表实现取消切换窗口的功能

回到顶部