101 (изменено: maksim32, 2018-03-29 16:52:25)

Re: WSH: обсуждаем DynamicWrapperX от YMP - 2

Parazit, пожалуйста.
Нет, не из-за выравнивания, BOOL в windows это int. Но есть и тип BOOLEAN: sizeof(BOOLEAN) = 1 байту. Размер структур, её членов и смещения лучше уточнять, например, я с помощью элементарной программки на C в VisualStudio проверяю.

typedef int BOOL;

https://msdn.microsoft.com/en-us/librar … s.85).aspx

102 (изменено: Parazit, 2018-03-29 18:15:53)

Re: WSH: обсуждаем DynamicWrapperX от YMP - 2

maksim32, а для чего вообще делается выравнивание?
Размер структуры должен быть чему-то кратен?

Т.е, если у меня есть член размером 8 байт,
то я должен все другие члены выравнивать под этот размер?

103 (изменено: maksim32, 2018-03-29 17:16:42)

Re: WSH: обсуждаем DynamicWrapperX от YMP - 2

Parazit, в языках C/C++ (на чём написаны функции WinApi) члены структур выравниваются для наиболее быстрого доступа к ним - если число в памяти попадает на границу, например 32-битного числа у 32-битного процессора, то загрузка числа в регистр процессора будет выполняться дольше.
https://ru.wikipedia.org/wiki/%D0%92%D1 … 1%8B%D1%85

