Автор Тема: [Автоматизация] Автоматизация запуска программы (ToolbarWindow32, в фоне)1000р  (Прочитано 956 раз)

0 Пользователей и 1 Гость просматривают эту тему.

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

Оффлайн Ник_С [?]

  • Новичок
  • *
  • Сообщений: 8
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Добрый день, имеется задача запустить приложение и нажать на нем одну единственную кнопку.
У меня получилось это сделать только через курсор мышки. Необходимо нажатие программно...У меня получилось только таким образом.

$file='C:\Users\User\Desktop\abby\123.xls'
$sTitle = 'ABBYY Hot Folder' ;заголовок окна

$sFileExe = 'C:\Program Files\ABBYY FineReader 14' ;полный путь к exe-файлу
Run($sFileExe & "\HotFolder.exe")

WinWaitActive($sTitle)

MouseClick("left", 200, 75)
MouseClick("left", 200, 30)

For $i = 5 To 1 Step -1
 $i=5
  If FileExists($file) Then
   Sleep (2000)
   Send("!+{F4}",0)
   $i = 1
   EndIf
Next

Далее закрываю по необходимому условию через alt+f4. Подскажите как запустить данную программу в скрытом виде, и нажатие нужной кнопки не через курсор. Сама кнопка находится на тулбаре. Window info выдает информацию что это элемент ToolbarWindow32. Имеется Command ID кнопки которую хочу нажать = 41157. В информационном окне Window info он отображается на вкладке toolbar. И как закрыть окно приложения не через alt+f4.
« Последнее редактирование: Июнь 13, 2018, 20:14:30 от Ник_С »

Русское сообщество AutoIt


Оффлайн mr.Gbabak [?]

  • Новичок
  • *
  • Сообщений: 202
  • Репутация: 18
  • Пол: Мужской
    • Награды
команды Controlclik работают?
Закрыть процесс через ProcessClose ( "process" ), где process - это имя или PID процесса для завершения.

Оффлайн Ник_С [?]

  • Новичок
  • *
  • Сообщений: 8

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Пытался через controlclick, но видимо чего то не учел. У меня не получилось (
Буду благодарен помощи!

Оффлайн Tempo [?]

  • Продвинутый
  • ***
  • Сообщений: 404
  • Репутация: 93
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Пробуйте
Код: AutoIt [Выделить]
$file = 'C:\Users\User\Desktop\abby\123.xls'
$sTitle = 'ABBYY Hot Folder' ;заголовок окна

$sFileExe = 'C:\Program Files\ABBYY FineReader 14' ;полный путь к exe-файлу
Run($sFileExe & "\HotFolder.exe")

Local $hWnd = WinWaitActive($sTitle)
ControlCommand($hWnd, "", "[CLASS:ToolbarWindow32]", "SendCommandID", 41157) ;[CLASS:ToolbarWindow32; INSTANCE:??]

Do
    Sleep(10)
Until FileExists($file)
Sleep(2000)
WinClose($hWnd)
 

« Последнее редактирование: Июнь 07, 2018, 22:03:20 от Tempo »

Русское сообщество AutoIt

Re: [Автоматизация] Автоматизация запуска программы
« Ответ #3 Отправлен: Июнь 07, 2018, 21:39:59 »

Оффлайн Ник_С [?]

  • Новичок
  • *
  • Сообщений: 8

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Спасибо за помощь. Но нажатие кнопки все равно не отрабатывает. В коде instance ставил после двоеточия значения 2. Не помогло. Выложу скриншоты WinIfo



Добавлено: Июнь 08, 2018, 13:18:55


Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться
« Последнее редактирование: Июнь 08, 2018, 13:18:55 от Ник_С, Причина: Объединение сообщений »

Оффлайн Tempo [?]

  • Продвинутый
  • ***
  • Сообщений: 404
  • Репутация: 93
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Ник_С  [?]
Цитировать
коде instance ставил после двоеточия значения 2

Так?
Код: AutoIt [Выделить]
$file = 'C:\Users\User\Desktop\abby\123.xls'
$sTitle = 'ABBYY Hot Folder' ;заголовок окна

$sFileExe = 'C:\Program Files\ABBYY FineReader 14' ;полный путь к exe-файлу
Run($sFileExe & "\HotFolder.exe")

Local $hWnd = WinWaitActive($sTitle)
ControlCommand($hWnd, "", "[CLASS:ToolbarWindow32; INSTANCE:2]", "SendCommandID", 41157)

Do
    Sleep(10)
Until FileExists($file)
Sleep(2000)
WinClose($hWnd)
 



Добавлено: Июнь 08, 2018, 14:38:35
Вариант с ControlClick
(нажмите для показа/скрытия)
« Последнее редактирование: Июнь 08, 2018, 14:50:38 от Tempo »

Оффлайн Ник_С [?]

  • Новичок
  • *
  • Сообщений: 8

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Спасибо тебе огромное Дружище! ! ! Кнопка нажимается программно)) Как я и хотел! ! ! :laugh:(Нижний код) Одна часть задачи работает, правда выход из программы не работает в этом коде, но это мелочь, это я смогу исправить. Теперь осталось подумать, можно ли сделать так что бы программа запускалась в фоновом режиме.  :think: Буду рад помощи и предложениям! Всем кто откликнулся, тоже спасибо за помощь!

Оффлайн Ник_С [?]

  • Новичок
  • *
  • Сообщений: 8

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Немогу решить данную часть задачи, именно запуск в фоновом режиме и нажатие кнопки в этом же режиме.
Готов оплатить данную задачу (1000р)
P.s я так понимаю данная тема должна переместиться в другой раздел.
« Последнее редактирование: Июнь 13, 2018, 20:15:08 от Ник_С, Причина: Уточнение »

