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 ... 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: Fri Jun 04, 2010 12:58    Post subject: Reply with quote

Quote:
Я считаю предложение sa с Autorun.wdx куда более уместное

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

Этот вариант я написал по просьбе НАЗАРЕТ
Quote:
Тут Helper будет регистрироваться при каждом запуске Тотала.
Если бы регистрировался при запуске скрипта, то было бы более элегантно.


Плагин Autorun хорош, но добавлять в него Helper я не буду, каждый раз видеть окно о регистрации... (хотя может есть в Autorunе параметр непоказываемости и нажатии OK)

Quote:
скрипты загонять в ту же папку либо прописывать


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



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

Post (Separately) Posted: Fri Jun 04, 2010 13:06    Post subject: Reply with quote

А вариант написать скрипт, который будет регистрировать хелпер только в случае, если он еще не зарегистрирован?
Или как-то узнавать при попытке вызывать функцию (если это возможно), или же записывать при его регистрации че-нибудь в реестр или какой-нибудь файлик в профиле юзера (или пользовательский параметр в wincmd.ini, там места хватит всем, а тотал его точно удалять не будет).
_________________
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: Fri Jun 04, 2010 13:10    Post subject: Reply with quote

Andrey_A wrote:
Для меня более уместным один раз нажать регистрационный файл, где регистрируется не только хелпер, но десятка три библиотек.
A причём здесь ты? НAЗAРЕТ дал чётко понять, что это нужно для работы не на домашнем PC.
Andrey_A wrote:
хотя может есть в Autorunе параметр непоказываемости и нажатии OK
Я вот и сам удивился почему ты exe-шник без параметра запускаешь. Batya только писал: "TCWSHelp.exe /REGSERVER".
Andrey_A wrote:
Тут речь не шла о всех скриптах - это индивидуальный вариант для данного скрипта.
A, то есть другие скрипты, в которых будет учитываться Хелпер, ему запускать там не надо по-твоему? Very Happy
Andrey_A wrote:
Кому что необходимо, тот тем и воспользуется.
В том-то и дело, что понадобится на любой машине может любой скрипт. Wink
Back to top
View user's profile Send private message
Batya



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

Post (Separately) Posted: Fri Jun 04, 2010 13:27    Post subject: Reply with quote

Лично я против встраивания регистрации в скрипт, но если это кому-то надо, нужно в скрипт дописать процедуру:
Code:
'Процедура регистрации TCScript.Helper
Sub TCScriptHelperRegistration
  Dim HelperPath, Sudo
  '===== Изменяемые параметры ===============================
  'Путь к TCWSHelp.exe
  HelperPath = "%Commander_Path%\Utils\TCWSHelp\TCWSHelp.exe"
  'Путь к утилите Sudo
  Sudo       = "%Commander_Path%\Utils\Sudo\Sudo.exe"
  '==========================================================
  With CreateObject("WScript.Shell")
    HelperPath = .ExpandEnvironmentStrings(HelperPath)
    Sudo       = .ExpandEnvironmentStrings(Sudo)
    If MsgBox("Вы хотите зарегистрировать ""TCScript.Helper""?", _
              vbQuestion+vbYesNo, "Регистрация ""TCScript.Helper""") = vbYes Then
      .Run """" & Sudo & """ """ & HelperPath & """ /REGSERVER", 7, True
    End If
  End With
End Sub
Здесь укажите свой путь к TCWSHelp.exe и утилите Sudo.

