Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Автоматическая смена панели инструментов, как?
Goto page Previous  1, 2, 3, 4, 5, 6, 7  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы printer-friendly view
View previous topic :: View next topic  
Author Message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Aug 27, 2011 18:36    Post subject: Reply with quote

ask-rus wrote:
Значит, не решение.
Логики в данном утверждении - ноль...
ask-rus wrote:
С этим есть проблема, существенная.
Ничего удивительного. Нет никаких функций в TCFS2, которые убивают ждущий своей задачи процесс. Ставь меньше паузу, раз так быстро надо повторно переключаться. Либо с апдейтом по вышибанию процесса обращайся к автору.
Back to top
View user's profile Send private message
ask-rus



Joined: 10 Nov 2009
Posts: 2077
Location: Russian Federation

Post (Separately) Posted: Sat Aug 27, 2011 18:49    Post subject: Reply with quote

Flasher wrote:
Логики в данном утверждении - ноль...

Да, это именно утверждение. См. задачу на тот момент (последние два слова).
Flasher wrote:
Либо с апдейтом по вышибанию процесса обращайся к автору.

Пойду обращусь.
_________________
«Минимализм - это кратчайший путь бесконечного стремления к идеалу»
«Не бойся, что не знаешь, - бойся, что не учишься» Китайская пословица
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Aug 27, 2011 18:52    Post subject: Reply with quote

ask-rus wrote:
Да, это именно утверждение.
Это утверждение ни в какие ворота. См. что написано здесь касаемо флага. Твоя команда и так одна (первая)...
Back to top
View user's profile Send private message
ask-rus



Joined: 10 Nov 2009
Posts: 2077
Location: Russian Federation

Post (Separately) Posted: Sat Aug 27, 2011 18:59    Post subject: Reply with quote

Flasher wrote:
Это утверждение ни в какие ворота.

Не в твои?
Flasher wrote:
См. что написано здесь касаемо флага.

Flasher wrote:
Короче каждой кнопке свой флаг (свободный бит либо ключ в ini). Уж с двумя-то кнопками разобраться самостоятельно точно не проблема.

ask-rus wrote:
одной командой

Одна кнопка.
Flasher wrote:
Твоя команда и так одна (первая)...

Покажи эту команду.
_________________
«Минимализм - это кратчайший путь бесконечного стремления к идеалу»
«Не бойся, что не знаешь, - бойся, что не учишься» Китайская пословица
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Aug 27, 2011 19:12    Post subject: Reply with quote

Как говорит Avada - "ещё раз и больше ни разу":
Flasher wrote:
либо пользоваться только подобными кнопками/командами для всех сменных баров (со своим битом каждая, естественно).

ask-rus wrote:
Покажи эту команду.
С некоторой поправкой:
Quote:
TCFS2.exe /ef "set_tcini(TCFS2, Bar, 1) tem(em_1), test(tcini(TCFS2, Bar, #)!=1) | set_tcini(TCFS2, Bar, 0) tem(em_2) delay(15000) tem(em_1)"
Хотя MVV писал, что должно и без этого при проверке на ноль срабатывать.
Back to top
View user's profile Send private message
ask-rus



Joined: 10 Nov 2009
Posts: 2077
Location: Russian Federation

Post (Separately) Posted: Sat Aug 27, 2011 19:34    Post subject: Reply with quote

Flasher wrote:
либо пользоваться только подобными кнопками/командами для всех сменных баров (со своим битом каждая, естественно).

Тогда стояла и до сих пор стоит проблема с двумя нажатиями (первая часть цитируемого). А главной же проблемой является
Flasher wrote:
ждущий своей задачи процесс

Бессмысленные хождения по кругу пользы никому не принесут.
_________________
«Минимализм - это кратчайший путь бесконечного стремления к идеалу»
«Не бойся, что не знаешь, - бойся, что не учишься» Китайская пословица
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Aug 27, 2011 19:40    Post subject: Reply with quote

