Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ config.json
user.ini
*.lock
out/
test.py
test.py
pssuspend64.exe
Binary file added logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 9 additions & 0 deletions main/Boss-Key.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,19 @@ class APP(wx.App):
def __init__(self):
wx.App.__init__(self)
def clean():
print("Global Cleaning up...")
try:
Config.HotkeyListener._cleanup()
except:
pass
try:
Config.HotkeyListener.Close()
except:
pass
try:
os.remove(os.path.join(Config.root_path,"Boss-Key.lock"))
except:
pass
atexit.register(clean)

# 设置语言环境为中文
Expand Down
4 changes: 2 additions & 2 deletions main/GUI/setting/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ def init_UI(self):

# 创建按钮
button_sizer = wx.BoxSizer(wx.HORIZONTAL)
self.reset_btn = wx.Button(panel, label="重置设置")
self.save_btn = wx.Button(panel, label="保存设置")
self.reset_btn = wx.Button(panel, label="重置设置", size=(-1, 50))
self.save_btn = wx.Button(panel, label="保存设置", size=(-1, 50))
button_sizer.Add(self.reset_btn, proportion=1, flag=wx.LEFT, border=20)
button_sizer.Add(self.save_btn, proportion=1, flag=wx.RIGHT, border=20)

Expand Down
87 changes: 85 additions & 2 deletions main/GUI/setting/hotkeys_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@ def __init__(self, parent):
def init_UI(self):
sizer = wx.BoxSizer(wx.VERTICAL)

# 创建网格布局
# 创建键盘热键设置区域
keyboard_box = wx.StaticBox(self, label="键盘热键")
keyboard_box_sizer = wx.StaticBoxSizer(keyboard_box, wx.VERTICAL)

grid_sizer = wx.FlexGridSizer(rows=2, cols=3, gap=(10, 20))
grid_sizer.AddGrowableCol(1, 1)

Expand All @@ -33,25 +36,105 @@ def init_UI(self):
grid_sizer.Add(self.close_text, 1, wx.EXPAND | wx.ALL, 10)
grid_sizer.Add(self.close_btn, 0, wx.EXPAND | wx.ALL, 10)

sizer.Add(grid_sizer, 0, wx.EXPAND | wx.ALL, 10)
keyboard_box_sizer.Add(grid_sizer, 0, wx.EXPAND | wx.ALL, 5)
sizer.Add(keyboard_box_sizer, 0, wx.EXPAND | wx.ALL, 10)

# 添加鼠标隐藏选项
mouse_box = wx.StaticBox(self, label="鼠标隐藏")
mouse_box_sizer = wx.StaticBoxSizer(mouse_box, wx.VERTICAL)

# 中键选项
self.middle_button_checkbox = wx.CheckBox(self, label="启用鼠标中键隐藏窗口")
self.middle_button_checkbox.SetToolTip(wx.ToolTip("点击鼠标中键可快速隐藏/显示窗口"))

# 侧键1选项
self.side_button1_checkbox = wx.CheckBox(self, label="启用鼠标侧键1隐藏窗口")
self.side_button1_checkbox.SetToolTip(wx.ToolTip("点击鼠标侧键1(前进键)可快速隐藏/显示窗口"))

# 侧键2选项
self.side_button2_checkbox = wx.CheckBox(self, label="启用鼠标侧键2隐藏窗口")
self.side_button2_checkbox.SetToolTip(wx.ToolTip("点击鼠标侧键2(后退键)可快速隐藏/显示窗口"))

mouse_box_sizer.Add(self.middle_button_checkbox, 0, wx.ALL, 10)
mouse_box_sizer.Add(self.side_button1_checkbox, 0, wx.ALL, 10)
mouse_box_sizer.Add(self.side_button2_checkbox, 0, wx.ALL, 10)

sizer.Add(mouse_box_sizer, 0, wx.EXPAND | wx.ALL, 10)

# 添加其他选项区域
other_box = wx.StaticBox(self, label="其他")
other_box_sizer = wx.StaticBoxSizer(other_box, wx.VERTICAL)

