Турбоконф.ВставитьТекст во все окна Visual studio Code вставляет текст по 2 раза

tormozit Закрыто Высокий
СтароеОкно = ТурбоКонф.ПолучитьАктивноеОкно();
КОмандаСистемы("code.exe 1.txt -n");
ТурбоКонф.ЖдатьСменуАктивногоОкна(СтароеОкно, 2000, Истина);
ТурбоКонф.Ждать(1000);
//ТурбоКонф.УстановитьЗначение(ТекстМодуля); // Зависает
ТурбоКонф.КонтролКлавиша(Клавиши.A);
//ТурбоКонф.ВыделитьТекст(1, 10000000); // Не работает
ТурбоКонф.Ждать(1000);
ТурбоКонф.ВставитьТекст(ТекстМодуля);
ТурбоКонф.Ждать(1000);
ТурбоКонф.КонтролКлавиша(Клавиши.G);
ТурбоКонф.Ждать(1000);
ТурбоКонф.ВставитьТекст(XMLСтрока(НомерСтроки));

Комментарии

bolsun
#1, 26 мая 2024 13:45

Метод только для конфигуратора предназначается и корректно работать в VS Code не будет. В VS Code совсем другая структура, там Monaco, с дочерними элементами, а не единое поле текстового документа.
Нужно использовать какие-то другие способы вставки. Либо самый примитивный, просто вставка из буфера с задержкой. Либо API VS Code.


tormozit
#2, 26 мая 2024 17:16

Попробовал через буфер обмена. Опять при вызове второй установки содержимого буфера обмена стабильно возникает ошибка

ТурбоКонф.КонтролКлавиша(Клавиши.A);
ТурбоКонф.УстановитьБуферОбмена(ТекстМодуля);
ТурбоКонф.КонтролКлавиша(Клавиши.V);
ТурбоКонф.КонтролКлавиша(Клавиши.G);
ТурбоКонф.Ждать(500);
ТурбоКонф.УстановитьБуферОбмена(XMLСтрока(НомерСтроки));
ТурбоКонф.КонтролКлавиша(Клавиши.V);

Не удалось выполнить скрипт ИРАдаптер->НайтиПоследнююПравкуВГите: ScriptEngine.Machine.ExternalSystemException: {Модуль C:\Portable\TurboConf\user_scripts\RDT.os / Ошибка в строке: 3165 / Внешнее исключение (System.Runtime.InteropServices.ExternalException): Сбой при выполнении запрошенной операции с буфером обмена.}
ТурбоКонф.УстановитьБуферОбмена(XMLСтрока(НомерСтроки));
---> System.Runtime.InteropServices.ExternalException: Сбой при выполнении запрошенной операции с буфером обмена.
в System.Windows.Forms.Clipboard.ThrowIfFailed(Int32 hr)
в System.Windows.Forms.Clipboard.SetDataObject(Object data, Boolean copy, Int32 retryTimes, Int32 retryDelay)
в TurboConf.Core.TurboAPI.TurboApi.SetClipboard(String text, Boolean clipIgnore)
в lambda_method(Closure , Api , IValue[] )
в ScriptEngine.Machine.Contexts.AutoContext`1.CallAsProcedure(Int32 methodNumber, IValue[] arguments)
в ScriptEngine.Machine.MachineInstance.ResolveMethodProc(Int32 arg)
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
--- Конец трассировки внутреннего стека исключений ---
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
в ScriptEngine.Machine.MachineInstance.ExecuteCode()
в ScriptEngine.Machine.MachineInstance.ExecuteMethod(IRunnable sdo, Int32 methodIndex, IValue[] arguments)
в ScriptEngine.Machine.Contexts.ScriptDrivenObject.CallAsFunction(Int32 methodNumber, IValue[] arguments, IValue& retValue)
в TurboConf.HostApplication.HostApplicationForm.ExecuteScript(Script script, Keys ctrl, Keys alt, Keys shift, ScreenForm statusForm, String entryPoint, ScriptOptions options, IVariable[] parameters)


tormozit
#3, ред. 26 мая 2024 18:56

Пока нашел такой способ решения задачи. Вторую вставку (номера строки для перехода) пришлось делать эмуляцией отправки нажатий клавиш, т.к. вставка через буфер часто выдает ошибку (2)

	ТурбоКонф.КонтролКлавиша(Клавиши.A);
	ТурбоКонф.ВставитьТекст(ТекстМодуля); // Часто делает двойную вставку, но не всегда
	ТурбоКонф.КонтролКлавиша(Клавиши.Z); // Откатывает возможную вторую вставку 
	ТурбоКонф.КонтролКлавиша(Клавиши.Z); // Откатывает первую вставку или делает ничего
	ТурбоКонф.КонтролКлавиша(Клавиши.Y); // Повторяет первую вставку. Альтернативное сочетание по умолчанию - Ctrl+Shift+Z
	СтарыйИД = ТурбоКонф.ПолучитьRuntimeIdСтрокой();
	ТурбоКонф.КонтролКлавиша(Клавиши.G);
	ТурбоКонф.ЖдатьСменуТекущегоЭлемента(СтарыйИД, 1000, Истина);
	ТурбоКонф.ОтправитьТекст(XMLСтрока(НомерСтроки))
	ТурбоКонф.Клавиша(Клавиши.Enter);


bolsun
#4, 26 мая 2024 18:04

(3) tormozit, поле ввода строки, как раз поддерживает метод установки через UIAuto
УстановитьЗначение()


tormozit
#5, 26 мая 2024 18:18

(4) bolsun, проверил
ТурбоКонф.УстановитьЗначение(XMLСтрока(НомерСтроки));
произошло ничего, т.е. не сработало


bolsun
#6, 26 мая 2024 18:35

(5) tormozit, я посмотрел - паттерн заявлен. В другие такие поля вставляет. Значит там какая то доп. обработка мешает.


bolsun
#7, 30 мая 2024 15:04

Не является багом TurboConf.
bolsun изменил статус на Закрыто


Для вставки изображения или файла, перетащите его в поле редактора или вставьте файл из буфера