Запуск quik, авторизация, включение экспорта и т.д. с AmiSharp
Как в случае использования AmiSharp автоматически запустить терминал QUIK, авторизоваться, включить DDE экспорт, проверить наличие связи и остальное?
В качестве примера - фрагмент реального скрипта. В нем используется некоторое количество функций, которые здесь не приведены. Названия этих функций говорят сами за себя, не составит труда их написать.
procedure StartDDE(path)
{
mutant.SendKeysByClass(path + "info.exe","^~S^~L","InfoClass");
}
// Подготовка к работе
function Initialize()
{ local Can_Start;
// Нормализуем каталог QUIK - удаляем info.exe, если есть и добавляем конечный слеш
if (StrToLower(StrRight(QUIK_Path,8)) == "info.exe")
QUIK_Path = StrLeft(QUIK_Path,StrLen(QUIK_Path)-8);
if (StrRight(QUIK_Path,1) != "\\")
QUIK_Path += "\\";
// Запускаем Quik. Запускаем его только один раз
Can_Start = mutant.IsProcessStarted(QUIK_Path + "info.exe") == "1";
if (!Can_Start AND StaticVarGetText("AttemtToStartQUIK") != "Yes")
{ StaticVarSetText("AttemtToStartQUIK","Yes");
write_log("Запуск терминала QUIK");
if (mutant.StartProcess(QUIK_Path + "info.exe",QUIK_Path) != "1")
error(mutant.GetErrorName());
}
// Идентифицируемся, если известны пароль и логин
if (QUIK_Login != "" AND QUIK_Password != "" AND mutant.IsWindowExists(QUIK_Path + "info.exe","Идентификация пользователя") == "1")
{ write_log("Идентификация QUIK");
mutant.SendKeysByTitle(QUIK_Path + "info.exe", QUIK_Login+"{TAB}"+QUIK_Password+"{ENTER}", "Идентификация пользователя");
}
// Проверка связи Trans2Quik.dll и квика
if (Can_Start)
if (mutant.QuikIsDLLConnected() == "0")
{ write_log("Подключаем Trans2Quik");
if (mutant.QuikConnect(QUIK_Path) == "0")
{ error(mutant.GetErrorName());
Can_Start = False;
}
}
// Проверка связи с сервером
if (Can_Start AND mutant.QuikIsConnected() == "0")
{ error("Нет соединения с брокером");
Can_Start = False;
}
// Загружаем таблицы, экпортируемые по DDE
if (Can_Start)
if (mutant.IsTableExists(TTP_Table) == "0")
{ error("Отсутствует экспорт таблицы текущих параметров " + TTP_Table+ " по DDE");
write_log("Включаем трансляцию DDE");
StartDDE(QUIK_Path);
Can_Start = False;
}
return Can_Start;
}
Can_Start = mutant.IsProces sStarted(QUIK_F ile) == "1";
Я имею в виду == "1"
Данный текст доступен только зарегистрирован ным пользователям
Can_Start = mutant.IsProces sStarted(QUIK_F ile) == "1";
Думал сначала, что из-за == "1", но потом проверил и просто:
mutant.IsProces sStarted(QUIK_F ile);
тоже всегда возвращается "0"
При этом:
QUIK_Path = "C:\\QUIK-Junior";
QUIK_Path += "\\";
QUIK_File = QUIK_Path + "info.exe";
и при этом строчка запуска QUIK работает нормально, QUIK запускается:
mutant.StartProcess(QUIK_File,QUIK_Path);
Вообще не знаю, может лучше перенести мой вопрос отсюда в форум?
m = createstaticobject("amisharp.mutant")
_trace(m.isprocessstarted("c:\\windows\\notepad.exe");
и посмотрите, что он выводит в окно трассировки при запущенном и незапущенном нотепаде.
Я столкнулся с тем, что все методы AmiSharp работают, например отправляются заявки и считываются значения из таблиц, а два метода нет: IsProcessStarte d и IsWindowExists
mutant=create...
_trace(...)
_trace(...)
Видимо проблема с путями к файлам. Возможно, что из-за того, что на виртуальной машине они реально лежат не на диске С... там вообще вся файловая система эмулируется и находится внутри одного файла, которым управляет Parallels.
Можно как-то в отладчике или еще как (у меня стоит Microsoft Studio) посмотреть как выглядят пути у запущенных в системе процессов? Я так понимаю, что если я укажу чуть по-другому путь к процессу (exe-файлу), то он совпадет с тем, что запущен и метод IsProcessStarte d вернет правильное значение.
technet.microsoft.com/en-US/sysinternals/bb896653
Подскажите пожалуйста.
Как из Amibrokera выключить quik?
И Можно ли из программы запустить выключение Amibrokera? Может быть запустить какой либо Bat файл?
С уважением, Александр.
While 1 = WinClose("[CLAS S:InfoClass]", "")
WEnd
Функция WinСlose(или аналогичная, закрывающая окно по его классу) найдется в любом нормальном языке
Можно то же самое сделать через sendKeys (в том числе из амишарпа - послав {Alt}СК русские, но это менее надёжно.
Замечательный пример.
А как это будет без использования Autoit?
Если конечно Вам не трудно написать.
С уважением, Александр.
amisharp.SendKeysByClass("c:\\quik\\info.exe","@{F4}","InfoClass")
Проверьте.....
Не получилось закрыть quik такой командой.
Вышел из положения виндовыми средствами.
В планировщике задач в 00:05 запускаю программу закрытие всех программ. В 00:10 запускаю команду выключить комп. Все работает как часы))))
RSS лента комментариев этой записи