# 自动隐藏选项
auto_hide_sizer = wx.BoxSizer(wx.HORIZONTAL)
self.auto_hide_checkbox = wx.CheckBox(self, label="自动隐藏:")
self.auto_hide_checkbox.SetToolTip(wx.ToolTip("在无操作指定时间后自动隐藏窗口"))
auto_hide_sizer.Add(self.auto_hide_checkbox, 0, wx.ALIGN_CENTER_VERTICAL)

# 自动隐藏时间输入框
self.auto_hide_time = wx.SpinCtrl(self, min=1, max=120, initial=5)
self.auto_hide_time.SetToolTip(wx.ToolTip("设置多少分钟无操作后自动隐藏"))
auto_hide_sizer.Add(self.auto_hide_time, 0, wx.LEFT, 10)

# 分钟标签
minutes_label = wx.StaticText(self, label="分钟")
auto_hide_sizer.Add(minutes_label, 0, wx.ALIGN_CENTER_VERTICAL | wx.LEFT, 5)

other_box_sizer.Add(auto_hide_sizer, 0, wx.ALL, 10)

# 灰色文本提示
auto_hide_tip = wx.StaticText(self, label="当键盘和鼠标在指定时间内无操作时,将自动隐藏窗口")
auto_hide_tip.SetForegroundColour(wx.Colour(128, 128, 128)) # 灰色文本
other_box_sizer.Add(auto_hide_tip, 0, wx.ALL, 10)

sizer.Add(other_box_sizer, 0, wx.EXPAND | wx.ALL, 10)

self.SetSizer(sizer)

def Bind_EVT(self):
self.hide_show_btn.Bind(wx.EVT_BUTTON, self.OnRecordHideShow)
self.close_btn.Bind(wx.EVT_BUTTON, self.OnRecordClose)
self.auto_hide_checkbox.Bind(wx.EVT_CHECKBOX, self.OnAutoHideToggle)

def OnAutoHideToggle(self, e):
# 启用或禁用时间输入框
self.auto_hide_time.Enable(self.auto_hide_checkbox.GetValue())

def SetData(self):
self.hide_show_text.SetValue(Config.hide_hotkey)
self.close_text.SetValue(Config.close_hotkey)
self.middle_button_checkbox.SetValue(Config.middle_button_hide if hasattr(Config, 'middle_button_hide') else False)
self.side_button1_checkbox.SetValue(Config.side_button1_hide if hasattr(Config, 'side_button1_hide') else False)
self.side_button2_checkbox.SetValue(Config.side_button2_hide if hasattr(Config, 'side_button2_hide') else False)

# 设置自动隐藏选项
auto_hide_enabled = Config.auto_hide_enabled if hasattr(Config, 'auto_hide_enabled') else False
self.auto_hide_checkbox.SetValue(auto_hide_enabled)

auto_hide_time = Config.auto_hide_time if hasattr(Config, 'auto_hide_time') else 5
self.auto_hide_time.SetValue(auto_hide_time)
self.auto_hide_time.Enable(auto_hide_enabled)

def SaveData(self):
Config.hide_hotkey = self.hide_show_text.GetValue()
Config.close_hotkey = self.close_text.GetValue()
Config.middle_button_hide = self.middle_button_checkbox.GetValue()
Config.side_button1_hide = self.side_button1_checkbox.GetValue()
Config.side_button2_hide = self.side_button2_checkbox.GetValue()

# 保存自动隐藏设置
Config.auto_hide_enabled = self.auto_hide_checkbox.GetValue()
Config.auto_hide_time = self.auto_hide_time.GetValue()

def Reset(self):
self.hide_show_text.SetValue("Ctrl+Q")
self.close_text.SetValue("Win+Esc")
self.middle_button_checkbox.SetValue(False)
self.side_button1_checkbox.SetValue(False)
self.side_button2_checkbox.SetValue(False)
self.auto_hide_checkbox.SetValue(False)
self.auto_hide_time.SetValue(5)
self.auto_hide_time.Enable(False)

def OnRecordHideShow(self, e):
self.recordHotkey(self.hide_show_text, self.hide_show_btn)
Expand Down
2 changes: 1 addition & 1 deletion main/GUI/setting/options_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ def OnRequestAdmin(self, e=None):
"""请求管理员权限并重启程序"""
wx.MessageBox("程序将重启并请求管理员权限", "提示", wx.OK | wx.ICON_INFORMATION)
run_as_admin()
wx.GetApp().GetTopWindow().Close()
wx.GetApp().ExitMainLoop()

