Страница 35 из 130

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

Добавлено: Ср авг 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 даже не помышлял. :roll:

Добавлено: Вт авг 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, не зависает, если в очереди потока нет сообщений.