Некоторые структуры в windows.h описаны с явно указанным выравниванием (#pragma pack), а в остальных случаях выравнивание равно размеру самого большого члена в структуре (кратного степени двойки).
https://msdn.microsoft.com/en-us/librar … s.60).aspx

Да, поэтому, структура SECURITY_ATTRIBUTES имела размер 12 на x32, т.к. выравнивание было 4 байта (размер каждого из членов по 4 байта), а на x64 24 байта, т.к. указатель PVOID занимает уже 8 байт и выравнивание членов структуры будет кратным 8-ми байтам.
Размер структуры также кратен выравниванию.

104

Re: WSH: обсуждаем DynamicWrapperX от YMP - 2

maksim32, спасибо, за информацию.

105

Re: WSH: обсуждаем DynamicWrapperX от YMP - 2

Что-то у меня выдаёт ошибку, что неподдерживаемый тип параметра.
Ни post, ни send  не могу послать.

Const WM_GETTEXT = &HD
Set Wrap = CreateObject("DynamicWrapperX")
Wrap.Register "USER32.DLL", "GetForegroundWindow", "f=s", "r=l"
Wrap.Register "USER32.DLL", "SendMessage", "i=lllr", "f=s", "r=l"
Title = Space(100)
res = Wrap.SendMessage(Wrap.GetForegroundWindow(), WM_GETTEXT , 100, Title)
MsgBox Title

106 (изменено: maksim32, 2018-04-14 23:32:17)

Re: WSH: обсуждаем DynamicWrapperX от YMP - 2

Потому что типа "r" не существует, в документации отсутствует: http://dynwrapx.script-coding.com/dwx/pages/types.php. Вот рабочие параметры для регистрации этих функций:

DWX.Register("user32","PostMessage","i=huhp","r=l"); // HWND,UINT,WPARAM,LPARAM; BOOL
DWX.Register("user32","SendMessage","i=huhp","r=p"); // HWND,UINT,WPARAM,LPARAM; LRESULT
DWX.Register("user32","GetForegroundWindow","r=h"); // void; HWND

107 (изменено: maksim32, 2018-04-14 23:35:12)

Re: WSH: обсуждаем DynamicWrapperX от YMP - 2

Обращайте внимание, что указатели имеют непостоянный размер в ОС различных разрядностей, поэтому возвращаемое значение GetForegroundWindow типа "l" будет работать только в 32-битных (x86) системах. Корректнее дескрипторам давать тип "h".
Также флага "s" не существует, поэтому "f=s" - это лишнее. Про флаги подробнее тут: http://dynwrapx.script-coding.com/dwx/p … gister.php

108 (изменено: Parazit, 2018-04-14 23:46:28)

Re: WSH: обсуждаем DynamicWrapperX от YMP - 2

maksim32, ну вот смотрите, я хочу послать сообщение.

var DWX = new ActiveXObject("DynamicWrapperX.2"), a = new ActiveXObject("AutoItX3.Control"), s;
s = a.WinGetHandle("[CLASS:TTOTAL_CMD]", "");
// echo(s);

DWX.Register("user32.dll", "PostMessage", "i=hull");
DWX.PostMessage(s, 1075, 501, 0);

И у меня выдаёт ошибку, что тип аргумента непреводим к типу параметра.

109

Re: WSH: обсуждаем DynamicWrapperX от YMP - 2

new ActiveXObject("AutoItX3.Control").WinGetHandle вроде бы возвращает строку, а вы её как дескриптор ("h") передаёте первым параметром. Преобразовать надо строку к дескриптору, судя по описанию ошибки. И вы снова путаете типы: размер WPARAM и LPARAM у функции PostMessage зависит от разрядности ОС.

110

Re: WSH: обсуждаем DynamicWrapperX от YMP - 2

Первый код работает с такими переделками:


Const WM_GETTEXT = &HD
Set Wrap = CreateObject("DynamicWrapperX")
Wrap.Register "USER32.DLL", "GetForegroundWindow", "r=h"
Wrap.Register "USER32.DLL", "SendMessageW", "i=huhW", "r=h"
Title = Space(100)
res = Wrap.SendMessageW(Wrap.GetForegroundWindow(), WM_GETTEXT , 100, Title)
MsgBox Title

111

Re: WSH: обсуждаем DynamicWrapperX от YMP - 2

Чё-то не работает в PSPad-скриптах.
Jscript срабатывает редко, а VBScript вообще никах. Возращает 0.

Наверное, в этом редакторе какая-то защищённая оболочка.

112

Re: WSH: обсуждаем DynamicWrapperX от YMP - 2

Не понимаю, о чём речь. Не пользуюсь этим редактором. Что это за скрипты?

113

Re: WSH: обсуждаем DynamicWrapperX от YMP - 2

Ну скрипты для работы с текстом.
Там он предоставляет WSH, и можно создавать Jscript и VBScript скрипты.
При вызове функции обратного вызова, вообще ошибку выдаёт.

114 (изменено: alexii, 2018-09-30 23:42:31)

Re: WSH: обсуждаем DynamicWrapperX от YMP - 2

YMP, после установки приложения в каталоге установки создаётся каталог Script с подкаталогами:

JScript
JScript.Compact
VBScript
XML

Внутри каталога VBScript лежат три примера/образца скриптов:

ListTransform.vbs
PrinAll.vbs
VBIndent.vbs

После активации в настройках \Settings\Program Settings…, вкладка System integration, пункта «Integrated scripting support (WSH)» (никаким WSH на самом деле там, как я понимаю, даже и близко не пахнет, гольный VBScript/JScript & etc):

+ открыть спойлер

https://i.imgur.com/ber0amI.png

в меню появляется новый пункт Scripts. Ссылка на экземпляр объекта редактора создаётся как вызов функции:

Set editor = newEditor()

.

В документации скриптам посвящены разделы Script User's Guide, Script Language Reference и PSPad Actions.

115

Re: WSH: обсуждаем DynamicWrapperX от YMP - 2

Parazit, теперь Вы можете излагать Ваш код и описывать, что он должен был делать.

116

Re: WSH: обсуждаем DynamicWrapperX от YMP - 2

Спасибо, alexii, разобрался. Сначала смотрел портабельную версию, там нет этих папок.

С callback какие-то проблемы только в VBS. Пока не ясно, в чём дело. В остальном вроде всё нормально работает.

117

Re: WSH: обсуждаем DynamicWrapperX от YMP - 2

Это я немного натупил, вроде всё работает.

118 (изменено: Parazit, 2018-10-01 18:58:44)

Re: WSH: обсуждаем DynamicWrapperX от YMP - 2

Del

119

Re: WSH: обсуждаем DynamicWrapperX от YMP - 2

Вы, видимо, не в курсе, что переменные, объявленные через var внутри функции, являются локальными? Из другой-то функции их не видно.

120

Re: WSH: обсуждаем DynamicWrapperX от YMP - 2

Проблемы с callback в VBS оказались тоже из-за области видимости переменных. В JS и VBS разные умолчания насчёт переменных внутри функций. Так что в VBS нужно объявлять глобально те переменные, которые используются в нескольких функциях.