Python编程。访问Windows右键菜单选项

时间:2010-12-22 07:02:20

标签: python ui-automation

我希望在工作中自动完成一些任务。其中之一是将功率点文件组合并转换为PDF。我是一个新手(我刚刚完成了Magus Heitland的Beginning Python),所以我不完全确定我特别要问的是什么。

在Windows上,可以选择多个文件,右键单击,然后选择组合为adobe PDF。我已经想出了我要转换的文件的“分组”(我遍历dir并根据名称将文件嵌入到列表中),但我不确定如何继续下一步(右键单击/结合命令)。

谷歌搜索引领我走向像win32api,pywinauto和ctypes这样的东西。但当我读到他们做了什么时,我的新手会阻止我知道哪个是我需要的工具。

任何人都可以建议一些好的资源或提示吗?

3 个答案:

答案 0 :(得分:3)

这个问题没有简单的答案。在Windows中,上下文菜单条目由上下文菜单shell扩展创建,这是一种shell扩展,它是在Windows资源管理器中注册的COM组件。要在一组文件上调用任意上下文菜单条目,必须执行以下操作:

  1. 获取包含文件的shell文件夹的IShellFolder接口。
  2. 使用IShellFolder::GetUIObjectOf获取该shell文件夹的上下文菜单处理程序对象。传递一个填写了所选文件列表的ITEMIDLIST,并riid = IContextMenu
  3. 调用IContextMenu::InvokeCommand以对文件组执行所需的命令。
  4. 所有这些都可以在Python中实现(通过ctypeswin32com),但我认为最好从直接支持COM的语言(如C ++)开始,一旦你转换为Python让它工作......或使用不同的方法。


    编辑如果您完全控制执行环境,那么模拟用户输入(键盘和鼠标)可能就足够了。在Python中更容易做到。您只需要一个系统功能:SendInput。快速谷歌搜索显示了通过ctypes here使用SendInput的示例。

答案 1 :(得分:1)

您希望在单击Combine时确切查找运行的命令行等效项,假设它是c:\program files\adobe\combiner ...。您希望构建此字符串(文件列表为...)并执行它。 subprocess模块中的Popen会这样做。

import subprocess
cmd = [r"c:\program files\adobe\combiner"]
cmd.extend(file_list)
p = subprocess.Popen(cmd)

查看该链接虽然,Popen需要很多参数,这只是最简单的形式。不知道参数是否在列表中,但它们在我见过的例子中。

答案 2 :(得分:0)

如果您只是在寻找一个简单的解决方案,您可以自定义一个“发送到...”右键单击快捷方式,该快捷方式将使用要转换的文件的命令行参数调用您的python脚本。

要添加“发送到”快捷方式,它取决于您使用的是Windows 7还是32位先前版本。有指示HERE可添加自定义“发送到...”快捷方式。您可以将所有文件发送到单个文件夹并调用您的python脚本或使用所选文件作为命令行参数调用它。

Send To Toys适用于64位。使用Send To Toys,您可以在右键单击时将python脚本和所有shell转义文件名放在剪贴板上,然后将构造的命令粘贴到shell中。我经常使用这种方法,因为构建它只需要几秒钟。

您还可以通过tweeking注册表来添加右键快捷方式,以调用shell命令(您的python脚本),并将所选文件作为目标。您可以手动调整注册表或使用RightClick Extender等内容。

还有一点工作,您可以编写自定义ContextMenu Class form并以.NET语言响应表单。这将包括C#或Ironpython。

如果您真的想要Pro类型的实现,可以修改Image Resizer的新开源版本的源代码。上下文菜单处理程序的c ++源是here。但最后两个建议似乎比需要更多的工作......