ask-rus wrote:
и до сих пор стоит проблема с двумя нажатиями
Никаких повторных ("двух") нажатий не требуется. Проверено.
ask-rus wrote:
Бессмысленные хождения по кругу пользы никому не принесут.
Повторение одного и того же в твоём случае и есть хождение по кругу. Жди ответа автора.
Back to top
View user's profile Send private message
ask-rus



Joined: 10 Nov 2009
Posts: 2077
Location: Russian Federation

Post (Separately) Posted: Sat Aug 27, 2011 19:46    Post subject: Reply with quote

Flasher wrote:
Никаких повторных ("двух") нажатий не требуется. Проверено.

Почему-то, первое переключение у меня уже требует двойного нажатия. Условия те же?
_________________
«Минимализм - это кратчайший путь бесконечного стремления к идеалу»
«Не бойся, что не знаешь, - бойся, что не учишься» Китайская пословица
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Aug 27, 2011 19:51    Post subject: Reply with quote

При чём тут условия? Ты команду с поправкой вызываешь из обеих панелей или что?
Back to top
View user's profile Send private message
ask-rus



Joined: 10 Nov 2009
Posts: 2077
Location: Russian Federation

Post (Separately) Posted: Sat Aug 27, 2011 19:55    Post subject: Reply with quote

Flasher wrote:
При чём тут условия?

Думаю, может ты спутал em_1 с em_2.
Flasher wrote:
Ты команду с поправкой вызываешь из обеих панелей или что?

Сначала я её вызываю с одной панели и жду завершения операции. Нет успеха, т. к. приходится нажимать на кнопку дважды.
_________________
«Минимализм - это кратчайший путь бесконечного стремления к идеалу»
«Не бойся, что не знаешь, - бойся, что не учишься» Китайская пословица
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Aug 27, 2011 20:07    Post subject: Reply with quote

Сейчас проверил с ожиданием - действительно срабатывает только с повторного, хотя такого не должно быть. Это косяк программы. Нужно у MVV спросить.
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4815
Location: Ростов-Дон

Post (Separately) Posted: Sat Aug 27, 2011 20:11    Post subject: Reply with quote

Quote:
3. Выполняем команду #1 и наблюдаем смену панели уже на 3-6 сек. (не 15!).

Судя по всему, срабатывает ещё незавершённая команда из шага 1, которая заканчивает ожидание. Ведь остановить ожидание нельзя. И прежде запущенная команда после ожидания не может узнать, она ли переключала на вторую панель.

Quote:
#1 TCFS2.exe /ef "set_tcini(TCFS2, Bar, 1) tem(em_1), test(tcini(TCFS2, Bar, #)) | set_tcini(TCFS2, Bar, 0) tem(em_2) delay(15000) tem(em_1)"

При беглом рассмотрении не понял, почему при Bar != 0 туда пишется 1, а если равно 0, то 0, а не наоборот. И логичнее было бы писать в Bar номер, совпадающий с номером юзер-команды.

ask-rus wrote:
Необходимо их объединить (усомнился в своих силах) и получить Открытие расширенной панели инструментов (em_2) с автоматическим возвратом на главную (em_1) через 15 сек с отменой (открытие главной и сброс отсчета времени, или без сброса по возможностям) одной командой.


