Чтобы ответить на этот вопрос для вашего класса SunAwtFrame
, вопрос слишком неясен. Но у вашего кода есть некоторые проблемы.
_WinWaitActivate()
с Sleep(15000)
не требуется, поскольку вы можете использовать WinWaitActive($sTitle, $sText, $iTimeout)
с тайм-аутом 15 секунд в качестве третьего параметра. & _
в конце строки. Используйте функцию, подобную _sendKeystrokesSeveralTimes()
, чтобы избежать таких длинных значений параметров. MouseMove()
, а затем MouseClick()
, выполнив MouseClick('left', 268, 363)
до целевой позиции мыши. Вот переработанная версия вашего кода:
#include-once
#include <IE.au3>
Global $sLogin = InputBox('Security Check', 'Enter your login', '')
Global $sPasswd = InputBox('Security Check', 'Enter your password.', '', '-')
Global $oIE = _IECreate('https://******************', 0, 0, 1, 1)
Global $oLinks = _IETagNameGetCollection($oIE, 'input')
Func _clickButtonRun()
For $oLink In $oLinks
If String($oLink.type) == 'button' And String($oLink.value) == 'RUN' Then
_IEAction($oLink, 'click')
ExitLoop
EndIf
Next
EndFunc
Func _sendKeystrokesSeveralTimes($sKey, $iHowOften = 1)
For $i = 1 To $iHowOften Step 1
Send($sKey)
Sleep(200) ; to increase the robustness wait a bit between each input/send
Next
EndFunc
_clickButtonRun()
_IELoadWait($oIE, 1000)
WinWaitActive('Oracle Fusion Middleware Forms Services', '', 15)
_sendKeystrokesSeveralTimes($sLogin)
_sendKeystrokesSeveralTimes('{TAB}')
_sendKeystrokesSeveralTimes($sPasswd)
_sendKeystrokesSeveralTimes('{TAB}')
_sendKeystrokesSeveralTimes('PROD9')
_sendKeystrokesSeveralTimes('{ENTER}')
WinWaitActive('My Window', '', 5)
_sendKeystrokesSeveralTimes('{TAB}')
_sendKeystrokesSeveralTimes('{DOWN}', 11)
_sendKeystrokesSeveralTimes('{UP}')
_sendKeystrokesSeveralTimes('{RIGHT}')
_sendKeystrokesSeveralTimes('{DOWN}', 4)
_sendKeystrokesSeveralTimes('{RIGHT}')
_sendKeystrokesSeveralTimes('{DOWN}', 2)
_sendKeystrokesSeveralTimes('{RIGHT}')
_sendKeystrokesSeveralTimes('{DOWN}', 5)
_sendKeystrokesSeveralTimes('{RIGHT}')
_sendKeystrokesSeveralTimes('{DOWN}', 4)
_sendKeystrokesSeveralTimes('{ENTER}')
_sendKeystrokesSeveralTimes('03/01/2019')
_sendKeystrokesSeveralTimes('{TAB}', 3)
MouseClick('left', 268, 363)
Можно также попробовать Повышение. Библиотека Python; который имеет эту возможность. Этой библиотекой главным образом пользуются для представления C++ Python, но можно использовать наоборот.
Хотя вызов C++ освобождает из Python, более нормально - можно назвать модуль Python от C++, в основном назвав Python intepreter и иметь его, выполняют источник Python. Это называют, встраивая
Кроме того, boost.python библиотека делает это очень легким.
Я не попытался непосредственно вызвать функции Python от C++, но здесь являюсь некоторыми альтернативными идеями...
Обычно легче назвать код C++ с высокоуровневого языка как Python, чем наоборот. Если Вы интересуетесь этим подходом, то Вы могли создать кодовую базу C++ и получить доступ к ней из Python. Вы могли или непосредственно использовать внешний API, обеспеченный Python [он должен быть описан где-нибудь в документах Python] или использовать инструмент как БОЛЬШОЙ ГЛОТОК для автоматизации C, ++-to-Python переносящего процесс.
В зависимости от того, как Вы хотите пользоваться библиотекой, Вы могли альтернативно создать сценарии Python, которые Вы называете от C++ с должностным лицом* функции.