Страница 62 из 130
Добавлено: Пт окт 19, 2012 11:34
sa
Mint86 писал(а):получаю подробный режим отображения вместо краткого.
В таком случае плагин
AutoRun в помощь. Можно принудительно установить краткий режим при загрузке тотала и даже сразу вызвать
TCFS2.exe "/ef tem(em_GoToPhoneBook) /ei sp_set_active(85)"
Flasher писал(а):С wfx ничего меняться не должно.
Попробуй с Phonebook.
Добавлено: Чт ноя 08, 2012 19:10
ask-rus
Ранее поднимал задачу по автоматической смене панели инструментов с возвратом через 15 секунд + "стопор", прерывающий смену (решалась в текущей теме, была затронута и
другая смежная тема). Что получилось, напомню:
1. Автоматическая смена панели инструментов с возвратом через 15 секунд
Код: Выделить всё
set_bar=if(#1 == 1, tem(em_1)) if(#1 == 2, tem(em_2)) if(#1 > 0, set_tcini(Layout, ButtonBar, 1), run_item(tb0)) set_tcini(TCFS2, Bar, #1), , set_bar(1)
Код: Выделить всё
quick_bar=set_tcini(TCFS2, #0, 0) run_item(set_bar, 1), test(tcini(TCFS2, Bar, #)==2) | set_tcini(TCFS2, #0, @sid) run_item(set_bar, 2) delay(15000) if(tcini(TCFS2, #0, # == @sid), run_item(set_bar, 1))
2. "Стопор"
Код: Выделить всё
quick_bar_stop=set_tcini(TCFS2, quick_bar, 0)
К сожалению, есть один нюанс. Очень часто я закрываю TC, будучи во второй панели, а когда его открываю, чтобы перейти на эту (вторую) панель мне приходиться запускать команду автоматической смены
дважды.
Loopback в своем Autorun как раз таки предоставил
возможность, которой, считаю, необходимо воспользоваться. Какую команду выполнить Autorun-ом при закрытии TC, чтобы решить проблему?
Добавлено: Чт ноя 08, 2012 20:35
MVV
Вообще, я давным давно писал плагин для Autorun.wdx, позволяющий выполнять команды при закрытии тотала (из батника).
Вряд ли тут так уж необходима возможность выполнять команды при закрытии тотала. Абсолютно одинаково, выполнять их при закрытии или при следующем открытии.
Судя по команде, она может не включить вторую панель только если tcini(TCFS2, Bar, #)==2. Не совсем понимаю, почему при запуске тотала там может быть 2, ведь по идее при закрытии тотала ожидающий экземпляр TCFS2 всё равно запишет туда 1... А решение по идее простое - при запуске тотала надо вызывать set_bar(1), или даже просто set_tcini(TCFS2, Bar, 1), т.к. панель и так тотал будет включать основную.
Добавлено: Чт ноя 08, 2012 21:06
ask-rus
MVV писал(а):или даже просто set_tcini(TCFS2, Bar, 1)
Отлично, спасибо.
Надеюсь, на этом точка.
Добавлено: Сб ноя 10, 2012 21:20
ask-rus
Я проверял с кнопки 1-й панели инструментов и после переходил без проблем на 2-ю, но, прописав команду в Autorun, ничего не изменилось. Я в тупике и, надеюсь, эта команда не выполняется -
неверно её прописал в чужой среде.
Добавлено: Сб ноя 10, 2012 21:59
MVV
Если вручную выполнить команду и потом запустить тотал, эффект должен быть таким же. Если работает, команда правильная. А запускается ли она - обсудим в теме по Autorun.
Я, кстати, имею в папке Windows маленькую программку msg.exe, которая просто показывает сообщение с командной строкой, переданной ей. И если надо проверить, выполняется ли команда, работает ли кнопка, вызывается ли аддон мультиарка и т.п., приписываю перед этой командой msg и выполняю. Хотя, в случае с плагином Autorun просто так не припишешь, т.к. имя программы и параметры разделены.
Добавлено: Сб ноя 17, 2012 20:26
MVV
Слегка обновил TCFS2. Добавилась возможность записывать строки в INI (как есть, без какой-либо обработки), а также удалять ключи.
Код: Выделить всё
TCFS2 /ef "set_tcini(`Buttonbar`, `Buttonbar`, `%COMMANDER_PATH%\Bars\Default.bar`)"
Названия секции и ключа заключать в косые кавычки не обязательно, но это нужно, если они содержат пробелы.
Экспериментировал с получением дескрипторов активных окон тотала в TCFS2Tools, чтобы можно было посылать им сообщения из TCFS2, ничего путного пока не получилось. Функции
GetFocus и
GetActiveWindow тупо возвращают нули, если окна тотала не имеют фокуса. Получается, нужно вызывать их заранее, но в какой момент? По таймеру не хочется, а по событию потери фокуса не получается - это нужно перехватывать события каждого окна тотала. Думал о хуке, но нельзя поставить хук на процесс, можно лишь на поток (мало) или на рабочий стол (слишком много).
Добавлено: Вс ноя 18, 2012 15:59
Flasher
Ожидаемая запись строк в параметры функций ini (названия секций/ключей) - отлично! Попробуем.
Вот текст из переменных/макросов бы добавлять туда - было бы вообще замечательно.
MVV писал(а):Функции GetFocus и GetActiveWindow тупо возвращают нули, если окна тотала не имеют фокуса.
Если вызывать команды ТС по SendMessage, то мы ждём когда окно активируется, потом уже будут срабатывать последующие функции и возращать то, что требуется.
Добавлено: Вс ноя 18, 2012 16:35
MVV
Вот текст из переменных/макросов бы добавлять туда - было бы вообще замечательно.
В переменных и макросах есть только числа.

Остальное - скриптами/батниками генерировать командную строку.
Если вызывать команды ТС по SendMessage, то мы ждём когда окно активируется, потом уже будут срабатывать последующие функции и возращать то, что требуется.
Когда мы посылаем сообщения окну тотала, нам всё равно, активно ли оно. А здесь окно должно быть активным, чтобы можно было узнать, кто имеет фокус...
Добавлено: Вс ноя 18, 2012 17:11
Flasher
MVV писал(а):В переменных и макросах есть только числа.
Они и нужны, только в комбинации с текстом. Например: `текст текст ` && макрос && ` текст`.
MVV писал(а):Остальное - скриптами/батниками генерировать командную строку.
Ну, скриптами вообще можно всё это без TCFS2 проделывать. Нам же нужно упрощение с записью в одну кнопку/команду и соотвествующая скорость отработки.
MVV писал(а):А здесь окно должно быть активным, чтобы можно было узнать, кто имеет фокус
Так я и пишу, что сперва окно активируется с запуском команды, а потом ему передаётся фокус.
Например, можно в такой команде притворить: tcm(508, 1), где 1 - это использование SendMessage и последующая передача рабочего фокуса.
Добавлено: Вс ноя 18, 2012 19:04
MVV
Передать фокус - бредовая затея. Винда неимоверно тупым алгоритмом определяет, кому и когда можно перехватывать фокус, делая окна, в которых ты пишешь текст, неактивными... А когда тебе это надо, она не даст тебе сделать это.
Добавлено: Вс ноя 18, 2012 19:13
Flasher
MVV писал(а):делая окна, в которых ты пишешь текст, неактивными
Необязательно текст писать, можно нажимать кнопки. Если ты пишешь текст, то окно, в котором ты его пишешь, активно или нет?
Добавлено: Вс ноя 18, 2012 19:59
MVV
На момент, пока ты его пишешь - да. Но если делаешь паузу, другое окно может перехватить фокус...
Сидишь себе в тотале, браузишь папочки... тут вылетает на экран какая-нибудь скотина с тупым вопросом и хватает ентер, который предназначался тоталу для входа в очередную папку.

Мышатник тут ехидно ухмыльнётся...
Но при запуске нового приложения, в данном случае TCFS2, фокус может и перейти...
Добавлено: Вс ноя 18, 2012 20:37
Flasher
MVV
Это всё понятно, но юзер будет подходить к выполнению осознанно, ему просто нет смысла в этот сверхкороткий момент куда-то ещё кликать. Пауза тут вообще неуместна, по крайней мере мне такие примеры неизвестны.
Можно и не передавать фокус. У тебя насколько я понял, задача в том, чтобы проверять, что фокус установлен в нужном окне. А для этого и достаточно перед проверкой выполненять команду вызова диалога, т.е. намеренно, без резидента (тогда тут, видимо, и TCFS2Tools не нужен).
Добавлено: Вс ноя 18, 2012 22:08
MVV
Ты не понял.

Задача у меня в том, чтобы можно было посылать сообщения окну, которое имеет фокус. Чтобы, например, можно было закрыть диалоговое окно тотала. Для этого нужно знать дескрипторы активного окна и активного контрола. А их можно получить только из такущего процесса, и только когда текущий процесс имеет фокус.