Чтобы решить проблему, нужно сделать так:
Code:
[Items]
set_bar=set_tcini(TCFS2, Bar, 1) tem(em_bar1), test(#1 == 1) | set_tcini(TCFS2, Bar, 2) tem(em_bar2), test(#1 == 2) | set_tcini(TCFS2, Bar, 3) tem(em_bar3), test(#1 == 3) ; | ... создать блок для каждой панели

cmd1=set_tcini(TCFS2, Cmd1, #1) run_item(set_bar, 1), test(tcini(TCFS2, Bar, # != 1)) | set_tcini(TCFS2, Cmd1, #1) run_item(set_bar, 2) delay(15000) if(tcini(TCFS2, Cmd1, # == #1), run_item(set_bar, 1))
cmd1loader=run_item(cmd1, GetTickCount)

cmd2=set_tcini(TCFS2, Cmd1, 0) tem(em_1)

[Macros]
tt_GetTickCount=65573
GetTickCount=msg($433, tt_GetTickCount)            ; Возвращает количество миллисекунд с момента загрузки Windows

При этом запускать команду cmd1 необходимо с параметром GetTickCount - этим мы укажем ей текущий номер сеанса. Можно сразу через cmd1loader:
Code:
TCFS2 /ei cmd1loader

Команда, возвращающая GetTickCount, появляется в TCFS2Tools, начиная с версии 1.4.1.114 (чуть позже выложу).

Добавлено:

Эх, всё равно не работает, я и забыл, что подстановка параметров у меня ленивая. То есть, параметр не вычисляется при подстановке. Получается, что GetTickCount каждый раз вызывается по новой, и значения получаются разные. Похоже, для таких задач необходимо добавить псевдо-параметр, обозначающий идентификатор сеанса TCFS2 (банально значение GetTickCount в момент запуска программы) - так можно будет безошибочно различать сеансы.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…


Last edited by MVV on Sat Aug 27, 2011 20:34; edited 4 times in total
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Aug 27, 2011 20:18    Post subject: Reply with quote

MVV wrote:
При беглом рассмотрении не понял, почему при Bar != 0 туда пишется 1, а если равно 0, то 0, а не наоборот.
См. выше, добавил !=1 красным. Т.е. если не равно 1, то ставим 1, если равно 1, то 0. Но даже так глючит.
MVV wrote:
При этом запускать команду cmd1 необходимо с параметром GetTickCount - этим мы укажем ей текущий номер сеанса.
А что именно даст этот номер сеанса? Не лучше сделать предложенное (функция, убивающая все процессы-дубли с другим PID)?
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4815
Location: Ростов-Дон

Post (Separately) Posted: Sat Aug 27, 2011 20:38    Post subject: Reply with quote

Предложенное где? И потом, определять процессы-дубли и убивать их - явно задача не для TCFS2. И вообще, убивать процессы - не самая лучшая идея.

А номер сеанса - это почти PID, но уникальный для всех процессов, запущенных во время всей сессии Windows, в то время как PID могут повторяться через некоторое время (после завершения процесса с таким PID).

А даст он то, что cmd1, запущенная ранее, после ожидания увидит, что номер сеанса, записанный в Cmd1, изменился (т.к. после неё cmd1 уже запускали повторно), и завершит свою работу, не переключая больше ничего.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Aug 27, 2011 20:49    Post subject: Reply with quote

MVV wrote:
Предложенное где?
Тебе ask-rus в тематичном топике ссылку дал. А ты не видишь?
MVV wrote:
И потом, определять процессы-дубли и убивать их - явно задача не для TCFS2. И вообще, убивать процессы - не самая лучшая идея.
Задача для любой программы, чтобы команды срабытывали корректно, и при повторном обращении к похожей команде функция переставала учитываться. В данном случае delay. А каким образом это будет реализовано - другой вопрос. Но такая каша в несколько команд, которую ты привёл мне лично не нравится. Т.е. твоя идея никак не лучше моей, ИМХО.
MVV wrote:
А номер сеанса - это почти PID, но уникальный для всех процессов, запущенных во время всей сессии Windows, в то время как PID могут повторяться через некоторое время (после завершения процесса с таким PID).
Вот имено, что после завершения. Значит никаких проблем это не вызовет.
MVV wrote:
А даст он то, что запущенная ранее команда, увидев после ожидания, что номер сеанса, записанный в Cmd1, изменился, поймёт, что ей нужно прервать свою работу.
Геморройный подход. Представь сколько таких команд нужно понаписать в ini для схожих задач, ужас...
А так была бы одна маленькая запись с названием функции забивки процессов-дублей.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы All times are GMT + 4 Hours
Goto page Previous  1, 2, 3, 4, 5, 6, 7  Next
Page 4 of 7

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group