Windows Script Host

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
Ciber SLasH
Сообщения: 209
Зарегистрирован: Сб авг 20, 2005 21:41
Откуда: С.-Петербург

Сообщение Ciber SLasH »

В принципе API-функции можно вызывать через RunDll32.exe, но получить возвращённое значение не получится :(

Просто были мысли на WSH создать оконный интерфейс, т.е. создать окно "CreateWindowEx", напихать в него элементов и обрабатывать события... Тогда можно было бы фактически не имея компилятора лабать проги с оконным интерфейсом на любом компе с виндами...
Аватара пользователя
Ciber SLasH
Сообщения: 209
Зарегистрирован: Сб авг 20, 2005 21:41
Откуда: С.-Петербург

Сообщение Ciber SLasH »

Не пойму, почему не работает следующий JScript-код:

Код: Выделить всё

var WSH_Shell = WScript.CreateObject("WScript.Shell");
var SysPath = WSH_Shell.ExpandEnvironmentStrings("%WinDir%") + "\\system32";
WSH_Shell.Run(SysPath+'\\Rundll32.exe shell32,ShellExecuteA 0,"","","'+SysPath+'\\calc.exe","","",5');
?
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

Я, блин, болею сейчас, так что не очень-то на меня рассчитывайте :(

По делу: минимальный код для проверки факта свершившейся установки Helpera в системе

Код: Выделить всё

Set TCS = CreateObject("TCSCRIPT.Helper")
TCS.About
Set TCS = Nothing
Чтобы она свершилась, пользователь во-первых должен иметь права записи в реестр. Кстати, командная строка неверно тут была упомянута, должна быть TCWSHelp.exe /REGSERVER (хотя для регистрации достаточно и простого запуска без командной строки). Тут есть важный момент: при использовании хелпера нужно быть уверенным, что он находится на том самом месте, где был при регистрации. CaptainFlint, это как раз твой случай, ругается именно на отсутствие файла EXE-сервера, а не на регисрацию. Ты его, часом не из архива запускал? Проверь.

PS CaptainFlint, ну и чего я тебе плохова сделал, а? Мыло мое вытри, плиз, из поста.
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

Volniy
Ты его, часом не из архива запускал? Проверь.
Нет, конечно. Сам о такой возможности подумал, уже всё это проверял (уже работал немного с подобными вещами, теперь к этому делу аккуратнее отношусь). Однако запуск TCWSHelp.exe /REGSERVER всё исправил! (Совсем слепой я стал, не вчитался, когда ридми читал, показалось, там REGISTER). Теперь всё работает, спасибо!
PS CaptainFlint, ну и чего я тебе плохова сделал, а? Мыло мое вытри, плиз, из поста.
Ой, блин, извини, пожалуйста... :( Не сообразил...
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

CaptainFlint
Однако запуск TCWSHelp.exe /REGSERVER всё исправил!
Дааа... Не ожидал от тебя такого :) У меня даже мысли не было посмотреть синтаксис приведенной тобой команды. Все-таки копи-паст великая вещь ;)

Ciber SLasH
Не пойму, почему не работает следующий JScript-код:
Я совсем не знаю, как работать с Rundll32. Что должно происходить? Приведи просто командную строку, которая работает.
По крайней мере, работает так:

Код: Выделить всё

var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.Run("calc.exe");
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

Batya
Не ожидал от тебя такого
Я сам от себя не ожидал такого. :)
Просто в ридми такой упор делался на то, что всё регистрится автоматом, что с явным указанием ключа я запустил так, лишь бы отделаться и проверить путь, который 100% ничего не изменит :) До копи-паста дело просто не успело дойти.
Аватара пользователя
Ciber SLasH
Сообщения: 209
Зарегистрирован: Сб авг 20, 2005 21:41
Откуда: С.-Петербург

Сообщение Ciber SLasH »

Вот, криво, но всё-таки работающий пример вызова API-функции MessageBoxA:

Код: Выделить всё

var WSH_Shell = WScript.CreateObject("WScript.Shell");
WSH_Shell.Run('Rundll32.exe user32.dll,MessageBoxA "API-функция: MessageBoxA"', 0x40)
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

Batya писал(а):Исполнитель функций 32разрядных библиотек[/url]
Это далеко не новинка, видел и покруче (поищи по словам "wsh API Toolkit OCX"), он и результат функций возвращает. У меня, кстати, есть один красивый Class c аналогичными делами, могу, если надо, впихнуть его в свой хелпер. А надо?

--

