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, ... 9, 10, 11  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Sun May 09, 2010 15:03    Post subject: Reply with quote

Quote:
без перезапуска ничего сделать нельзя?

Flasher точно подметил. Я когда читал тему, увидел слово перезапуск, и замкнуло на нём, а про обновление значков не подумал.
Если после строки End If и перед Set TCS=Nothing вставить это
Code:
TCS.SendCommand "cm_InternalAssociate"
TCS.Pause = 100
TCS.SendKeystroke "{Enter}"

то перезагрузки Тотала не надо
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sun May 09, 2010 16:07    Post subject: Reply with quote

Andrey_A
Ну с появлением окна Внутр. ассоциаций достаточно тривиальное решение. Вот без бы..
Andrey_A wrote:
TCS.Pause = 100
Кстати без паузы тоже нормально работает.
Back to top
View user's profile Send private message
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Sun May 09, 2010 16:53    Post subject: Reply with quote

Quote:
Вот без бы..
наверно можно, после праздников профессионалы отойдут от праздников...
Quote:
Кстати без паузы тоже нормально работает

Кому надо паузу могут убрать. У меня на одной машине срабатывает без паузы идеально, на другой 80\20. Наверно это зависит от быстроты процессов...
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Sun May 09, 2010 22:21    Post subject: Reply with quote

Andrey_A wrote:
Кому надо паузу могут убрать.
Я еще раз напоминаю про существенную разницу между Sleep и Pause
http://forum.wincmd.ru/viewpost.php?p=61263
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Tue May 11, 2010 09:32    Post subject: Reply with quote

Andrey_A wrote:
Если что подправите

Парочка незначительных советов:
1. Строки "With WScript" и "End With" совершенно не нужны.
2. Одинаковые конструкции лучше вынести за пределы "If ... End If":
Code:
Text = FSO.OpenTextFile(F, 1).ReadAll
If bCheck Then
  Text = Replace(Text, Str2, Str1, 1, -1, 1)
Else
  Text = Replace(Text, Str1, Str2, 1, -1, 1)
End If
FSO.OpenTextFile(F, 2).Write Text

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Tue May 11, 2010 14:06    Post subject: Reply with quote

Подправил скрипт с учётом советов
Code:
' Переименование секции [Associations] в [-Associations] с обновленим значков и обратно
' Кнопка вкл\выкл внутренних ассоциаций
Option Explicit
Dim FSO, F, Str1, Str2, Text, TCS
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TCS = CreateObject("TCScript.Helper")
With WScript
  F    = "%COMMANDER_PATH%\WinCmd.ini"
  Str1 = "[Associations]"
  Str2 = "[-Associations]"
End With

F = FSO.GetAbsolutePathName(CreateObject("WScript.Shell").ExpandEnvironmentStrings(F))

Text = FSO.OpenTextFile(F, 1).ReadAll
If bCheck Then
  Text = Replace(Text, Str2, Str1, 1, -1, 1)
Else
  Text = Replace(Text, Str1, Str2, 1, -1, 1)
End If
FSO.OpenTextFile(F, 2).Write Text

TCS.SendCommand "cm_InternalAssociate"
TCS.Pause = 100
TCS.SendKeystroke "{Enter}"

Set TCS=Nothing
WScript.Quit

Function bCheck()
   Dim sFile
   sFile=WScript.ScriptFullName
   bCheck=TCS.INIRead(sFile, "Ass", "Line", 0)
   TCS.INIWrite sFile, "Ass", "Line", Not bCheck
End Function

[Ass]
Line =0
Back to top
View user's profile Send private message
HA3APET



Joined: 22 Feb 2010
Posts: 151

Post (Separately) Posted: Sun May 16, 2010 17:55    Post subject: Reply with quote

Спасибо всё отлично работает. Теперь для идеала хочется сделать так чтобы кнопка "вкл\выкл внутр ассоциации TC" менялась при нажатии, чтоб было видно вкл или выкл она, то есть сделать аналог например кнопки cm_SwitchHidSys.

Я пошёл таким путём -
Сделал по подобию скрипт меняющий иконку при нажатии
Code:
Option Explicit
Dim FSO, F, Str1, Str2, Text, TCS
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TCS = CreateObject("TCScript.Helper")
With WScript
  F    = "%COMMANDER_PATH%\Bars\1.bar"
  Str1 = "button19=wcmicons.dll,80"
  Str2 = "button19=wcmicons.dll,81"
End With

F = FSO.GetAbsolutePathName(CreateObject("WScript.Shell").ExpandEnvironmentStrings(F))

Text = FSO.OpenTextFile(F, 1).ReadAll
If bCheck Then
  Text = Replace(Text, Str2, Str1, 1, -1, 1)
Else
  Text = Replace(Text, Str1, Str2, 1, -1, 1)
End If
FSO.OpenTextFile(F, 2).Write Text

TCS.SendCommand "cm_ButtonConfig"
TCS.Pause = 100
TCS.SendKeystroke "{Tab}"
TCS.SendKeystroke "{Enter}"


Set TCS=Nothing
WScript.Quit

Function bCheck()
   Dim sFile
   sFile=WScript.ScriptFullName
   bCheck=TCS.INIRead(sFile, "Ass", "Line", 0)
   TCS.INIWrite sFile, "Ass", "Line", Not bCheck
End Function

[Ass]
Line =-1


