代码之家  ›  专栏  ›  技术社区  ›  João Pereira

使用“pywinauto”(Windows XP)控制程序

  •  0
  • João Pereira  · 技术社区  · 12 年前

    我几乎是Python的新手,我开始使用模块“pywinauto”来控制我在论文中使用的程序。

    我做的每件事都是这样的: 从pywinauto导入应用程序

    prog=application.Application()
    prog.start_('RAMPlus.exe')
    prog.RAMPlus.MenuSelect('File->New')
    

    在这里之前一切都很好,但现在“新”窗口是这样的:

    screebshot of new window

    两张表,一张名为“左上角”,另一张名“右下角”。 每个表有两行“Lat:”和“Long:”,每行有3行。我需要修改每一行的值

    如果我尝试

    a.New.UpperLeftCombo.Click() 
    

    我收到消息“pywinauto.controls.win32_controls.StaticWrapper object at 0x013A9BF0>”,所以我认为“pywinautom”承认“左上角”和“右下角”,但其余的我不知道如何选择。

    有什么想法吗?

    附言:我在某个地方看到pywinauto的创建者,用户“markm”在这里回答问题。我可以在这篇文章中给他贴标签或类似的东西吗?这样他就可以看到了?我是新来的,所以不知道

    事先非常感谢您的帮助

    编辑:你知道我是否可以用pywinauto将窗口的全部内容复制到txt文件中吗?

    3 回复  |  直到 12 年前
        1
  •  0
  •   Luke Woodward    12 年前

    您可能无法直接在表中“选择”一行。pywinauto中不会有这样的方法 a.New.UpperLeftCombo.SelectRow() .

    您可以改为向表发送按键来选择一行,然后再选择它。例如,您可以使用向上和向下箭头键来选择一个行,然后按空格键来选择它 TypeKeys 方法 HwndWrapper 向控件发送按键。

        2
  •  0
  •   SWAPYAutomation    12 年前

    如果pywinauto是Windows ListView公共控件,那么它可以使用表。ListViewWrapper有足够的方法用于表: ColumnCount(), GetSelectedCount(), Select(item)

    我不确定您是否一直在使用表控件 a.New.UpperLeftCombo.Click() ,看起来 UpperLeftCombo 只是一些文字( pywinauto.controls.win32_controls.StaticWrapper object at 0x013A9BF0> ).

    尝试获取窗口的所有控件并查找 ListView 控制

    你可以用 a.New.print_control_identifiers() 或者最简单的方法是使用pywinauto的GUI工具之一。纯属偶然,我是其中一本书的作者。

        3
  •  0
  •   João Pereira    12 年前

    我正设法和斯比一起解决这个问题,所以这个问题就解决了。

    还有一个问题是,“pywinauto”和“swapy”在64位系统上不起作用吗?我有两个工作区,一个32位,一个64位,我真的很想在这两个工作空间工作