如何通过AutoIt在Windows资源管理器中右键单击File

时间:2012-03-12 13:31:08

标签: autoit right-click

我希望模拟右键单击文件。这可以通过打开Windows资源管理器窗口然后右键单击它来完成。

主要问题是在Windows资源管理器中查找文件的位置。我目前正在使用Autoit v3.3.8.1。

我的代码的第一行:

 RunWait (EXPLORER.EXE /n,/e,/select,<filepath>)

下一步是问题所在。查找文件的坐标。 在那之后,右键点击那个坐标(在我看来这个时候)不是问题....

一些背景知识:

  • 操作系统:Windows 7 64位
  • 软件语言:C#,Autoit(用于编写脚本)

Autoit脚本由类似于下面的代码调用:

Process p = new Process();
p.StartInfo.FileName = "AutoItScript.exe";
p.StartInfo.UseShellExecute = false;
p.Start();

代码被编译成一个在启动时运行的控制台类文件。自动脚本在浏览器窗口打开时运行。

3 个答案:

答案 0 :(得分:8)

好像你采取了错误的方法解决问题,所以我会回答你的问题和你应该问的问题。

首先,这行代码无效,也不是你想要的。您希望自动化资源管理器窗口,RunWait等待程序完成。此外,您希望这些项目成为字符串,代码永远不会起作用。

在资源管理器中查找项目

资源管理器窗口只是一个列表视图,因此您可以使用常规列表视图消息来查找项目的坐标。这最简单地通过AutoIt的GUIListView库完成:

#include<GUIListView.au3>

Local $filepath = "D:\test.txt"

Local $iPid = Run("explorer.exe /n,/e,/select," & $filepath)
ProcessWait($iPid)

Sleep(1000)

Local $hList = ControlGetHandle("[CLASS:CabinetWClass]", "", "[CLASS:SysListView32; INSTANCE:1]")

Local $aClient = WinGetPos($hList)
Local $aPos = _GUICtrlListView_GetItemPosition($hList, _GUICtrlListView_GetSelectedIndices($hList))

MouseClick("Right", $aClient[0] + $aPos[0] + 4, $aClient[1] + $aPos[1] + 4)

正如已经提到的,发送菜单键肯定是比移动鼠标更好的方法。

直接执行子项目

这是应该怎么做的。理想情况下,您根本不需要打开资源管理器窗口,所有内容都可以在后台自动完成。这应该始终是您的目标,因为AutoIt在大多数情况下都能胜任。这一切都取决于您要点击的项目。如果它是在各种程序中打开文件的前几个项目之一,那么它就像以下一样简单:

  1. 使用ShellExecute,将动词参数设置为您想要执行的操作。
  2. 检查注册表以查找程序使用的确切命令行。为此,您需要查看HKCR\.extext是文件扩展名,默认值是HKCR中具有与文件类型关联的操作和图标的另一个键的名称。这在网上很好地记录了,所以google it。
  3. 如果操作不是程序操作之一(因此内置于资源管理器中),那么它会更复杂一些。通常,最好的方法是在启动程序时查看任务管理器并查看它运行的内容。其他东西可以在网上找到,例如(联合国)拉链。复制,删除,重命名,创建快捷方式,发送到...等操作都可以通过AutoIt直接使用各种File *函数完成。

    有了更多信息,就可以为您提供更具体的帮助。

答案 1 :(得分:2)

首先,您可能需要查看Microsoft Active Accessibility SDK。特别要看这个界面...

http://msdn.microsoft.com/en-us/library/accessibility.iaccessible.aspx

您可以使用它来遍历控件中的项目,找到您要查找的文件名及其屏幕位置。

从那里开始,可以尝试这样的模拟右键单击。

How can I use automation to right-click with a mouse in Windows 7?

完成右键单击后,再次使用辅助功能在上下文菜单中找到正确的选项。

也许有一种更简单的方法,如果你找不到,你应该能够像这样拼凑一些东西。祝你好运!

答案 2 :(得分:0)

假设我在D驱动器上有一个名为test.txt的文件。需要右键单击才能打开上下文菜单。为此,以下代码应该起作用:

Local $filepath = "D:\test.txt"
Local $iPid = Run("explorer.exe /n,/e,/select," & $filepath)
ProcessWait($iPid)
Sleep(1000)
Send('+{F10}')