Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Windows Script Host
Goto page Previous  1, 2, 3 ... 7, 8, 9 ... 25, 26, 27  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
mozers



Joined: 16 Dec 2004
Posts: 82
Location: с Нижнего

Post (Separately) Posted: Fri Feb 02, 2007 23:22    Post subject: Reply with quote

Quote:
m> 3. Какого хрена cm_ConfigChangeIniFiles открывает файлы только в
m> Блокноте ? Умнее было бы использовать редактор, заданный в
m> параметре "Editor=" wincmd.ini И уж если там ничего не задано то
m> тогда только notepad.
m> В свете последних решений, к wincmd.ini и ftp.ini можно бы добавить
m> usercmd.ini

давно сэра Гислера об этом вопрошают и упрошают, он клянётся и божится, что мы
на самом деле счастья своего не понимаем, что это супер-удобно и супер-надёжно:
как же, вдруг на какой-то системе не окажется того самого редактора, который ты
собственными ручками указал в настройках; как же ты тогда INI-файлики-то
отредактируешь...


В продолжение этого диалога появился ЭТОТ СКРИПТ

Теперь пишем в usercmd.ini
Code:
[em_configChangeIniFiles]
cmd=%COMMANDER_PATH%\Utils\WSH\em_configChangeIniFiles.js


И заменяем в WINCMD.MNU так задолбавшую команду на нашу:
Code:
MENUITEM "Р&едактировать файлы конфигурации", em_configChangeIniFiles


Радуемся жизни Smile
Back to top
View user's profile Send private message
Bomm



Joined: 15 Jan 2005
Posts: 245
Location: Москва

Post (Separately) Posted: Mon Feb 05, 2007 18:14    Post subject: Reply with quote

Я в скриптах не большой специалист, скорей маленький Smile
Смотрю. с помощью данного скрипта (спасибо mozers за него!!!) у меня не загружается <файл>.mnu
Начал анализировать и выяснил, что команда ReadINI чувствительно к реестру, и в скрипте написано
var wincmd_mnu = ReadINI (wincmd_ini, 'MainMenu','');
а у меня в wincmd.ini - 'Mainmenu'
Причем я не сам вроде бы писал, это TC записал так Wink
Исправил - заработало!

Непорядок! Надо как то избавится от регистра, я не знаю даже, если ли тут команды перевода в другой регистр
Специалисту виднее
А вдруг вообще окажется 'mainmenu'?? Crying or Very sad

Вот такое, как мне кажется, конструктивное замечание...
_________________
Юрий Бомштейн
Back to top
View user's profile Send private message
mozers



Joined: 16 Dec 2004
Posts: 82
Location: с Нижнего

Post (Separately) Posted: Tue Feb 06, 2007 00:04    Post subject: Reply with quote

2Bomm
Спасибо за верное замечание Smile Вот НОВАЯ ВЕРСИЯ
Если бы у Вас стоял Script Helper (c)Volniy то эту ошибку Вы бы не обнаружили Wink
Back to top
View user's profile Send private message
aLexx



Joined: 14 Mar 2005
Posts: 442
Location: Новокузнецк

Post (Separately) Posted: Sun Jun 24, 2007 22:32    Post subject: Reply with quote

Очень долгое время пользуюсь скриптом от Volniy для маркировки файлов через один (зеброй).
Но меня очень выламывало перед вызовом этого скрипта выделять всё, а уж потом запускать его.
Творчески подойдя к процессу, слегка переделал этот скрипт.

Code:

' File:         ZebraMark.vbs
' Description:  Помечает все файлы и каталоги через один.
' Requirements: WSH Helper for TC by Volniy
' Copyright:    (c) 2007, Volniy, aLexx

Option Explicit
Dim FSO, ListFile, SelFile, TCS
Dim File1, File2, Cnt, Buf
Const ForWriting = 2
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TCS = CreateObject("TCScript.Helper")

TCS.SendCommand ("cm_SelectAll")  'Выбрать всё
TCS.SendCommand ("cm_CopyFullNamesToClip")  'Копируем в буфер
Set ListFile = FSO.OpenTextFile("1.txt", ForWriting, True) 'Сохраняем в файл
ListFile.Write TCS.GetTextFromClip
ListFile.Close
Set ListFile = FSO.OpenTextFile("1.txt", 1)
Do While Not ListFile.AtEndOfStream
  SelFile = ListFile.ReadLine
  Cnt = Cnt + 1
  File2 = FSO.GetFileName(SelFile)
  If Cnt Mod 2 = 0 Then
     Buf = Buf & SelFile & vbNewLine
  End If
Loop
ListFile.Close
TCS.ClearClip
TCS.SetTextToClip CStr(Buf)
TCS.SendCommand "cm_LoadSelectionFromClip", True
FSO.DeleteFile("1.txt")

Set ListFile = Nothing
Set FSO = Nothing
Set TCS = Nothing
MsgBox "Выделено ""зеброй"":): " & Cnt \ 2 & " файлов и каталогов.", vbInformation, "Завершено!"
WScript.Quit
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Mon Jun 25, 2007 11:07    Post subject: Reply with quote

aLexx wrote:
.
Творчески подойдя к процессу, слегка переделал этот скрипт.


Ну и я тоже переделал Rolling Eyes . Вариант без использования промежуточного файла:

Code:
' File:         ZebraMark-2.vbs
' Description:  Помечает все файлы и каталоги через один.
' Requirements: WSH Helper for TC by Volniy
' Copyright:    (c) 2007, Volniy, aLexx

Option Explicit
Dim List, TCS, Cnt, Buf
Set TCS = CreateObject("TCScript.Helper")

TCS.SendCommand ("cm_SelectAll")  'Выбрать всё
TCS.SendCommand ("cm_CopyFullNamesToClip")  'Копируем в буфер
List = Split(TCS.GetTextFromClip,vbNewLine) ' Получаем массив имен
For Cnt=LBound(List) To UBound(List)
  If Cnt Mod 2 = 1 Then
     Buf = Buf & List(Cnt) & vbNewLine
  End If
Next
TCS.SetTextToClip CStr(Buf)
TCS.SendCommand "cm_LoadSelectionFromClip", True

Set TCS = Nothing
MsgBox "Выделено ""зеброй"":): " & Cnt \ 2 & " файлов и каталогов.", vbInformation, "Завершено!"
WScript.Quit
Back to top
View user's profile Send private message
aLexx



Joined: 14 Mar 2005
Posts: 442
Location: Новокузнецк

Post (Separately) Posted: Mon Jun 25, 2007 13:15    Post subject: Reply with quote

Красава! А сразу нельзя было так сделать? Smile

Зато вот этот кусок из моего скрипта можно использовать для записи выделения
(без содержания вложенных папок) в текстовый файл:

Code:

' File:         SaveMark.vbs
' Description:  Сохраняет выделение в файл. Параметром идёт имя файла.
' Requirements: WSH Helper for TC by Volniy
' Copyright:    (c) 2007, aLexx

Option Explicit
Dim FSO, TCS, ListFile
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TCS = CreateObject("TCScript.Helper")

If WScript.Arguments.Count > 0 Then
  TCS.SendCommand ("cm_CopyFullNamesToClip")  'Копируем выделение в буфер
  Set ListFile = FSO.OpenTextFile(WScript.Arguments(0), 2, True) 'Сохраняем в файл
  ListFile.Write TCS.GetTextFromClip
  ListFile.Close
End If

Set ListFile = Nothing
Set FSO = Nothing
Set TCS = Nothing
WScript.Quit


Это только пинок для творчества. Можно добавить, куда сохранять получаемый текстовый файл
(даже вторым параметром), можно сделать имя файла по имени каталога и т.д.
Back to top
View user's profile Send private message
Pazzi



Joined: 25 Aug 2007
Posts: 5

Post (Separately) Posted: Sat Aug 25, 2007 03:38    Post subject: Reply with quote

Привет всем. начал вот познавать WSH. радуюсь не нарадуюсь, как можно себе жизнь упростить встроенными в тотал скриптами! конечно не все гладко и поэтому у меня сходу несколько вопросов.

1. скрипт у меня получает список выделенных файлов через %L и копирует в цикле эти файлы в другое место file.copy("path")... таким образом на сколько я понял каждый следующий файл начинает копироваться ещё до того как закончит копироваться предыдущий, и общее время копирования сильно увеличивается. можно ли как-то заставить скрипт ждать пока не закончится копирование одного файла и только потом начинать копирование следующего?

