Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Почему не работает код с функцией SendInput

30K
19 июня 2009 года
asmel
50 / / 05.03.2009
Пусть в координатах (1248, 381) находится крестик закрытия открытой программы "блокнот" из виндовской папки "стандартные".
Ниже приведенный код должен эту программу закрыть, но почему-то этого не происходит.

Код:
INPUT inp[2];
memset(inp,0,sizeof(inp));

inp[0].mi.dx = 1653;
inp[0].mi.dy = 19;
inp[0].type=INPUT_MOUSE;
inp[0].mi.dwFlags=MOUSEEVENTF_LEFTDOWN;
inp[0].mi.dwFlags=MOUSEEVENTF_ABSOLUTE;

inp[1].mi.dx = 1653;
inp[1].mi.dy = 19;
inp[1].type=INPUT_MOUSE;
inp[1].mi.dwFlags=MOUSEEVENTF_LEFTUP;
inp[1].mi.dwFlags=MOUSEEVENTF_ABSOLUTE;

SendInput(2,inp,sizeof(INPUT));


Тогда, как код

 
Код:
SetCursorPos(1653, 19);
 Sleep(100);
 mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 ); //нажимаем
 Sleep(100);
 mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ); //отп
 Sleep(100);


делает все правильно.
294
19 июня 2009 года
Plisteron
982 / / 29.08.2003
Цитата: asmel
 
Код:
inp[0].mi.dwFlags=MOUSEEVENTF_LEFTDOWN;
inp[0].mi.dwFlags=MOUSEEVENTF_ABSOLUTE;


Может быть,

 
Код:
inp[0].mi.dwFlags=MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN;
?

Как я понимаю, движение мыши и клик в одном действии SendInput не сочетается.
Код:
INPUT inp[3];
    memset(inp,0,sizeof(inp));

    inp[0].mi.dx = 62000;
    inp[0].mi.dy = 700;
    inp[0].type=INPUT_MOUSE;
    inp[0].mi.dwFlags=MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;

    inp[1].mi.dx = 0;
    inp[1].mi.dy = 0;
    inp[1].type=INPUT_MOUSE;
    inp[1].mi.dwFlags=MOUSEEVENTF_LEFTDOWN;

    inp[2].mi.dx = 0;
    inp[2].mi.dy = 0;
    inp[2].type=INPUT_MOUSE;
    inp[2].mi.dwFlags=MOUSEEVENTF_LEFTUP;

    SendInput(3,inp,sizeof(INPUT));


На всякий случай, два слова из MSDN про некоторые особенности работы SetCursorPos():[quote=MSDN]The cursor is a shared resource. A window should move the cursor only when the cursor is in the window's client area.

The input desktop must be the current desktop when you call SetCursorPos. Call OpenInputDesktop to determine whether the current desktop is the input desktop. If it is not, call SetThreadDesktop with the HDESK returned by OpenInputDesktop to switch to that desktop.[/quote]
30K
22 июня 2009 года
asmel
50 / / 05.03.2009
Plisteron спасибо!
Код:
inp[0].mi.dwFlags=MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN;

так и есть.

Цитата:
Как я понимаю, движение мыши и клик в одном действии SendInput не сочетается.



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

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог