如何用Python移除某个进程的所有窗口边框?
移除指定进程所有窗口边框的Python实现方案
要实现移除某个进程的所有窗口边框,你需要调用系统级的窗口管理API,不同平台的工具包有所差异,下面重点介绍Windows平台的实操方案:
核心工具包:pywin32
pywin32是Python调用Windows原生API的工具集,能直接操作窗口句柄、修改窗口样式,完全满足跨进程窗口修改需求。
步骤1:安装依赖
pip install pywin32
步骤2:实现代码
以下代码会枚举系统中所有顶层窗口,匹配目标进程PID后移除其所有窗口的边框:
import win32gui import win32api import win32con def get_window_pid(hwnd): """获取窗口所属进程的PID""" _, pid = win32gui.GetWindowThreadProcessId(hwnd) return pid def remove_border(hwnd): """移除单个窗口的边框""" # 获取当前窗口样式 style = win32gui.GetWindowLong(hwnd, win32con.GWL_STYLE) # 移除边框相关的样式位:普通边框、对话框边框、可调边框 new_style = style & ~(win32con.WS_BORDER | win32con.WS_DLGFRAME | win32con.WS_THICKFRAME) # 应用新样式 win32gui.SetWindowLong(hwnd, win32con.GWL_STYLE, new_style) # 刷新窗口以生效 win32gui.SetWindowPos(hwnd, None, 0, 0, 0, 0, win32con.SWP_NOMOVE | win32con.SWP_NOSIZE | win32con.SWP_FRAMECHANGED) def enum_windows_callback(hwnd, extra): """枚举窗口的回调函数,收集目标PID的窗口句柄""" target_pid, window_handles = extra if win32gui.IsWindowVisible(hwnd): # 只处理可见窗口 if get_window_pid(hwnd) == target_pid: window_handles.append(hwnd) return True def remove_process_all_borders(target_pid): """移除指定PID进程的所有窗口边框""" window_handles = [] # 枚举所有顶层窗口 win32gui.EnumWindows(enum_windows_callback, (target_pid, window_handles)) for hwnd in window_handles: remove_border(hwnd) # 示例:替换为你要处理的进程PID if __name__ == "__main__": target_pid = 12345 # 这里替换成目标进程的PID remove_process_all_borders(target_pid)
关键说明
- 窗口样式位:
WS_BORDER、WS_DLGFRAME、WS_THICKFRAME是控制窗口边框的核心样式位,通过按位取反并与原样式结合,就能移除这些属性。 - 权限问题:修改其他进程的窗口可能需要管理员权限,运行Python脚本时右键选择"以管理员身份运行"。
- 动态窗口:如果目标进程会动态创建新窗口,你可以添加一个循环,定期调用
remove_process_all_borders来处理新窗口。
其他平台参考
- Linux:可以使用
wmctrl命令行工具(通过subprocess调用),或者用xcffib直接操作X11 API枚举窗口并修改属性。 - macOS:借助
pyobjc调用Cocoa框架的API,通过NSWorkspace枚举窗口并修改样式。
内容的提问来源于stack exchange,提问作者TrungJ2655
相关产品推荐
相关产品推荐

