Re[9]: Кликнуть в скрытое окно
От: Cannol  
Дата: 07.08.19 17:17
Оценка:
Здравствуйте, Carc, Вы писали:
C>чего то мне не нравится выше флаги
C>

C>If MOUSEEVENTF_ABSOLUTE value is specified, dx and dy contain normalized absolute coordinates between 0 and 65,535. The event procedure maps these coordinates onto the display surface. Coordinate (0,0) maps onto the upper-left corner of the display surface; coordinate (65535,65535) maps onto the lower-right corner. In a multimonitor system, the coordinates map to the primary monitor.
Ну да. Если неабсолютные координаты, тогда надо привязываться к предыдущей позиции мыши. Зачем это надо.


C>Чего та вычисления неясные?


Там я перевожу координаты клика внутри того скрытого окна (pt.x, pt.y) в координаты клика внутри рабочего стола (input.mi.dx, input.mi.dy). Те, что внутри окна — вот они:
    const int nSizeX = rcClip.right - rcClip.left;
    const int nSizeY = rcClip.bottom - rcClip.top;
    // Calculate the click coordinates for the target window.
    pt.x = Round(((double) relative_point->x / m_wGaugeWidth) * nSizeX) + rcClip.left;
    pt.y = Round(((double) relative_point->y / m_wGaugeHeight) * nSizeY) + rcClip.top;


C>// А вот тут что не нужно что ли координаты указывать?

C>
C>.…
C>>    ZeroMemory(&input,sizeof(INPUT)); //clear out input
C>>    input.type = INPUT_MOUSE;
C>>    input.mi.dwFlags = MOUSEEVENTF_LEFTUP; // mouse button up
C>>    SendInput(1,&input,sizeof(INPUT));
C>>}
C>>

Вероятно, по крайней мере необязательно. По крайней мере этот код с тремя этими SendInput() работает нормально, когда окно видимо.

C>>Не судьба, видимо, с IE подружиться.

C>Думаю, надо прощее быть…
C>Выносить функцию сенд-инпученья в отдельный модуль, и гонять ее тестами и смотреть что к чему.
C>Сдается мне всё должно работать, только нужно четко и аккуратно с параметрами и ремарками из МСДЫНъ.
C>А то там вон много чего про флаги в MSDN сказано, что координаты могут относиться только к основному монитору и все такое.
C>Плюс. Ну безусловно, коды возврата WinAPI функций надо проверять, в нашем случае SendInput. Ну заобязательно просто. Они много чего могут сказать, может что-то просто не отрабатывает и все тут.

Спасибо! Эти советы буду иметь в виду, но пока я смещаюсь в сторону Sciter. Слишком много времени потратил, и с учётом того, что при таком подходе "может запросто фильтровать такой искуственный ввод", и так далее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.