mindtester
@mindtester
https://www.youtube.com/watch?v=Dn9_ogWhk9s

Кто знает примеры внешней автоматизации стандартных виндовых диалогов File Open/File Save из C#?

subj собственно, прошу подкинуть примеров, если кто знает.

В общих чертах ситуация - автоматизируется некая программа без исходников (уже не очень свежая), клики по "органам управления" отработаны, и вроде все устойчиво. Всякий раз, по HWnd, подстраховываем нахождение окна в топе отображения, и в фокусе ввода. А вот с вводом имен файлов для открытия/сохранения (ни каких API в целевой проге нет) что то все не просто. На компе у разработчика все работает шустро и стабильно. А у потребителя валится (((

используемые варианты
"Save Table".hWndByTitle().setActive().waitForIdle();
Clipboard.SetText(file_path_name);
SendKeys.SendWait("^V{Enter}");
Thread.Sleep(timeOuts[toSendKeys]);

работает постабильнее (но все равно не достаточно стабильно (( однако очень медленно вводит пути и имена (они бывают длинные, что любопытно - у разработчика такое замедление исчезает, после запуска студии и компиляции бота)

второй вариант
"Save Table".hWndByTitle().setActive().waitForIdle();
SendKeys.SendWait(file_path_name);
SendKeys.SendWait("{Enter}");
Thread.Sleep(timeOuts[toSendKeys]);

работает быстро у всех, но гораздо более падучий - в непредсказуемый момент происходит сбой открытия/сохранения, после чего логика бота рушится

Примечание:
.hWndByTitle().setActive().waitForIdle(); это расширения, на основе импортированных из user32, системных функций.

Собственно просьба - если кто то решал подобную задачу (или видел решение) на C# (можно с импортом системных функций, это не пугает) в котором используется прямой ввод текстовых строк путей+имен файлов, в контролы стандартных диалогов (а если еще "OK" инвоком а не кликом) поделитесь плз!
  • Вопрос задан
  • 238 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
Когда-то использовал для подобных целей скрипты AutoIt.
Чисто теоретически:
Вы шлете сообщения активному окну. Возможно между SetActive и SendWait окно перестает быть активным. В этом случае сообщения уйдут не тому окну.
Попробуйте получать хэндл окна и слать сообщения окну с заданным хэндлом.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы