Страница 35 из 130
Добавлено: Ср авг 03, 2011 16:15
Flasher
HA3APET писал(а):Меня вполне устраивает
Т.е. несрабатывание
fs3_0 (псевдополного экрана) из развёрнутого окна устраивает? Ну, ладно. Все счастливы.

Добавлено: Ср авг 03, 2011 16:16
MVV
HA3APET писал(а):Меня вполне устраивает:
Код: Выделить всё
/d=5 /ef "run_action(fs3_0), test(hasCaption && !isMaximized) | run_action(fs3_1)"
fs3_0=c0 cl0 db0 tb0 sb0 kb0 th0 t1 m1
fs3_1=c1 cl1 db1 tb1 sb1 kb1 th1 t0 m0
Странный выбор. Получается, что если окно развернуто, то кнопка будет выполнять
fs3_1, включая все элементы окна...
Flasher писал(а):MVV писал(а):Чтобы восстанавливаться в правильный режим, надо использовать историю отката
Там всё утыкается в использование стандартных кнопок управления окном, нажатия которых никак в undo не запишутся.
Они-то не запишутся, а вот команда
m1 запишет в откат команду
m0, только если окно еще не развернуто. А в полноэкранном режиме уже нажать кнопку разворачивания/восстановления окна не удастся - её там тупо не будет.

Добавлено: Ср авг 03, 2011 16:26
Flasher
MVV писал(а):а вот команда m1 запишет в откат команду m0, только если окно еще не развернуто.
Это она потом уже запишет при вызове TCFS2. Считается значение из undo, в то время как режим сменился по стандартной кнопке "Равернуть/Восстановить", поэтому срабатывать как надо будет не всегда и не с первого раза.
Добавлено: Ср авг 03, 2011 17:26
MVV
Пусть
fs3=c0 m1, будем запускать следующую команду:
Код: Выделить всё
TCFS2 /ef "run_action(fs3) save_undo(fs3_undo), test(hasCaption) | run_action(fs3_undo)"
Если окно не развернуто:
1. Вызов
c0 m1 скрывает заголовок, разворачивает окно и пишет в откат
c1 m0.
2. Повторный запуск команды запустит откат, т.к. заголовок скрыт, и восстановит окно.
Если окно развернуто:
1. Вызов
c0 m1 скрывает заголовок и пишет в откат
c1.
2. Повторный запуск команды запустит откат и включит заголовок, не восстанавливая окно.
В обоих возможных случаях после второго запуска окно останется в том состоянии, в котором было до первого запуска. Но панель задач во втором случае скрываться не будет, т.к. заголовок скрывается после разворачивания. А если немного извратиться, можно устранить и эту проблему:
Код: Выделить всё
TCFS2 /ef "if(isMaximized, run_action(fs3)+show(9)+show(3), run_action(fs3)) run_item(rm1pm) save_undo(fs3_undo), test(hasCaption) | run_action(fs3_undo)"
Здесь
show(9)+show(3) нужны для имитации разворачивания окна, чтобы система скрыла панель задач (в откате от них не прибавится), а
run_item(rm1pm) нужна для обновления окна после включения/выключения заголовка (замечу,
rm1pm пишет себя же в откат, поэтому при откате выполнится автоматом).
Добавлено: Чт авг 04, 2011 13:50
HA3APET
MVV
Спасибо, за решение головоломки!)
Получилось именно, то что я и хотел изначально.
Добавлено: Пт авг 12, 2011 18:35
MVV
В который раз замечаю, что при вставке флешки главное меню тотала скрывается. Отловить не могу, случается далеко не каждый раз. Есть подозрение, что тоталу приходит какое-то системное сообщение с таким же индексом. По идее, можно попробовать изменить индекс команды в TCFS2Tools.ini и TCFS2.ini.
Добавлено: Вт авг 23, 2011 13:32
Flasher
MVV
А ты мог бы добавить ключ /p (pause)? Его можно будет использовать между вызовами команд. Естественно, ключ может быть задействовать в строке неоднократно.
Добавлено: Вт авг 23, 2011 14:00
MVV
В смысле между вызовами? Как ты себе это представляешь? Как с паузы-то спускать? Чем не устраивает функция delay?
Добавлено: Вт авг 23, 2011 14:25
Flasher
MVV писал(а):В смысле между вызовами? Как ты себе это представляешь?
Значит, что последовательность выполнения должна соответствовать написанному, например:
/ei команда1 /p=5000 команда2 /ef функция1 /p=10000 /ea действие1 /p=3000 /ef функция2.
Но в данном случае лучше не
мс указывать, а
дс. И, конечно, имелись в виду не только команды, но и функции/действия.
MVV писал(а):Как с паузы-то спускать?
В смысле? Что спускать?
MVV писал(а):Чем не устраивает функция delay?
Она ничего подобного не позволяет, действует только один раз перед запуском, да и большие значения игнорируются.
Добавлено: Вт авг 23, 2011 16:04
MVV
Я наверное что-то неправильно делаю, что оно у меня работает?
Код: Выделить всё
TCFS2.exe /ef delay(2000) run_item(m2) delay(3000) run_item(m2) delay(4000) run_item(m2) delay(2000) run_item(m2)
А если добавить команду
dsleep=delay(#1*100) в секцию
[Items], то получатся
дс, а не
мс, и вызывать можно будет через команды, а не через функции:
Код: Выделить всё
TCFS2.exe /ei dsleep(20) m2 dsleep(30) m2 dsleep(40) m2 dsleep(20) m2
Добавлено: Вт авг 23, 2011 16:09
Flasher
Сильно. Я почему-то про ключ /d подумал. А тут, оказывается, всё как на подносе. Спасибо.

Добавлено: Вт авг 23, 2011 16:10
MVV
Ключ /d - это ожидание перед проверкой условия записи отката. И выполняется это ожидание для каждой команды, которая содержит условие проверки её выполненности.
Добавлено: Вт авг 23, 2011 16:14
Flasher
MVV
Я в курсе. Я думал, что ты его имел в виду. А о функции delay даже не помышлял.

Добавлено: Вт авг 23, 2011 20:22
ApceH
ask-rus:
Проверил её, работает. Минус в том, что на курсоре мыши возникают песочные часики.
MVV
Это убирается крайне легко (на дельфи):
Код: Выделить всё
Var dummymsg: TMsg;
...
PostMessage(0, 0, 0, 0);
GetMessage(dummymsg, 0, 0, 0);
Первым делом это пишу в неграфических, но не консольных прогах своих.
Добавлено: Вт авг 23, 2011 23:17
MVV
Спасибо за идею, добавил в начале функции
main:
Код: Выделить всё
{
MSG msg;
PostMessage(0, 0, 0, 0);
PeekMessage(&msg, 0, 0, 0, 0);
}
С функцией
PeekMessage тоже "занятой" курсор исчезает, но она, в отличие от
GetMessage, не зависает, если в очереди потока нет сообщений.