А вместо строки
Code:
Set TCS = CreateObject("TCScript.Helper")
нужно записать:
Code:
On Error Resume Next
Set TCS = CreateObject("TCScript.Helper")
If Err.Number <> 0 Then
  Err.Clear
  TCScriptHelperRegistration
  If Err.Number  = 0 Then Set TCS = CreateObject("TCScript.Helper")
  If Err.Number <> 0 Then
    MsgBox """TCScript.Helper"" в системе не зарегистрирован!", vbCritical, "Ошибка"
    WScript.Quit Err.Number
  End If
End If
On Error GoTo 0

_________________
Нет, я не сплю. Я просто медленно моргаю.


Last edited by Batya on Mon Jun 07, 2010 11:16; edited 2 times in total
Back to top
View user's profile Send private message
Batya



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

Post (Separately) Posted: Fri Jun 04, 2010 13:32    Post subject: Reply with quote

MVV
Кстати, пытался вместо TCScript.Helper использовать твой TCFS2.
Не сообразил, как можно вызвать cm_InternalAssociate с последующим подтверждением.
Интерфейсные окна TCFS2 поднять не может?

P.S. Вроде где-то была утилита, которая заставляет TC выполнять команды, но не нашёл. Кто-нибудь ткнёт меня носом? Или, MVV, не наваяешь утилитку, которая из командной строки может засятавлять TC выполнять команды, в том числе с вызовом визуальных окон TC?
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
HA3APET



Joined: 22 Feb 2010
Posts: 151

Post (Separately) Posted: Fri Jun 04, 2010 14:07    Post subject: Reply with quote

Batya
Спасибо за разъяснение. Всё понятно. Ещё и на будущее пригодится точно.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Fri Jun 04, 2010 21:36    Post subject: Reply with quote

Batya wrote:
P.S. Вроде где-то была утилита, которая заставляет TC выполнять команды, но не нашёл. Кто-нибудь ткнёт меня носом?
Оно? Или может эта?
Back to top
View user's profile Send private message
Batya



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

Post (Separately) Posted: Mon Jun 07, 2010 11:20    Post subject: Reply with quote

Изменил процедуру регистрации TCScript.Helper - см. выше. Теперь используется утилита Sudo для возможности запустить регистрацию от имени администратора. Это нужно для Windows 7 и Vista с включённым UAC.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
MVV



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

Post (Separately) Posted: Mon Jun 07, 2010 12:30    Post subject: Reply with quote

Batya wrote:
Кстати, пытался вместо TCScript.Helper использовать твой TCFS2.
Не сообразил, как можно вызвать cm_InternalAssociate с последующим подтверждением.
Интерфейсные окна TCFS2 поднять не может?

Команду cm_InternalAssociate из TCFS2 по идее можно вызвать, используя tcm(519). А вот управлять окном ассоциаций из TCFS2 уже не получится - она отправляет сообщения только главному окну ТК, а чтобы закрыть окно внутренних ассоциаций, нужно работать с ним (найти в нем нужное дочернее окно-кнопку и послать ему WM_LBUTTONDOWN и WM_LBUTTONUP - в дельфе идентификаторы кнопок динамические, поэтому просто отправить WM_COMMAND с wParam=1, как любому нормальному диалоговому окну, не получится, да и саму кнопку по идентификатору не выщемить, что сильно усложняет скриптописание).

Flasher wrote:
Batya wrote:
P.S. Вроде где-то была утилита, которая заставляет TC выполнять команды, но не нашёл. Кто-нибудь ткнёт меня носом?
Оно? Или может эта?

Я знаю только TCMC.

Batya wrote:
Или, MVV, не наваяешь утилитку, которая из командной строки может засятавлять TC выполнять команды, в том числе с вызовом визуальных окон TC?

Что ты понимаешь под "вызовом визуальных окон"? Насколько я знаю, официально ТК поддерживает только WM_USER+51 с кодом cm-команды и WM_COPYDATA с em-командами и командой cd. Все это есть в TCMC. Но закрыть дочернее окно она тоже не поможет.
_________________
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: Mon Jun 07, 2010 13:12    Post subject: Reply with quote

MVV wrote:
Все это есть в TCMC. Но закрыть дочернее окно она тоже не поможет.
Я про него также подумал и, соответственно, про невозможность последующего закрытия. Поэтому не стал предлагать.
Back to top
View user's profile Send private message
HA3APET



Joined: 22 Feb 2010
Posts: 151

Post (Separately) Posted: Tue Mar 22, 2011 10:34    Post subject: Reply with quote

Code:
' Переименование секции [Associations] в [-Associations] с обновленим значков и обратно
' Кнопка вкл\выкл внутренних ассоциаций
Option Explicit
Dim FSO, TCS, F1, F2, Str1, Str2, Str3, Str4, Text1, Text2
Set FSO = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set TCS = CreateObject("TCScript.Helper")
If Err.Number <> 0 Then
  Err.Clear
  TCScriptHelperRegistration
  If Err.Number  = 0 Then Set TCS = CreateObject("TCScript.Helper")
  If Err.Number <> 0 Then
    MsgBox """TCScript.Helper"" в системе не зарегистрирован!", vbCritical, "Ошибка"
    WScript.Quit Err.Number
  End If
End If
On Error GoTo 0
F1   = "%COMMANDER_PATH%\bar\1.bar"
  Str1 = "%COMMANDER_PATH%\Icons\81.ico"
  Str2 = "%COMMANDER_PATH%\Icons\82.ico" 
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

'Процедура регистрации TCScript.Helper
Sub TCScriptHelperRegistration
  Dim HelperPath, Sudo
  '===== Изменяемые параметры ===============================
  'Путь к TCWSHelp.exe
  HelperPath = "%Commander_Path%\scripts\TCWSHelp.exe"
  'Путь к утилите Sudo
  Sudo       = "%Commander_Path%\scripts\Sudo.exe"
  '==========================================================
  With CreateObject("WScript.Shell")
    HelperPath = .ExpandEnvironmentStrings(HelperPath)
    Sudo       = .ExpandEnvironmentStrings(Sudo)
    CreateObject("WScript.Shell").Run """" & Sudo & """ """ & HelperPath & """ /REGSERVER", 7, True
  End With
End Sub



Если файлы 1.bar и wincmd.ini в кодировки Юникод, а не ANSI, то скрипт не работает, а именно очищает содержимое этих файлов.
Как поправить скрипт?
Back to top
View user's profile Send private message
Batya



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

Post (Separately) Posted: Tue Mar 22, 2011 12:15    Post subject: Reply with quote

HA3APET wrote:
Если файлы 1.bar и wincmd.ini в кодировки Юникод, а не ANSI, то скрипт не работает, а именно очищает содержимое этих файлов.

Как поправить скрипт?

Попробуй при вызовах метода OpenTextFile добавить 2 параметра:
Code:
Text1 = FSO.OpenTextFile(F1, 1, False, -1).ReadAll
Text2 = FSO.OpenTextFile(F2, 1, False, -1).ReadAll
.
.
.
FSO.OpenTextFile(F1, 2, False, -1).Write Text1
FSO.OpenTextFile(F2, 2, False, -1).Write Text2

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



Joined: 22 Feb 2010
Posts: 151

Post (Separately) Posted: Tue Mar 22, 2011 12:26    Post subject: Reply with quote

Batya
Заработало!
Спасибо.
Back to top
View user's profile Send private message
ask-rus



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

Post (Separately) Posted: Thu Jun 09, 2011 09:04    Post subject: Reply with quote

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



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

Post (Separately) Posted: Thu Jun 09, 2011 11:37    Post subject: Reply with quote

Скрипт может. Тут всего-то - найти строку, сравнить и изменить, потом перезапуск.
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, 4, 5 ... 9, 10, 11  Next
Page 4 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