Как теперь соединить эти два скрипта в один? Батником естественно не рационально запускать скрипты поочерёдно.
Или может есть др способы решить мою задачу?
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sun May 16, 2010 20:46    Post subject: Reply with quote

HA3APET
Думаю тут стоит ещё покапать.
Back to top
View user's profile Send private message
HA3APET



Joined: 22 Feb 2010
Posts: 151

Post (Separately) Posted: Sun May 16, 2010 23:46    Post subject: Reply with quote

Спасибо покопал, но не нашёл там решения своей задачи, тем более в скриптах совершенно не разбираюсь, поэтому и прошу тут помощи.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Tue May 18, 2010 01:58    Post subject: Reply with quote

HA3APET
Что-то я эдакое пытался соорудить - не получилось, не знаю как в таком случае с секциями работать. На крайний случай можно создать в ТС пользовательскую команду em_ со скриптом, редактирующим Bar-файл и обновляющим панель инструментов, а в скрипте Andrey_A потом добавить строку TCS.UserCmd "em_Имя" под TCS.SendKeystroke "{Enter}"
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Tue May 18, 2010 09:31    Post subject: Reply with quote

HA3APET wrote:
Как теперь соединить эти два скрипта в один?

Не мудрствуя лукаво, можно просто слить:
Code:
Option Explicit
Dim FSO, TCS, F1, F2, Str1, Str2, Str3, Str4, Text1, Text2
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TCS = CreateObject("TCScript.Helper")
F1   = "%COMMANDER_PATH%\Bars\1.bar"
Str1 = "button19=wcmicons.dll,80"
Str2 = "button19=wcmicons.dll,81"
F2   = "%COMMANDER_PATH%\WinCmd.ini"
Str3 = "[Associations]"
Str4 = "[-Associations]"

F1 = FSO.GetAbsolutePathName(CreateObject("WScript.Shell").ExpandEnvironmentStrings(F1))
F2 = FSO.GetAbsolutePathName(CreateObject("WScript.Shell").ExpandEnvironmentStrings(F2))

Text1 = FSO.OpenTextFile(F1, 1).ReadAll
Text2 = FSO.OpenTextFile(F2, 1).ReadAll
If bCheck Then
  Text1 = Replace(Text1, Str2, Str1, 1, -1, 1)
  Text2 = Replace(Text2, Str4, Str3, 1, -1, 1)
Else
  Text1 = Replace(Text1, Str1, Str2, 1, -1, 1)
  Text2 = Replace(Text2, Str3, Str4, 1, -1, 1)
End If
FSO.OpenTextFile(F1, 2).Write Text1
FSO.OpenTextFile(F2, 2).Write Text2

With TCS
  .LockTC True
  .Pause = 100
  .SendCommand   "cm_ButtonConfig"
  .SendKeystroke "{Tab}"
  .SendKeystroke "{Enter}"
  .SendCommand   "cm_InternalAssociate"
  .SendKeystroke "{Enter}"
End With

Set TCS = Nothing
Set FSO = Nothing
WScript.Quit

Function bCheck()
   Dim sFile
   sFile=WScript.ScriptFullName
   bCheck=TCS.INIRead(sFile, "Ass", "Line", 0)
   TCS.INIWrite sFile, "Ass", "Line", Not bCheck
End Function

[Ass]
Line =-1

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Tue May 18, 2010 11:39    Post subject: Reply with quote

Batya wrote:
Не мудрствуя лукаво
Хм. О банальной склейке с дублированием даже не подумал. Не там рыл.) Скрипт работает. Хотя мне такая кнопка не нужна по большому счёту; в меню место нашлось только подретушированному скрипту Andrey_A.
Back to top
View user's profile Send private message
HA3APET



Joined: 22 Feb 2010
Posts: 151

Post (Separately) Posted: Wed May 19, 2010 18:20    Post subject: Reply with quote

Batya
Скрипт работает.. но зависат где-то на 2 сек после
.SendCommand "cm_ButtonConfig"
.SendKeystroke "{Tab}"

то есть появляется Button Config, фокус ставится на OK.. затем двух секундная пауза... затем продолжает работать.

Если осуществить батником запуск этих двух скриптов, то проблемы нет. Можно ли убрать эту задержку?

Code:
  .LockTC True
  .Pause = 100


Это не влияет на задержку.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Wed May 19, 2010 23:46    Post subject: Reply with quote

HA3APET wrote:
Можно ли убрать эту задержку?
Пауза нужна по естественным причинам: Появление диалога "Настройка панели инструментов" + диалога "Внутренние ассоциации". Строка LockTC True наоборот требуется для ускорения работы скрипта, хотя применяется в основном при перерисовке и переключении панелей.
Back to top
View user's profile Send private message
HA3APET



Joined: 22 Feb 2010
Posts: 151

Post (Separately) Posted: Thu May 20, 2010 04:28    Post subject: Reply with quote

Flasher
Это не пауза.. это задержка которой не было и нет если выполнять эти два скрипта по отдельности.
Описываю подробнее:
Запускается Настройка панели инструментов, фокус ставится на OK, то есть выполняется
Code:
.SendKeystroke "{Tab}"

а затем двух (!) секундная пауза...

Разобрался - "виноват" Dr.Web

Batya, спасибо за скрипт, всё отлично.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3, ... 9, 10, 11  Next
Page 2 of 11

 
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