最近在开发一个软件,要对外界软件进行嵌套。既然要get到打开的窗口,就要得到窗口的句柄以及类名等信息进行锁定。Spy++就是一个 窗口、消息查看分析利器。但是一般都是从Visual Studio套件中打开。我懒得安装那个笨重的东西了,好在有独立版本,很轻很爽。
Spy++是一种开发工具,用于在Windows操作系统上检查和调试应用程序的窗口消息、消息队列、线程和窗口层次结构。它可以帮助开发人员查看和监视Windows程序的内部运行情况,例如窗口的属性、消息传递流程和线程信息等。Spy++是微软Visual Studio套件的一部分,提供了强大的窗口调试和分析功能。
现在有一个独立文件版本。特此分享,也是一种备份吧。
点击spyxx.exe
后,就可以去找自己想要操作的软件了。例如我打开Design X软件:
win32gui库也可以获得。但是没有spy++详细和专业。可以凑活着使用:
import win32gui
class WindowEnumerator:
def __init__(self):
self.myhwnd = win32gui.GetForegroundWindow() # 获取当前窗口的句柄
self.windowList = []
def enum_windows(self):
win32gui.EnumWindows(self._enum_windows_callback, None)
def _enum_windows_callback(self, hwnd, _):
"""遍历回调函数"""
if hwnd == self.myhwnd:
return # 防止自己嵌入自己
if win32gui.IsWindow(hwnd) and win32gui.IsWindowVisible(hwnd) and win32gui.IsWindowEnabled(hwnd):
phwnd = win32gui.GetParent(hwnd)
title = win32gui.GetWindowText(hwnd)
name = win32gui.GetClassName(hwnd)
window_info = {'HWND': hwnd, 'PHWND': phwnd, 'Title': title, 'Name': name}
self.windowList.append(window_info)
print("HWND:", hwnd, " PHWND:", phwnd, " Title:", title, " Name:", name)
def main():
enumerator = WindowEnumerator()
enumerator.enum_windows()
if __name__ == "__main__":
main()
运行效果如下: