Здравствуйте, Cannol, Вы писали:
C>Здравствуйте, Carc, Вы писали:
C>>Можно юзать SendInput — обычно работает.
C>Да, его и использую больше всего.
C>Я писал:
C>>Т.е., после вызова SetCursorPos() я всё равно пробовал отправлять сообщения о нажатии вместе с координатами клика (pt.x, pt.y).
C>>Так всё равно не работает.
C>Уже более понятно с сообщением о координатах, сейчас без всякого SetCursorPos() управляюсь. Когда окно физически видно — всё отлично. Но снова, как только окно делается скрытым или выводится за пределы рабочего стола — ввод не ловится в том окне. Увы:
C>C>...
C>else if (byCodeOption == 1)
C>{
C> #define ABSOLUTE_XY_MAX 65535
C> INPUT input={0};
C> // left movement
C> int screenX = GetSystemMetrics(SM_CXSCREEN);
C> int screenY = GetSystemMetrics(SM_CYSCREEN);
C> input.type = INPUT_MOUSE;
C> input.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE; // mouse movement
C> input.mi.dx = pt.x * (ABSOLUTE_XY_MAX / screenX); input.mi.dy = pt.y * (ABSOLUTE_XY_MAX / screenY);
чего то мне не нравится выше флаги
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> 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>
C>Не судьба, видимо, с IE подружиться. 
Думаю, надо прощее быть…
Выносить функцию сенд-инпученья в отдельный модуль, и гонять ее тестами и смотреть что к чему.
Сдается мне всё должно работать, только нужно четко и аккуратно с параметрами и ремарками из МСДЫНъ.
А то там вон много чего про флаги в MSDN сказано, что координаты могут относиться только к основному монитору и все такое.
Плюс. Ну безусловно, коды возврата WinAPI функций надо проверять, в нашем случае SendInput. Ну заобязательно просто. Они много чего могут сказать, может что-то просто не отрабатывает и все тут.
И PS: как уже писал выше, такой SendInput ловится на раз LowLevel-хуком (там флаги это показывают), и соответственно нечто сбоку работающее может запросто фильтровать такой искуственный ввод, и просто его не пропускать. В частности и сам Internet Explorer.
Ну это уже из разряда страшилок, но все же…