Оказывается это возможно. Для этих целей можно воспользоваться библиотекой 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.Register("SHELL32.DLL", "ShellExecute", "i=lssssl", "f=s", "r=l");
4. Использовать зарегистрированный метод ShellExecute следует так:
Wrap.ShellExecute(Window.Handle, '', '', '', '', 0);
// А вот так минимизируем окно
Wrap.ShellExecute(Window.Handle, '', '', '', '', 6);
Более детальная информация по dynwrap.dll с примерами использования: http://www.script-coding.info/dynwrap.html.
Полезная ссылка по этому поводу
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
По такому сценарию видимо и будем решать проблему. Жаль что не получилось проще.