TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
У тебя такое было? Обычно винда не позволяет перехватывать фокус у приложения, которое в данный момент (до истечения некоего таймаута после последней клавиши) получает команды с клавиатуры.
А ты предлагаешь перед каждой клавишей проверять, не сменилось ли окно? Стоит ли так мучаться? Мне-то несложно в цикл добавить сравнение дескриптора активного окна с тем, что я активировал, но надо ль оно?
А ты предлагаешь перед каждой клавишей проверять, не сменилось ли окно? Стоит ли так мучаться? Мне-то несложно в цикл добавить сравнение дескриптора активного окна с тем, что я активировал, но надо ль оно?
Я хочу предостеречься от любых потенциально возможных проблем. С чего ты взял, что винда не даёт перехватить фокус, если происходит единичная активация окна? Откуда винда может брать таймаут? Разве ты его не сам задаёшь?
Я предлагаю не только проверять перед каждой клавишей, но и ожидать появления вызываемого диалога до нажатий.
Я предлагаю не только проверять перед каждой клавишей, но и ожидать появления вызываемого диалога до нажатий.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Так это установка поверх, а не ожидание.
Ну, почему не то? Можно растянуть до send with waiting.
Можно создать предварительный список команд с диалогами и их классами, который и обрабатывать на ожидание. Или задавать класс в скобках через запятую.
Ну, почему не то? Можно растянуть до send with waiting.
Можно создать предварительный список команд с диалогами и их классами, который и обрабатывать на ожидание. Или задавать класс в скобках через запятую.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Бета 350.
Функция send теперь может принимать второй параметр - дескриптор окна. Если во время передачи нажатий окно потеряло фокус, передача прекращается и функция завершает работу. Если второй параметр не указан, активируется последнее модальное окно (как и раньше).
Функция findwnd возвращает дескриптор окна с заданными классом и/или названием, принадлежащее рабочему экземпляру тотала. Послать в калькулятор не получится.
Функция sendmsg отправляет сообщение окну с заданным дескриптором (первый параметр, остальные параметры - как у msg).
Функция tcm может принимать второй параметр - режим синхронности: 0 - синхронно, ждать результата (SendMessage), >0 - не ждать (PostMessage), <0 - не ждать (SendMessage в фоновом потоке). Пятый параметр функции msg теперь работает так же.
Функция tem может принимать второй параметр: если не 0, сообщение отправляется в фоновом потоке.
Примеры
Функция send теперь может принимать второй параметр - дескриптор окна. Если во время передачи нажатий окно потеряло фокус, передача прекращается и функция завершает работу. Если второй параметр не указан, активируется последнее модальное окно (как и раньше).
Функция findwnd возвращает дескриптор окна с заданными классом и/или названием, принадлежащее рабочему экземпляру тотала. Послать в калькулятор не получится.
Функция sendmsg отправляет сообщение окну с заданным дескриптором (первый параметр, остальные параметры - как у msg).
Функция tcm может принимать второй параметр - режим синхронности: 0 - синхронно, ждать результата (SendMessage), >0 - не ждать (PostMessage), <0 - не ждать (SendMessage в фоновом потоке). Пятый параметр функции msg теперь работает так же.
Функция tem может принимать второй параметр: если не 0, сообщение отправляется в фоновом потоке.
Примеры
Код: Выделить всё
/ef "tcm(2400,1) delay(100) send(`hello{TAB}world`)"
/ef "tem(`em_multirename шаблон1`, 1) delay(100) send(`hello{TAB}world`,findwnd(`TMultiRename`))"
/ef "tcm(502,1) delay(100) send(`{tab 4}`,findwnd(`TATTRIBDLG`))"MVV
Ну, неплохо. А без delay можно вполне обходиться.
Ну, неплохо. А без delay можно вполне обходиться.
Каким образом и с выполнением каких функций осуществляется синхронность? У тебя в примерах единицы стоят, а этих трёх нет. Можно примеры с описаниями того, как это работает?MVV писал(а):0 - синхронно, ждать результата (SendMessage), >0 - не ждать (PostMessage), <0 - не ждать (SendMessage в фоновом потоке)
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Точно как и раньше? У меня перестала срабатывать одна из кнопок с MRT, возможно потому, что в ней появляется всплывающее окно подтверждения отката при мультипереименовании.MVV писал(а):Если второй параметр не указан, активируется последнее модальное окно (как и раньше).
Такое впечатление, что передача нажатий прекращается и функция send завершает работу, а окно подтверждения так и остаётся открытым,
как и сам диалог мультипереименования.
Раньше всё успешно закрывалось.
Flasher,
Без delay иногда может не успевать. И фоновый тред может не успеть послать, как основная программа завершит работу (если после этой команды других команд мало).
Раньше сообщения можно было слать (Send) и ставить в очередь (Post). Чтобы запросить у TCFS2Tools значение, нужен Send, чтобы послать нажатие или отжатие клавиши, нужен Post. Я сам не особо вижу разницы между Post и фоновым Send, на всякий случай есть оба. В тех примерах TCFS2.ini, где последний параметр равен 1, надо оставлять 1. Слать юзер-команды лучше через Send (обычный или фоновый, если надо в диалог потом послать нажатия или команды).
Без delay иногда может не успевать. И фоновый тред может не успеть послать, как основная программа завершит работу (если после этой команды других команд мало).
Почему этих трех нет? 1>0 - раз. Все команды, для которых параметр не указан явно, посылаются с 0, как и раньше - два (с этим вариантом ты знаком не первый год). Добавился лишь 1 режим.Каким образом и с выполнением каких функций осуществляется синхронность? У тебя в примерах единицы стоят, а этих трёх нет. Можно примеры с описаниями того, как это работает?
Раньше сообщения можно было слать (Send) и ставить в очередь (Post). Чтобы запросить у TCFS2Tools значение, нужен Send, чтобы послать нажатие или отжатие клавиши, нужен Post. Я сам не особо вижу разницы между Post и фоновым Send, на всякий случай есть оба. В тех примерах TCFS2.ini, где последний параметр равен 1, надо оставлять 1. Слать юзер-команды лучше через Send (обычный или фоновый, если надо в диалог потом послать нажатия или команды).
При вызове send определяется окно, которому надо слать (автоматом или из второго параметра), и, если оно теряет фокус (проверка перед отправкой каждого нажатия, как просил Flasher), цикл отправки прерывается. Разбивай посылку на несколько send (первый - окну MRT, второй - всплывающему окну подтверждения и т.д., при этом у каждого send второй параметр можешь не указывать), возможно, между ними небольшую задержку (поэкспериментируй).Точно как и раньше? У меня перестала срабатывать одна из кнопок с MRT, возможно потому, что в ней появляется всплывающее окно подтверждения отката при мультипереименовании.
- LonerD
- Сообщения: 1174
- Зарегистрирован: Вт янв 04, 2011 03:56
- Откуда: Макеевка
- Контактная информация:
MVV
В чём ошибка?:
rleft=move(, , @/2, cyWorkArea)
Задал положение окна равным левой верхней точке рабочей области экрана, ширину - в половину ширины экрана, высоту - равную высоте рабочей области экрана (без панели задач).
Почему ширина неправильная (увы) - это понятно, левый border Тотала выезжает за пределы экрана потому как за координаты окна берётся не левая верхняя его точка, а что-то другое.
Но почему высота окна Тотала оказывается выше заданной? (нижняя часть окна уезжает под экран). Как правильно?
(хочу сэмулировать поведение окна, аналогичное Win+left в Win7/8 )
В чём ошибка?:
rleft=move(, , @/2, cyWorkArea)
Задал положение окна равным левой верхней точке рабочей области экрана, ширину - в половину ширины экрана, высоту - равную высоте рабочей области экрана (без панели задач).
Почему ширина неправильная (увы) - это понятно, левый border Тотала выезжает за пределы экрана потому как за координаты окна берётся не левая верхняя его точка, а что-то другое.
Но почему высота окна Тотала оказывается выше заданной? (нижняя часть окна уезжает под экран). Как правильно?
(хочу сэмулировать поведение окна, аналогичное Win+left в Win7/8 )
Windows 11 | TC DreamLair eternal pre-α
- LonerD
- Сообщения: 1174
- Зарегистрирован: Вт янв 04, 2011 03:56
- Откуда: Макеевка
- Контактная информация:
Flasher
Скриншот:
http://rghost.ru/44852021.view
Слева выезжает на размер bordera темы оформления (для наглядности - справа Акелпад выровненный вправо нажатием Win+Right).
После более внимательного рассмотрения, оказалось, что почему-то въезжает ещё и сверху под таскбар Windы, но совсем немножко. Возможно, это тоже связано с тем, что TCFS2 не учитывает border окна Тотала, а берёт за основу некую пятую точку.
Снизу - выезжает за пределы окна примерно на размер статус-строки (нижние кнопки отключены). Итого сверху под таскбар плюс снизу под экран выезжает примерно на размер таскбара.
То есть в качестве высоты окна Тотала учитывается не cyWorkArea, а @ )
Скриншот:
http://rghost.ru/44852021.view
Слева выезжает на размер bordera темы оформления (для наглядности - справа Акелпад выровненный вправо нажатием Win+Right).
После более внимательного рассмотрения, оказалось, что почему-то въезжает ещё и сверху под таскбар Windы, но совсем немножко. Возможно, это тоже связано с тем, что TCFS2 не учитывает border окна Тотала, а берёт за основу некую пятую точку.
Снизу - выезжает за пределы окна примерно на размер статус-строки (нижние кнопки отключены). Итого сверху под таскбар плюс снизу под экран выезжает примерно на размер таскбара.
То есть в качестве высоты окна Тотала учитывается не cyWorkArea, а @ )
Windows 11 | TC DreamLair eternal pre-α