在 IronPython 中编写一些测试脚本,我想验证一个窗口是否显示。我有主应用程序进程的 pid,并且想要获取与 pid 相关的窗口标题列表。
我试图避免使用诸如 FindWindowEx 之类的 win32api 调用,因为(据我所知)您无法直接从 IronPython 访问 win32api。有没有办法使用内置的 .net 类来做到这一点?我遇到的大多数东西都建议使用 win32api,如下所示。
更新:我找到了解决我想做的事情的方法。下面回答。
在 IronPython 中编写一些测试脚本,我想验证一个窗口是否显示。我有主应用程序进程的 pid,并且想要获取与 pid 相关的窗口标题列表。
我试图避免使用诸如 FindWindowEx 之类的 win32api 调用,因为(据我所知)您无法直接从 IronPython 访问 win32api。有没有办法使用内置的 .net 类来做到这一点?我遇到的大多数东西都建议使用 win32api,如下所示。
更新:我找到了解决我想做的事情的方法。下面回答。
从 IronPython 2.6 开始,支持ctypes模块。该模块提供 C 兼容的数据类型,并允许调用 DLL 中的函数。快速示例:
import ctypes
buffer = ctypes.create_string_buffer(100)
ctypes.windll.kernel32.GetWindowsDirectoryA(buffer, len(buffer))
print buffer.value
下面的文章展示了如何从 IronPython 间接访问 win32api。它使用 CSharpCodeProvider CompileAssemblyFromSource 方法从提供的 C# 源代码字符串编译内存中的程序集。IronPython 然后可以导入程序集。
这就像问你是否可以在不下水的情况下游泳。如果您需要来自 Windows 的信息,唯一的选择是使用 win32api。有很多关于如何做到这一点的例子。
如果您不喜欢这个答案,只需在您的问题中留下评论,我将删除此答案,因此您的问题将保留在未回答的问题列表中。