Страница 4 из 11

Добавлено: Пт июн 04, 2010 12:58
Andrey_A
Я считаю предложение sa с Autorun.wdx куда более уместное
Конечно более уместное. Для меня более уместным один раз нажать регистрационный файл, где регистрируется не только хелпер, но десятка три библиотек.

Этот вариант я написал по просьбе НАЗАРЕТ
Тут Helper будет регистрироваться при каждом запуске Тотала.
Если бы регистрировался при запуске скрипта, то было бы более элегантно.
Плагин Autorun хорош, но добавлять в него Helper я не буду, каждый раз видеть окно о регистрации... (хотя может есть в Autorunе параметр непоказываемости и нажатии OK)
скрипты загонять в ту же папку либо прописывать
Тут речь не шла о всех скриптах - это индивидуальный вариант для данного скрипта.
Кому что необходимо, тот тем и воспользуется.

Добавлено: Пт июн 04, 2010 13:06
MVV
А вариант написать скрипт, который будет регистрировать хелпер только в случае, если он еще не зарегистрирован?
Или как-то узнавать при попытке вызывать функцию (если это возможно), или же записывать при его регистрации че-нибудь в реестр или какой-нибудь файлик в профиле юзера (или пользовательский параметр в wincmd.ini, там места хватит всем, а тотал его точно удалять не будет).

Добавлено: Пт июн 04, 2010 13:10
Flasher
Andrey_A писал(а):Для меня более уместным один раз нажать регистрационный файл, где регистрируется не только хелпер, но десятка три библиотек.
A причём здесь ты? НAЗAРЕТ дал чётко понять, что это нужно для работы не на домашнем PC.
Andrey_A писал(а):хотя может есть в Autorunе параметр непоказываемости и нажатии OK
Я вот и сам удивился почему ты exe-шник без параметра запускаешь. Batya только писал: "TCWSHelp.exe /REGSERVER".
Andrey_A писал(а):Тут речь не шла о всех скриптах - это индивидуальный вариант для данного скрипта.
A, то есть другие скрипты, в которых будет учитываться Хелпер, ему запускать там не надо по-твоему? :D
Andrey_A писал(а):Кому что необходимо, тот тем и воспользуется.
В том-то и дело, что понадобится на любой машине может любой скрипт. :wink:

Добавлено: Пт июн 04, 2010 13:27
Batya
Лично я против встраивания регистрации в скрипт, но если это кому-то надо, нужно в скрипт дописать процедуру:

Код: Выделить всё

'Процедура регистрации 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.

А вместо строки

Код: Выделить всё

Set TCS = CreateObject("TCScript.Helper")
нужно записать:

Код: Выделить всё

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

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

P.S. Вроде где-то была утилита, которая заставляет TC выполнять команды, но не нашёл. Кто-нибудь ткнёт меня носом? Или, MVV, не наваяешь утилитку, которая из командной строки может засятавлять TC выполнять команды, в том числе с вызовом визуальных окон TC?

Добавлено: Пт июн 04, 2010 14:07
HA3APET
Batya
Спасибо за разъяснение. Всё понятно. Ещё и на будущее пригодится точно.

Добавлено: Пт июн 04, 2010 21:36
Flasher
Batya писал(а):P.S. Вроде где-то была утилита, которая заставляет TC выполнять команды, но не нашёл. Кто-нибудь ткнёт меня носом?
Оно? Или может эта?

Добавлено: Пн июн 07, 2010 11:20
Batya
Изменил процедуру регистрации TCScript.Helper - см. выше. Теперь используется утилита Sudo для возможности запустить регистрацию от имени администратора. Это нужно для Windows 7 и Vista с включённым UAC.

Добавлено: Пн июн 07, 2010 12:30
MVV
Batya писал(а):Кстати, пытался вместо TCScript.Helper использовать твой TCFS2.
Не сообразил, как можно вызвать cm_InternalAssociate с последующим подтверждением.
Интерфейсные окна TCFS2 поднять не может?
Команду cm_InternalAssociate из TCFS2 по идее можно вызвать, используя tcm(519). А вот управлять окном ассоциаций из TCFS2 уже не получится - она отправляет сообщения только главному окну ТК, а чтобы закрыть окно внутренних ассоциаций, нужно работать с ним (найти в нем нужное дочернее окно-кнопку и послать ему WM_LBUTTONDOWN и WM_LBUTTONUP - в дельфе идентификаторы кнопок динамические, поэтому просто отправить WM_COMMAND с wParam=1, как любому нормальному диалоговому окну, не получится, да и саму кнопку по идентификатору не выщемить, что сильно усложняет скриптописание).
Flasher писал(а):
Batya писал(а):P.S. Вроде где-то была утилита, которая заставляет TC выполнять команды, но не нашёл. Кто-нибудь ткнёт меня носом?
Оно? Или может эта?
Я знаю только TCMC.
Batya писал(а):Или, MVV, не наваяешь утилитку, которая из командной строки может засятавлять TC выполнять команды, в том числе с вызовом визуальных окон TC?
Что ты понимаешь под "вызовом визуальных окон"? Насколько я знаю, официально ТК поддерживает только WM_USER+51 с кодом cm-команды и WM_COPYDATA с em-командами и командой cd. Все это есть в TCMC. Но закрыть дочернее окно она тоже не поможет.

Добавлено: Пн июн 07, 2010 13:12
Flasher
MVV писал(а):Все это есть в TCMC. Но закрыть дочернее окно она тоже не поможет.
Я про него также подумал и, соответственно, про невозможность последующего закрытия. Поэтому не стал предлагать.

Добавлено: Вт мар 22, 2011 09:34
HA3APET

Код: Выделить всё

' Переименование секции [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, то скрипт не работает, а именно очищает содержимое этих файлов.
Как поправить скрипт?

Добавлено: Вт мар 22, 2011 11:15
Batya
HA3APET писал(а):Если файлы 1.bar и wincmd.ini в кодировки Юникод, а не ANSI, то скрипт не работает, а именно очищает содержимое этих файлов.

Как поправить скрипт?
Попробуй при вызовах метода OpenTextFile добавить 2 параметра:

Код: Выделить всё

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

Добавлено: Вт мар 22, 2011 11:26
HA3APET
Batya
Заработало!
Спасибо.

Добавлено: Чт июн 09, 2011 09:04
ask-rus
Кнопка отключения и включения TC-ассоциаций с перезапуском TC может быть построена без хелпера (портабельность)? Замена секции [Associations] на [-Associations] + перезапуск, без излишеств.

Добавлено: Чт июн 09, 2011 11:37
Flasher
Скрипт может. Тут всего-то - найти строку, сравнить и изменить, потом перезапуск.