Страница 6 из 11
Добавлено: Пт июн 10, 2011 17:33
Batya
Flasher писал(а):Понимаю, но это так мелочно, чтобы использовать целую утилиту для такой ерунды неоправданно. В любом случае Alt+F4 у себя никто не меняет. Это стандарт.
Эта "целая" утилита весит меньше 3 кб, и она портабельна.
А SendKeys я не люблю, т.к. могут быть проблемы, если скрипт вешать на горячую клавишу (особенно, в данном случае, с использованием Alt).
Добавлено: Пт июн 10, 2011 17:38
ask-rus
Batya писал(а):Сильно не извращаясь, получилось так
Спасибо, всё происходит очень быстро и, самое главное, никаких мерцаний
лишних диалогов.
Flasher писал(а):P.S. Дважды тыкать на одну ошибку вовсе не обязательно.
А никто дважды и не тыкал.
Добавлено: Пт июн 10, 2011 17:39
Flasher
Batya
Т.е. проблема в совпадении модификатора? Ясно. Для личного пользования достаточно просто его не использовать с Alt. Хотя не уверен, что и тут будет проблема, проверю ещё.
ask-rus писал(а):А никто дважды и не тыкал.
Красным выделено. Али не видно?
Добавлено: Пт июн 10, 2011 17:47
Batya
Flasher писал(а):Т.е. проблема в совпадении модификатора?
Честно, не помню.
Вроде, могут быть проблемы наложения сочетания клавиш вызова скрипта и клавиш, нажимаемых уже в скрипте. Скрипт вызывается при нажатии горячей клавиши, а не при отпускании. Соответственно, клавиши в скрипте уже нажимаются в тот момент, когда пользователь ещё не отпустил горячую клавишу вызова скрипта. Отсюда могут быть глюки.
Добавлено: Пт июн 10, 2011 17:51
Avada
ask-rus
Flasher
По поводу ошибок, если хочется, переходите в личку и разбирайтесь в их количестве и виде. А здесь — всё.
Добавлено: Пт июн 10, 2011 17:58
Flasher
Batya
Понятно. Примерно так и думал. Скажем, кнопочникам и менюшникам это не грозит. В общем, ещё поэкспериментирую.
[size=75]Avada[/size] писал(а):если хочется
"Очень", всю жизнь "только об этом и мечтал"... 
Добавлено: Вт июн 14, 2011 00:04
HA3APET
Я нашёл способ как менять иконку не вызывая окон. Всё оказалось просто. Команда openbar обновляет иконки.
В итоге у нас минус одно окно и всё стало на много красивее.
Код: Выделить всё
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%\default.bar"
Str1 = "%COMMANDER_PATH%\Icons\icon.icl,54"
Str2 = "%COMMANDER_PATH%\Icons\icon.icl,55"
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, False, -1).ReadAll
Text2 = FSO.OpenTextFile(F2, 1, False, -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, False, -1).Write Text1
FSO.OpenTextFile(F2, 2, False, -1).Write Text2
With TCS
.LockTC True
.SendCommand "cm_InternalAssociate"
.SendKeystroke "{Enter}"
.UserCmd "em_default.bar"
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
em_default.bar - это openbar %commander_path%\Default.bar (бар на котором находится иконка)
А хелпер регистрируется по нажатию на туже кнопку вкл\выкл вн ассоц, через TCMC
Добавлено: Вт июн 14, 2011 00:17
Flasher
Вариант с
Openbar как-то сам напрашивался, но в голову почему-то раньше не приходил, хотя лично мне для данной ситуации не нужен, я из меню вызываю команду. Но в другом месте пригодится. Спасибо за логичную находку.
Доб.: Не, не пригодилось - оказалось, что влияет только на содержимое тулбара, а не размер иконок...
HA3APET писал(а):А хелпер регистрируется по нажатию на туже кнопку вкл\выкл вн ассоц, через TCMC
Зачем регистрировать Хелпер, если можно просто через TCMC вызывать нужные команды? Советую использовать алгоритм
скрипта Batya, чтобы свести дело к полной портабельности.
Кстати, я совершенно не вижу смысла в применении
GetAbsolutePathName. Достаточно оставить
CreateObject("WScript.Shell").ExpandEnvironmentStrings(Fn)
Для себя я сделал бескнопочный вариант с TCFS2:
Код: Выделить всё
' Вкл\выкл внутренние ассоциации в TC
'==================================
Dim WSH
Set WSH = CreateObject("WScript.Shell")
Str1 = "[-Associations]"
Str2 = "[Associations]"
INI = WSH.ExpandEnvironmentStrings("%COMMANDER_PATH%\Wincmd.ini")
Text = CreateObject("Scripting.FileSystemObject").OpenTextFile(INI, 1).ReadAll
If InStr(1, Text, Str1, 1) > 0 Then
Text = Replace(Text, Str1, Str2, 1, 1, 1)
Else
Text = Replace(Text, Str2, Str1, 1, 1, 1)
End If
With CreateObject("Scripting.FileSystemObject")
.OpenTextFile(INI, 2).Write Text
.OpenTextFile(INI, 1).Close
End With
WSH.Exec("%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef tcm(519)")
WScript.Sleep 10
WSH.SendKeys "~"
Set WSH = Nothing
WScript.Quit
+ Окно мелькает очень быстро.
Добавлено: Чт июн 16, 2011 14:44
ask-rus
Flasher писал(а):Для себя я сделал бескнопочный вариант с TCFS2:
Работает? У меня стерлись ассоциации.
Добавлено: Чт июн 16, 2011 15:03
Flasher
Работает чётко. К тому же это Батин кусок кода по правке ini и функции поиска. До этого ничего не стиралось? В конец ini лишние строки не дописываются?
Добавлено: Чт июн 16, 2011 15:14
ask-rus
Flasher писал(а):До этого ничего не стиралось?
Нет.
Flasher писал(а):В конец ini лишние строки не дописываются?
Нет, только заголовок секции ([Associations]) без содержимого спустился в конец *.INI. Активировать скрипт снова уже побаиваюсь.
Добавлено: Чт июн 16, 2011 15:18
Flasher
ask-rus писал(а):Нет, только заголовок секции ([Associations]) спустился в конец *.INI.
Ищи или подсвети поочерёдно оба варианта
[-ass и
[ass.
ask-rus писал(а):Активировать скрипт снова уже побаиваюсь.
Сделай резервную копию wincmd.ini, чтобы не бояться. Кроме одной секции никуда ничего не исчезнет всё равно.

Добавлено: Чт июн 16, 2011 15:33
ask-rus
Какие-то непонятки, сейчас уже не затирает, а открывает конфиг.
Код: Выделить всё
[-Associations]
Filter1=*.txt
Filter1_open=D:\Totalcmd\SOFT\Notepad++\notepad++.exe "%1"
[Associations]
Ещё до этого открывался диалог внутренних ассоциаций, но без подтверждения.
Добавлено: Чт июн 16, 2011 15:40
Flasher
ask-rus писал(а): сейчас уже не затирает, а открывает конфиг
Не понял..

ask-rus писал(а):Ещё до этого открывался диалог внутренних ассоциаций, но без подтверждения.
Производительности компу не хватает.
WScript.Sleep
10 - вместо единицы пробуй 6, 5, 4, 3, 2.
Добавлено: Чт июн 16, 2011 15:48
ask-rus
Flasher писал(а):Не понял..
Скрипт жмем, открывается Wincmd.ini.
