Что нового

[Автоматизация] Получить состояние statusbar

MKZ

Новичок
Сообщения
2
Репутация
0
Всем привет. Я новичок в AutoIt. Столкнулся с проблемой. Пишу код, который за меня будет делать пару процессов. Сами процессы я настроил и запустил, теперь мне нужно отслеживать состояние statusbar и когда 100% то скопировать файлы на FTP. Так вот и не могу получить эту циферку(сколько %). StatusbarGetText - пробовал, программа Au3Info.exe никакой инфы не дает.
Подскажите, как можно поступить?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
приведи код, который нужно править и за какой программой следит твой код?
 

inx

Знающий
Сообщения
43
Репутация
12
Вот такое:
Код:
Const $WM_USER = 0x400
Const $PBM_GETPOS = ($WM_USER+8)
$h_progress = ControlGetHandle("Form1","","msctls_progress321")
$ret = DllCall("user32.dll","int","SendMessage","hwnd",$h_progress,"int",$PBM_GETPOS,"int",0,"int",0)
MsgBox(0,"Процентов",$ret[0])


Вроде как вылавливает проценты вот в таком:
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Form1", 747, 70, 192, 148)
$Progress1 = GUICtrlCreateProgress(128, 24, 598, 17)
$start = GUICtrlCreateButton("Start", 8, 8, 107, 49)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $start
        For $i = 1 To 100 step 1
        GUICtrlSetData($Progress1, $i)
        Sleep(50)
        Next
        Case $GUI_EVENT_CLOSE
            Exit

    EndSwitch
WEnd


Но проверил на попавшемся под руку 7-Zip, там какие-то непонятные проценты по 767% при работе архиватора и 0% на паузе...

Как вариант еще можно использовать ControlGetPos на прогресс баре, затем PixelGetColor чтобы узнать когда дойдет до нужного значения.
 
Автор
M

MKZ

Новичок
Сообщения
2
Репутация
0
Код у меня детский, т.е. хожу по объектам и тыкаю на клавиши. основная команда Send("{TAB}") и Send("{ENTER}") Программа, которую я отслеживаю, вряд ли у вас найдется (ПК ИС ЕГРП)
Код:
WinWait("  Обмен сведениями ЕГРП со сторонними организациями ([email protected]/SSD)","Поиск выгруженных данных")
For $i = 1 To 9
   Send("{TAB}")
   Sleep(500)
Next
For $i = 1 To 22
   Send("{UP}")
   Sleep(200)
Next
For $i = 1 To 20
   Send("{DOWN}")
   Sleep(200)
Next

Send("{TAB}")
Sleep(200)
Send("{TAB}")
Sleep(200)
;~ ++++++++++++++++++++++++++++++++++++++ Выясняем какие даты проставлять ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;если февраль
if @MON == '02' Then
   $maxDay = 28
EndIf
;если месяц с 30-ью днями
if (@MON == '04') Or (@MON == '06') Or (@MON == '09') Or (@MON == '11') Then
   $maxDay = 30
EndIf
;если месяц с 31-им днем
if (@MON == '01') Or (@MON == '03') Or (@MON == '05') Or (@MON == '07') Or (@MON == '08') Or (@MON == '10') Or (@MON == '12') Then
   $maxDay = 31
EndIf
;теперь надо проверить соответствие месяца, maxDay и текущей
Dim $fDay, $fMon, $fYear ;переменные из которых будем собирать дату начала выгрузки
;~ берем предыдущий день
$fDay = @MDAY-1
;~ для февраля проверяем maxDay (он должен быть 28, тогда это февраль)
;~ и $fDay должен быть не равен 0, т.к. это говорит о начале нового месяца, поэтому нужно установить предыдущий месяц и последнее число этого месяца
If ($maxDay == '28') And ($fDay = '0') Then
   $fDay = '28'
   $fMon = '0'&@MON - 1
   $fYear = @YEAR
Else
   $fDay = @MDAY-1
   $fMon = @MON
   $fYear = @YEAR
EndIf
;~ для месяца у которого 30 дней, проверяем maxDay (он должен быть 30)
;~ и $fDay должен быть не равен 0, т.к. это говорит о начале нового месяца, поэтому нужно установить предыдущий месяц и последнее число этого месяца
If ($maxDay == '30') And ($fDay = '0') Then
   $fDay = '30'
   $fMon = '0'&@MON - 1
   $fYear = @YEAR
Else
   $fDay = @MDAY-1
   $fMon = @MON
   $fYear = @YEAR
EndIf
;~ для месяца у которого 31 день, проверяем maxDay (он должен быть 31)
;~ и $fDay должен быть не равен 0, т.к. это говорит о начале нового месяца, поэтому нужно установить предыдущий месяц и последнее число этого месяца
If ($maxDay == '31') And ($fDay = '0') Then
   $fDay = '31'
   $fMon = '0'&@MON - 1
   $fYear = @YEAR
Else
   $fDay = @MDAY-1
   $fMon = @MON
   $fYear = @YEAR
EndIf
;~ ++++++++++++++++++++++++++++++++++++++++ Начальная дата экспорта $fDay&'.'&$fMon&'.'&$fYear +++++++++++++++++++++++++++++++++++++++++++++
;~ конечная дата будет текущей
;~ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;устанавливаем начальную дату
Sleep(500)
Send($fDay)
Sleep(500)
Send("{RIGHT}")
Sleep(500)
Send($fMon)
Sleep(500)
Send("{RIGHT}")
Sleep(500)
Send($fYear)

ControlClick("  Обмен сведениями ЕГРП со сторонними организациями ([email protected]/SSD)","Поиск выгруженных данных","WindowsForms10.STATIC.app.0.202c6663")
;добираемся до кнопки и начинаем экспорт
For $i = 1 To 7
   Send("{TAB}")
   Sleep(200)
Next
Sleep(500)
Send("{ENTER}")


И в этом же окне появляется StatusBar, который и нужно отслеживать.
Пока код вот такой :shok:ops:, т.к. надо срочно... потом планирую все переделать через Control
 
Верх