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 切换的问题始终没找到解决办法。各位大侠有思路吗?
没做过 但是想提一个思路 不一定对 窗口切换是不是系统级别的 能不能通过修改注册表实现取消切换窗口的功能
SetWindowsHookEx WH_KEYBOARD_LL
https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setwindowshookexw#parameters