def OnRedetectPssuspend(self, e=None):
"""重新检测pssuspend64.exe是否存在"""
Expand Down
27 changes: 22 additions & 5 deletions main/GUI/window_restore.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
import wx.dataview as dataview
import win32gui
import win32con
import win32process
import webbrowser
import psutil
from core import tools as tool
from core.model import WindowInfo
from core.config import Config
Expand Down Expand Up @@ -84,11 +86,26 @@ def SetData(self):
self.Layout()

def RefreshLeftList(self, e=None):
windows = tool.getAllWindows()
list = []
for window in windows:
list.append(window)
self.InsertTreeList(list, self.left_treelist, True)
def enumHandler(hwnd, windows):
title = tool.hwnd2windowName(hwnd)

pid = win32process.GetWindowThreadProcessId(hwnd)[1]
process_name = psutil.Process(pid).name()
process_path = psutil.Process(pid).exe()

windows.append(WindowInfo(
title=title,
hwnd=int(hwnd),
process=process_name,
PID=int(pid),
path=process_path
))
return True

windows = []
win32gui.EnumWindows(enumHandler, windows)
windows.sort(key=lambda x: x.title)
self.InsertTreeList(windows, self.left_treelist, True)

def on_refresh_window(self, e=None):
"""刷新窗口列表"""
Expand Down
17 changes: 16 additions & 1 deletion main/core/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@ class Config:
click_to_hide = True
hide_icon_after_hide = False
path_match = True
middle_button_hide = False # 新增:鼠标中键隐藏功能开关
side_button1_hide = False # 鼠标侧键1隐藏功能开关
side_button2_hide = False # 鼠标侧键2隐藏功能开关
auto_hide_enabled = False # 自动隐藏功能开关
auto_hide_time = 5 # 自动隐藏等待时间(分钟)

hide_binding = []

Expand Down Expand Up @@ -97,6 +102,11 @@ def load():
Config.path_match = config.get("setting", {}).get("path_match", False)
Config.freeze_after_hide = config.get("setting", {}).get("freeze_after_hide", False) # 加载新配置项
Config.enhanced_freeze = config.get("setting", {}).get("enhanced_freeze", False) # 加载新配置项
Config.middle_button_hide = config.get("setting", {}).get("middle_button_hide", False) # 加载鼠标中键隐藏设置
Config.side_button1_hide = config.get("setting", {}).get("side_button1_hide", False) # 加载鼠标侧键1隐藏设置
Config.side_button2_hide = config.get("setting", {}).get("side_button2_hide", False) # 加载鼠标侧键2隐藏设置
Config.auto_hide_enabled = config.get("setting", {}).get("auto_hide_enabled", False) # 加载自动隐藏功能开关
Config.auto_hide_time = config.get("setting", {}).get("auto_hide_time", 5) # 加载自动隐藏等待时间

Config.click_to_hide= config.get("setting", {}).get("click_to_hide", True)

Expand Down Expand Up @@ -128,7 +138,12 @@ def save():
'hide_icon_after_hide': Config.hide_icon_after_hide,
'path_match': Config.path_match,
'freeze_after_hide': Config.freeze_after_hide, # 保存新配置项
'enhanced_freeze': Config.enhanced_freeze # 保存新配置项
'enhanced_freeze': Config.enhanced_freeze, # 保存新配置项
'middle_button_hide': Config.middle_button_hide, # 保存鼠标中键隐藏设置
'side_button1_hide': Config.side_button1_hide, # 保存鼠标侧键1隐藏设置
'side_button2_hide': Config.side_button2_hide, # 保存鼠标侧键2隐藏设置
'auto_hide_enabled': Config.auto_hide_enabled, # 保存自动隐藏功能开关
'auto_hide_time': Config.auto_hide_time # 保存自动隐藏等待时间
},
# 将WindowInfo对象列表转换为字典列表用于JSON序列化
"hide_binding": [item.to_dict() if isinstance(item, WindowInfo) else item for item in Config.hide_binding]
Expand Down
Loading