Русское сообщество AutoIt


Оффлайн Ник_С [?]

  • Новичок
  • *
  • Сообщений: 8

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Задача выполнена и тема закрыта. Огромное спасибо Tempo, его усилиями взлетел скрипт так как я и хотел изначально. Честно заработанная тысяча будет так же отправлена в ближайшее время) Работающий код выкладываю ниже

#include <GUIToolbar.au3>
Local $sFile = "C:\Users\User\Desktop\abby\123.xls"
Local $sTitle = "[TITLE:ABBYY Hot Folder; CLASS:HotFolder14MainWindow]"
Local $iCommandID = 41157

Local $sExe = "HotFolder.exe"
Local $sPathExe = @ProgramFilesDir & "\ABBYY FineReader 14"

Local $aProcList = ProcessList($sExe)
If Not @error Then
    For $i = 1 To $aProcList[0][0]
        ProcessClose($aProcList[$i][1])
    Next
EndIf
Local $iPID = Run($sPathExe & "\" & $sExe, "", @SW_HIDE)

Local $hWnd = WinWait($sTitle), $hToolbar, $hListView
Do
    Sleep(10)
    $hListView = ControlGetHandle($hWnd, "", "[CLASS:SysListView32; INSTANCE:1]")
Until $hListView And ControlCommand($hWnd, "", $hListView, "IsEnabled")
Do
    Sleep(10)
    $hToolbar = ControlGetHandle($hWnd, "", "[CLASS:ToolbarWindow32; INSTANCE:2]")
Until $hToolbar And ControlCommand($hWnd, "", $hToolbar, "IsEnabled")
ControlListView($hWnd, "", $hListView, "Select", 0, ControlListView($hWnd, "", $hListView, "GetItemCount", 0) - 1)
Local $tRect = _GUICtrlToolbar_GetButtonRectEx($hToolbar, $iCommandID)
Local $tPoint = _WinAPI_PointFromRect($tRect)
ControlClick($hWnd, "", $hToolbar, "left", 1, $tPoint.X, $tPoint.Y)

Do
    Sleep(10)
Until FileExists($sFile)
Sleep(2000)
ProcessClose($iPID)

Оффлайн Ник_С [?]

  • Новичок
  • *
  • Сообщений: 8

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
В предыдущем сообщение, см. выше


Добавлено: Июнь 14, 2018, 23:56:46
Попрошу Tempo выложить, поставлю как лучшее сообщение!

Помечен как лучший ответ пользователем Ник_С Отправлен Июнь 15, 2018, 19:29:23

Оффлайн Tempo [?]

  • Продвинутый
  • ***
  • Сообщений: 404
  • Репутация: 93
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Код: AutoIt [Выделить]
#include <GUIToolbar.au3>
Local $sFile = "C:\Users\User\Desktop\abby\123.xls"
Local $sTitle = "[TITLE:ABBYY Hot Folder; CLASS:HotFolder14MainWindow]"
Local $iCommandID = 41157

Local $sExe = "HotFolder.exe"
Local $sPathExe = @ProgramFilesDir & "\ABBYY FineReader 14"

Local $aProcList = ProcessList($sExe)
If Not @error Then
    For $i = 1 To $aProcList[0][0]
        ProcessClose($aProcList[$i][1])
    Next
EndIf
Local $iPID = Run($sPathExe & "\" & $sExe, "", @SW_HIDE)

Local $hWnd = WinWait($sTitle), $hToolbar, $hListView
Do
    Sleep(10)
    $hListView = ControlGetHandle($hWnd, "", "[CLASS:SysListView32; INSTANCE:1]")
Until $hListView And ControlCommand($hWnd, "", $hListView, "IsEnabled")
Do
    Sleep(10)
    $hToolbar = ControlGetHandle($hWnd, "", "[CLASS:ToolbarWindow32; INSTANCE:2]")
Until $hToolbar And ControlCommand($hWnd, "", $hToolbar, "IsEnabled")
ControlListView($hWnd, "", $hListView, "Select", 0, ControlListView($hWnd, "", $hListView, "GetItemCount", 0) - 1)
Local $tRect = _GUICtrlToolbar_GetButtonRectEx($hToolbar, $iCommandID)
Local $tPoint = _WinAPI_PointFromRect($tRect)
ControlClick($hWnd, "", $hToolbar, "left", 1, $tPoint.X, $tPoint.Y)

Do
    Sleep(10)
Until FileExists($sFile)
Sleep(2000)
ProcessClose($iPID)
 


Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
35 Ответов
31584 Просмотров
Последний ответ Сентябрь 01, 2018, 03:50:09
от Tarasipak
5 Ответов
4276 Просмотров
Последний ответ Ноябрь 09, 2012, 07:31:31
от Booster
3 Ответов
3056 Просмотров
Последний ответ Апрель 12, 2013, 11:52:56
от antikos89
5 Ответов
3653 Просмотров
Последний ответ Май 22, 2013, 23:44:35
от WSWR
0 Ответов
1332 Просмотров
Последний ответ Июнь 23, 2013, 18:40:49
от stormovik
7 Ответов
1780 Просмотров
Последний ответ Декабрь 09, 2014, 17:30:21
от InnI
0 Ответов
922 Просмотров
Последний ответ Январь 24, 2017, 11:38:19
от nitsik
0 Ответов
289 Просмотров
Последний ответ Декабрь 16, 2017, 23:50:40
от lixar21
4 Ответов
477 Просмотров
Последний ответ Апрель 27, 2018, 14:11:39
от joiner