Как щелкнуть правой кнопкой мыши файл в проводнике Windows с помощью AutoIt - PullRequest
5 голосов
/ 12 марта 2012

Я хочу имитировать щелчок правой кнопкой мыши по файлу. Это можно сделать, открыв окно проводника 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();

Код скомпилирован в файл класса консоли, который запускается при запуске. Сценарий autoit запускается при открытии окна проводника.

Ответы [ 3 ]

8 голосов
/ 13 марта 2012

Кажется, что вы неправильно подходите к проблеме, поэтому я отвечу на то, что вы спрашиваете, и на то, что вы должны спрашивать.

Прежде всего, эта строка кода недопустима и тоже не то, что вам нужно. Вы хотите автоматизировать окно проводника, и RunWait ожидает завершения программы. Кроме того, вы хотите, чтобы эти элементы были строками, этот код никогда не будет работать.

Поиск предмета в проводнике

Окно проводника - это просто просмотр списка, поэтому вы можете использовать обычные сообщения просмотра списка, чтобы найти координаты элемента. Это проще всего сделать с помощью библиотеки GUIistView от AutoIt:

#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\.ext, где ext - расширение файла, значением по умолчанию будет имя другого ключа в HKCR, у которого есть действия и значок, связанный с типом файла. Это довольно хорошо задокументировано в Интернете, так что погуглите.

Если действие не является одним из действий программы (поэтому оно встроено в проводник), то оно немного сложнее. Обычно лучшим способом будет посмотреть диспетчер задач при запуске программы и посмотреть, что она запускает. Другие вещи могут быть найдены в Интернете, например (не) молнии. Такие действия, как копирование, удаление, переименование, создание ярлыка, отправка ... Все они могут быть выполнены непосредственно из AutoIt с помощью различных функций File *.

Имея больше информации, можно было бы оказать вам более конкретную помощь.

2 голосов
/ 13 марта 2012

Во-первых, вы можете посмотреть на Microsoft Active Accessibility SDK.В частности, посмотрите на этот интерфейс ...

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

Вы можете использовать это, чтобы просмотреть элементы в элементе управления и найти элемент с именем файла, который вы ищете, и его экран.location.

Оттуда, возможно, попробуйте что-то подобное для имитации щелчка правой кнопкой мыши.

Как я могу использовать автоматизацию для щелчка правой кнопкой мыши в Windows 7?

После того, как вы сделали правый клик, снова используйте доступность, чтобы найти нужную опцию в контекстном меню.

Может быть, есть более простой способ, вы должны быть в состоянии что-то сложить вместе, еслиВы не найдете ни одного.Удачи!

0 голосов
/ 28 марта 2014

Предположим, у меня есть файл с именем test.txt на диске D.Для открытия контекстного меню необходимо щелкнуть правой кнопкой мыши.Для этого должен работать следующий код:

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