2. Можно ли как-то интерактивно отображать состояние копирования?

3. После копирования вывожу вывожу сообщение, что все успешно закончилось WScript.Echo(finalReport); так сообщение появляется свернутым или просто на заднем плане, на таскбаре кароче мигает,а фокус у тотала. переделал вывод сообщения на var vbSystemModal=4096; wsh.Popup(finalReport,0,"Success report",vbSystemModal); так сообщение конечно появляется поверх всех окон, но фокус всеровно теряет, что оч странно для модального окна... в чем проблема?
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Sat Aug 25, 2007 23:02    Post subject: Reply with quote

1. Вряд ли время копирования так уж увеличится, если копироваться будут одновременно несколько файлов (если конечно источником файлов будет не CD/DVD). Я, конечно, не знаю, как там у тебя выдается команда на копирование, но если обрабатывать все файлы в одном скрипте, то копирование будет происходить последовательно - пока предыдущий не скопируется, следующий не начнет копироваться.

2. Во первых, а что такое состояние копирования? Если это число уже скопированных файлов, то можно время от времени показывать тот же popup с этим числом, время показа установить по минимуму (1 секунда).

3. vbSystemModal пришла еще с 16-битного API. Там это был действительно модальный результат - все приложения были недоступны пока не закроется мессага, показанная с такой константой. Ну, а в Win32 vbSystemModal гарантирует только, что окно сообщений будет показано поверх окон всех других приложений, но не более того:
Документация MSDN wrote:
vbSystemModal = 4096
System modal. On Win16 systems, all applications are suspended until the user responds to the message box. On Win32 systems, this constant provides an application modal message box that always remains on top of any other programs you may have running.
Back to top
View user's profile Send private message
Pazzi



Joined: 25 Aug 2007
Posts: 5

Post (Separately) Posted: Sun Aug 26, 2007 16:03    Post subject: Reply with quote

1. цикл приблизительно такой:
Code:

do
{
   nextFile=FilesList.Readline();

   var fFile=fso.GetFile(nextFile;

   fFile.Copy(path,false);
   WScript.Sleep(200);
}
while(!FilesList.atEndOfStream)

FilesList - это то что параметром %L передается.

может конечно они и последовательно передаются... но вот без Sleep все-таки было дольше=)

2. в идеале конеш чтоб показывалось и для каждого файла, какая его часть уже скопировалась) может можно как-то копировать вызовом виндосной апи-функции с сопутствующим открытием стандартного окна копирования?

3. тоесть модальным окно никак не сделать?
а фокус почему может терятся?
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Mon Aug 27, 2007 18:35    Post subject: Reply with quote

Pazzi wrote:
1. цикл приблизительно такой:
Code:
do
{
   nextFile=FilesList.Readline();

   var fFile=fso.GetFile(nextFile;

   fFile.Copy(path,false);
   WScript.Sleep(200);
}
while(!FilesList.atEndOfStream)


Нету никакого смысла в создании объекта File если нужно только скопировать файл. FSO имеет для этого специальный метод:
Code:
{
   nextFile=FilesList.Readline();
   fso.CopyFile (nextFile, path, false);
   WScript.Sleep(200);
}

Насчет задержки могу только предположить (IMHO), что системе нужно некоторое время, чтобы посливать файловые буфера на диск.

Pazzi wrote:
2. в идеале конеш чтоб показывалось и для каждого файла, какая его часть уже скопировалась) может можно как-то копировать вызовом виндосной апи-функции с сопутствующим открытием стандартного окна копирования?


В принципе стандартный шелловский диалог копирования можно вызывать, просто вызывая шелловскую функцию копирования. Для этого даже существует специальный объект:
Code:
var oShell = WScript.CreateObject("Shell.Application");

готового примера использования не дам, я как-то не пользовался сам. Так что примеры поищи в сети.
Вот, например. Только что нашел Гуглом: http://www.script-coding.info/WSH/Shell.html
Пример взят именно оттуда (правда тут VB синтаксис, но думаю разберешься):
Code:
Set objShellApp = CreateObject("Shell.Application")
Set objFolder = objShellApp.NameSpace("C:\WINDOWS")
objFolder.CopyHere("C:\AUTOEXEC.BAT")