По поводу глюка автоматической регистрации. Похоже, он проявляется, если в полном пути к EXE есть пробелы (тут один на Английской странице уже заметил это дело и у меня тоже воспроизвелось оно). Учитывая тот факт, что авторегистрацию делаю не я, а сам компилятор, тут я ничем не могу помочь, хотя есть тут одна идейка...

--

PS Команды /REGSERVER и /UNREGSERVER - это не моя придурь, а стандартные команды (де)регистрации всех 32-битных EXE-серверов.
Можно, например, WinWord /REGSERVER испробовать, весьма прикольно выходит.
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

Volniy
По поводу глюка автоматической регистрации. Похоже, он проявляется, если в полном пути к EXE есть пробелы (тут один на Английской странице уже заметил это дело и у меня тоже воспроизвелось оно).
Первый раз, когда я экспериментировал, в пути, действительно, были пробелы. Но потом я решил на всякий случай без них, распаковал весь архив в C:\tmp\tcwshelp_b10\ - что в лоб, что по лбу.
Правда, теперь, уже после того, как сработал ключ /REGSERVER, авторегистрация начала работать (т.е. если сделать /UNREGSERVER (проверяю, действительно, скрипт перестаёт работать), а потом просто запустить TCWSHelp.exe, то регистрация нормально проходит, в том числе, когда путь с пробелами).
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

CaptainFlint писал(а):Правда, теперь, уже после того, как сработал ключ /REGSERVER, авторегистрация начала работать (т.е. если сделать /UNREGSERVER (проверяю, действительно, скрипт перестаёт работать), а потом просто запустить TCWSHelp.exe, то регистрация нормально проходит, в том числе, когда путь с пробелами).
У меня тоже так было. Непонятные какие-то дела. Я просто доку, наверное, перепишу.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Volniy
Это далеко не новинка, видел и покруче (поищи по словам "wsh API Toolkit OCX"), он и результат функций возвращает. У меня, кстати, есть один красивый Class c аналогичными делами, могу, если надо, впихнуть его в свой хелпер. А надо?
Наверное, надо.
Мне хочется того же, что и Ciber SLasH:
Просто были мысли на WSH создать оконный интерфейс, т.е. создать окно "CreateWindowEx", напихать в него элементов и обрабатывать события... Тогда можно было бы фактически не имея компилятора лабать проги с оконным интерфейсом на любом компе с виндами...
Где бы еще почитать про API-функции, желательно по-русски.

И еще... Что-то по поиску, который ты предложил, все скаченные архивы zip (примеры, ocx) не открываются. Что за архивы буржуи выкладывают?
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

Batya писал(а):Мне хочется того же, что и Ciber SLasH
Окна - это уж слишком. Как он их там будет субклассить в скриптах? У меня была идея конструктора форм. Тоесть задать набор сттандартных элементов, а уже пользователь сам выбирает, что из них показывать и в каком месте формы. Но потом посмотрел, что это геморрой весьма конкретный и отказался я от этой идеи.
Где бы еще почитать про API-функции, желательно по-русски.
Есть в сети немного, но в основном, на Английском, конечно. Привыкай. Или лучши купи хорошую книгу по API.
Что за архивы буржуи выкладывают?
Вот выложил тот, что есть у меня.
Аватара пользователя
Lev
Сообщения: 392
Зарегистрирован: Ср мар 02, 2005 16:34

Сообщение Lev »

Никак не могу разобраться с Буфером обмена. Создаю в буфере текст - "фыва", на всякий случай проверяю содержимое.

Код: Выделить всё

Dim TCS
Set TCS = CreateObject("TCSCRIPT.Helper")
TCS.SetTextToClip ("фыва")
msgbox TCS.GetTextFromClip
Начинаю вставлять - в одних программах - фыва
в других - ôûâà, думается тут каким-то боком примостился Юникод.
И никак не придумывается, чего надо сделать, чтобы везде было "фыва". :(
Может сам Хелпер должен быть подкручен?
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

Lev писал(а): Начинаю вставлять - в одних программах - фыва
в других - ôûâà, думается тут каким-то боком примостился Юникод.
И никак не придумывается, чего надо сделать, чтобы везде было "фыва". :(
Ты прав, это глюк Юникода. Там получается, что содержимое буфера обмена зависит от активной раскладки клавиатуры. Если она русская - все нормально, если нет - глюк. На данный момент я в хелпере не работаю с буфером напрямую, а только делаю обертку для готовых методов VB. Это они так работают. Аналогичная проблема и с методом SendKeystroke - если шлешь русский текст, то может быть послано такое же черте-че. Короче, проблема есть. Правда, ее можно уговорить одним стандартным рег-файликом, но это нежелательно. Я как-нибудь попробую переписать эти функции через WinAPI.
Ответить