Страница 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, то есть другие скрипты, в которых будет учитываться Хелпер, ему запускать там не надо по-твоему?

Andrey_A писал(а):Кому что необходимо, тот тем и воспользуется.
В том-то и дело, что понадобится на любой машине может любой скрипт.

Добавлено: Пт июн 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.
А вместо строки
нужно записать:
Код: Выделить всё
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
Скрипт может. Тут всего-то - найти строку, сравнить и изменить, потом
перезапуск.