Pazzi wrote:
3. тоесть модальным окно никак не сделать?

Из скрипта? Это врядли. Скриптовые возножности в этом плане очень сильно ограничены. Это же фактически набор команд, при чем тут визуальный интерфейс? Ну мессадж бокс можно показать, ну окошко ввода строки, и это практически все. Хочешь GUI из скрипта - добавляй внешние визуальные объекты. Хотя, имхо, тут уж будет естественнее переходить на какой-то из языков программирования, позволяющий создавать графический интерфейс.

Pazzi wrote:
а фокус почему может терятся?

А хз, видимо какое-то приложение затребовало его. У тебя же много чего одновременно работает. Кстати, я попробовал у себя запустить подобный скрипт и у меня такой потери фокуса после показа мессаги не происходит...
Back to top
View user's profile Send private message
Pazzi



Joined: 25 Aug 2007
Posts: 5

Post (Separately) Posted: Mon Aug 27, 2007 22:49    Post subject: Reply with quote

Спасибо за помощь, Volniy!
и за хелпер тоже респект)
Back to top
View user's profile Send private message
Pazzi



Joined: 25 Aug 2007
Posts: 5

Post (Separately) Posted: Fri Sep 07, 2007 21:17    Post subject: Reply with quote

не работает пример из книги Борна (самый последний в chapter 9).
ошибка возникает на строчке
Code:
oIE.Document.ValidForm.fRemark.Value = "No remarks"

пишет "обьект не поддерживает это свойство или метод: 'Document.ValidForm' "
кто-нибудь знает в чем проблема?
как обращаться к элементам формы?
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Fri Dec 14, 2007 10:20    Post subject: Reply with quote

"Нда... Давно не брал я шашки в руки"

Pazzi
Попробуй так:
Code:
oIE.Document.GetElementByID("fRemark").Value = "No remarks"

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Victor_Dobrov



Joined: 15 Jul 2008
Posts: 50

Post (Separately) Posted: Wed Jul 23, 2008 05:46    Post subject: Reply with quote

Сделал скрипт, переключающий фильтры или показывающий в тек. панели файлы того же типа, который перетащили на кнопку.

Code:
[Buttonbar]
button=Wcmicons.dll,47
cmd=SwitchFilter.vbs
param=Исполняемые
menu=SwitchFilter


Code:
'SwitchFilter.vbs   (требуется установленный Script Helper ActiveX for TC)
'Параметры: шаблон поиска или фильтр. Если шаблон поиска содержит пробелы, заключите его в кавычки.
'Обычный клик по кнопке скрипта установит/выключит фильтр/шаблон в текущей панели.
'Если на кнопку перетащить файл, в панели остануться только объекты того же типа.

Set TCS = CreateObject("TCSCRIPT.Helper")

[sFilter]="имитация ключа ini-файла"
   sFilter="*.exe"
   sFilter = Replace(sFilter, Chr(34),"")

If WScript.Arguments.Count > 0 Then    'запуск без параметров переключает последний фильтр
   sFilter = WScript.Arguments(0)
   If CreateObject("Scripting.FileSystemObject").FileExists(sFilter) Then sFilter = "*." + LCase(Left(Split(sFilter, ".")(Ubound(Split(sFilter, "."))), Sgn(Ubound(Split(sFilter, "."))) * Len(Split(sFilter, ".")(Ubound(Split(sFilter, "."))))))
   TCS.INIWrite WScript.ScriptFullName, "sFilter", "sFilter", Chr(34) + sFilter + Chr(34)    'запомнить фильтр
End If

   If InStr(sFilter,"*") = 0 Then sFilter = Chr(62) & sFilter

If TCS.GetFilter(TCS.GetSrcPath) <> sFilter Then
   TCS.SendCommand "cm_SrcUserDef"
   TCS.SendKeystroke sFilter & "{ENTER}"
Else
   TCS.SendCommand "cm_SrcAllFiles"
End If
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Wed Jul 23, 2008 10:11    Post subject: Reply with quote

Интересный подход.

Только что-то уж больно заморочено определяется расширение файла.
Гораздо проще использовать метод GetExtensionName объекта FileSystemObject.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... 7, 8, 9 ... 25, 26, 27  Next
Page 8 of 27

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group