Публикация

Вызов WinAPI-функций из JScript

Оказывается это возможно. Для этих целей можно воспользоваться библиотекой dynwrap.dll (сайт-источник: http://ourworld.compuserve.com/homepages/Guenter_Born/WSHBazaar/WSHDynaC...).

Что необходимо сделать:
1. Скачать архив (см. "Прикрепленные файлы" или по след. ссылке http://ourworld.compuserve.com/homepages/Guenter_Born/WSHBazaar/dynawrap...)

2. Распаковать его, скопировать dynwrap.dll в "C:\WINDOWS\system32" и зарегистрировать библиотеку:
regsvr32.exe "C:\WINDOWS\system32\dynwrap.dll"

3. В скрипте пишем след. код (в этом примере я объявляю API-функцию ShellExecute)

Wrap = System.CreateObject("DynamicWrapper");
Wrap.Register("SHELL32.DLL", "ShellExecute", "i=lssssl", "f=s", "r=l");

4. Использовать зарегистрированный метод ShellExecute следует так:

// Делаем окну SW_HIDE
Wrap.ShellExecute(Window.Handle, '', '', '', '', 0);

// А вот так минимизируем окно
Wrap.ShellExecute(Window.Handle, '', '', '', '', 6);

Более детальная информация по dynwrap.dll с примерами использования: http://www.script-coding.info/dynwrap.html.

Нравится

Поделиться

7 комментариев

Не смог использовать на Windows 7 x64.

Полезная ссылка по этому поводу
http://www.script-coding.com/dynwrap.html

У меня остался только вопрос как возвращать апишные структуры из API в JS (например RECT из GetWindowReсt)
Пробовал бегло - не получилось. Но решение должно быть

"Alexandr Kravchuk" написал:Не смог использовать на Windows 7 x64.

А в чём проблема была? Если в регистрации dll, то это может помочь?

Добрый день.
Существует библиотека mydll.dll с функцией
int VerifyParams([In] string aa, [In, Out] StringBuilder bb, [Out] uint cc);

Пытаюсь объявить ее как:
Wrap.Register("mydll.dll", "VerifyParams", "i=srr", "f=s", "r=l");

Вызываю:
var AA = "123";
var Error = Wrap.VerifyParams(AA, BB, CC);

Error благополучно меняет значение в зависимости от значения АА. A вот BB и CC остаются неизменными...

Что то делаю не так?
Немного даже уточню вопрос. Все получается замечательно если функция возвращает один параметр. В моем случае возвращаются несколько параметров (Error, BB, CC). Dynwrap это вроде должен позволять судя по примеру про окно получения текста(http://www.script-coding.com/dynwrap.html), но пока не выходит на java. Действительно ли можно возвращать несколько параметров?

Здравствуйте, Виктор.

К сожалению, библиотека dynwrap.dll разработана сторонними разработчиками, поэтому 100% ответа на Ваш вопрос Вам дать не смогу.
Попробуйте создать наиболее простую функцию, которая возвращает несколько значений, и протестировать её вызов.
Если в данном максимально упрощенном варианте функции будет возвращен только первый параметр - значит,данная библиотека не поддерживает возвращение нескольких параметров.
Возможно есть варианты другого варианта логики работы функции для достижения тех же результатов?

"Олейник Дмитрий" написал:Если в данном максимально упрощенном варианте функции будет возвращен только первый параметр - значит,данная библиотека не поддерживает возвращение нескольких параметров.

Насколько понял из описания проблемы, таким образом подключенная функция вообще не умеет возвращать значения в параметрах, а только в результате. В приведенном примере AA - входящий параметр.

Возможно, решением будет написание полноценной COM-dll, которая будет вызывать функцию из этой.

Добрый день!

"Олейник Дмитрий" написал:Попробуйте создать наиболее простую функцию

К сожалению это закрытая библиотека стороннего разработчика.

"Зверев Александр" написал:решением будет написание полноценной COM-dll

По такому сценарию видимо и будем решать проблему. Жаль что не получилось проще.

Показать все комментарии