我希望模拟右键单击文件。这可以通过打开Windows资源管理器窗口然后右键单击它来完成。
主要问题是在Windows资源管理器中查找文件的位置。我目前正在使用Autoit v3.3.8.1。
我的代码的第一行:
RunWait (EXPLORER.EXE /n,/e,/select,<filepath>)
下一步是问题所在。查找文件的坐标。 在那之后,右键点击那个坐标(在我看来这个时候)不是问题....
一些背景知识:
Autoit脚本由类似于下面的代码调用:
Process p = new Process();
p.StartInfo.FileName = "AutoItScript.exe";
p.StartInfo.UseShellExecute = false;
p.Start();
代码被编译成一个在启动时运行的控制台类文件。自动脚本在浏览器窗口打开时运行。
答案 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在大多数情况下都能胜任。这一切都取决于您要点击的项目。如果它是在各种程序中打开文件的前几个项目之一,那么它就像以下一样简单:
ShellExecute
,将动词参数设置为您想要执行的操作。HKCR\.ext
下ext
是文件扩展名,默认值是HKCR中具有与文件类型关联的操作和图标的另一个键的名称。这在网上很好地记录了,所以google it。如果操作不是程序操作之一(因此内置于资源管理器中),那么它会更复杂一些。通常,最好的方法是在启动程序时查看任务管理器并查看它运行的内容。其他东西可以在网上找到,例如(联合国)拉链。复制,删除,重命名,创建快捷方式,发送到...等操作都可以通过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}')