【问题标题】:How to use win32api from IronPython如何使用 IronPython 的 win32api
【发布时间】:2010-09-12 18:39:19
【问题描述】:

在 IronPython 中编写一些测试脚本,我想验证一个窗口是否显示。我有主应用程序进程的 pid,并且想要获取与 pid 相关的窗口标题列表。

我试图避免使用 win32api 调用,例如 FindWindowEx,因为(据我所知)您无法直接从 IronPython 访问 win32api。有没有办法使用内置的 .net 类来做到这一点?我遇到的大多数东西都建议使用 win32api,如下所示。

.NET (C#): Getting child windows when you only have a process handle or PID?

更新:我找到了一种解决方法来解决我正在尝试做的事情。下面回答。

【问题讨论】:

    标签: c# winapi ironpython


    【解决方案1】:

    从 IronPython 2.6 开始,支持 ctypes 模块。该模块提供 C 兼容的数据类型,并允许调用 DLL 中的函数。快速示例:

    import ctypes
    buffer = ctypes.create_string_buffer(100)
    ctypes.windll.kernel32.GetWindowsDirectoryA(buffer, len(buffer))
    print buffer.value
    

    【讨论】:

      【解决方案2】:

      下面的文章展示了如何从 IronPython 间接访问 win32api。它使用 CSharpCodeProvider CompileAssemblyFromSource 方法从提供的 C# 源代码字符串编译内存中的程序集。 IronPython 然后可以导入程序集。

      Dynamically compiling C# from IronPython

      【讨论】:

        【解决方案3】:

        这就像问你是否可以在不下水的情况下游泳。如果您需要来自 Windows 的信息,唯一的选择是使用 win32api。有很多关于如何做到这一点的例子。

        如果您不喜欢此答案,请在您的问题中发表评论,我会删除此答案,因此您的问题将保留在未回答的问题列表中。

        【讨论】:

          猜你喜欢
          • 2023-03-14
          • 1970-01-01
          • 2010-12-27
          • 2011-03-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多