Страница 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] писал(а):если хочется
"Очень", всю жизнь "только об этом и мечтал"... :wink:

Добавлено: Вт июн 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. :D