Victor_Dobrov
|
Posted: Fri Feb 10, 2012 17:15 Post subject: |
|
|
Предлагаю скрипт переключения x32 <> x64 версий TC по клику на тексте 32 (или 64) за пунктом "Справка" (или последним в меню)
Code: | ' Перезапуск x32 <> x64. Закрыть 32-битный и запустить TC x64 (и наоборот). Для x86 только рестарт TC
' сохраните код в файл (напр. 1.vbs), скопируйте в папку (напр. %commander_path%\scripts) и запустите
' скрипт переименуется в SwitchTC32or64.vbs (можно изменить), в UserCmd.ini добавится эта команда,
' в меню добавляется последний пункт (32/64), который перезапускает TC с другой разрядностью
em_cmd = "SwitchTC32or64" 'имя скрипта и em_команды, можно изменить
Set WshShell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
commander_PATH = ExpStr("%COMMANDER_PATH%",0) : commander_INI = ExpStr("%COMMANDER_INI%",0)
Set TCS = CreateObject("TCScript.Helper")
If not IsObject(TCS) Then MsgBox "Script Helper ActiveX for Total Commander" & vbTab & VbCr & VbCr & "для регистрации в системе выполните:" & VbCr & "TCWSHelp.exe /REGSERVER",vbSystemModal + vbInformation,"Отсутствует компонент ActiveX" : WScript.Quit
If not TCS.IsRunningTC Then WScript.Quit 'скрипт запущен не из ТС
Set File = FSO.GetFile(WScript.ScriptFullName)
if FSO.GetBaseName(File) <> em_cmd then File.Name = em_cmd & ".vbs"
UserCmd = ExpStr(commander_INI,1) & "UserCmd.ini"
if FSO.FileExists(UserCmd) then txt = CleanLF(FSO.OpenTextFile(UserCmd,1).ReadAll) & vbNewLine else txt = ""
If InStr(txt, "em_" & em_cmd) = 0 Then FSO.OpenTextFile(UserCmd, 2,1).Write txt & "[em_" & em_cmd & "]" & vbNewLine & "cmd=" & ExpStr(WScript.ScriptFullName,1) & em_cmd & ".vbs"
Menu = commander_PATH & "\Language\" & TCS.INIRead(commander_INI,"Configuration","Mainmenu","wcmd_eng.mnu")
x64 = (ExpStr("%PROCESSOR_ARCHITEW6432%",0) = "AMD64" or ExpStr("%PROCESSOR_ARCHITECTURE%",0) = "AMD64")
str32 = "MENUITEM ""32"", em_" & em_cmd : str64 = "MENUITEM ""64"", em_" & em_cmd : exe = commander_PATH & "\totalcmd.exe"
if LCase(ExpStr(ExpStr("%COMMANDER_EXE%",0),2)) = "totalcmd64.exe" Then Mode = 64 Else Mode = 32
If Mode = 32 then if x64 then exe = commander_PATH & "\totalcmd64.exe" else str64 = str32
txt = CleanLF(FSO.OpenTextFile(Menu, 1).ReadAll) : res = txt
If InStr(txt, "em_" & em_cmd) > 0 Then
if Mode = 32 Then
If not InStr(txt, str64) > 0 Then res = Replace(txt, str32, str64,1,-1,1)
else
If not InStr(txt, str32) > 0 Then res = Replace(txt, str64, str32,1,-1,1)
end If
Else
If Mode = 32 Then res = txt & vbNewLine & str64 Else res = txt & vbNewLine & str32
End If
if res <> txt Then FSO.OpenTextFile(Menu, 2).Write res
Do While TCS.IsRunningTC
TCS.SendCommand "cm_Exit": WScript.Sleep 100 : n = n + 1
If n > 200 Then Exit Do
Loop
WshShell.Run (exe & " /i=" & commander_INI)
WScript.Quit
Function ExpStr(str, n) 'Раскрыть системные переменные, выделить имя файла или папки
if n = 1 then ExpStr = FSO.GetParentFolderName(str) & "\" else if n = 2 then ExpStr = FSO.GetFileName(str) else if n = 3 then ExpStr = FSO.GetBaseName(str) else ExpStr = WshShell.ExpandEnvironmentStrings(str)
End Function
Function CleanLF(AllText) 'Удаление лишних пустых строк в конце текста
Do While (Right(AllText, Len(vbNewLine)) = vbNewLine)
AllText = Left(AllText, Len(AllText) - Len(vbNewLine))
Loop
CleanLF = AllText
End Function |
Last edited by Victor_Dobrov on Sat Feb 11, 2012 10:16; edited 4 times in total |
|