Здравствуйте, Mystic Artifact, Вы писали:
MA>SetCursorPos обрезает координаты к заданным через ClipCursor или видимой области рабочего стола.
Гм, я как-то упустил этот факт.
MA>Вообще, зачес вообще SetCursorPos нужен? Почему бы просто не посылать сообщения WM_MOUSEDOWN с нужными координатами? (Я мог чего-то упустить или забыть в треде).
Я не очень с WinAPI, прошу уточнить:
1. WM_MOUSEDOWN не нашёл в хидерах/документации, видимо, можно использовать WM_LBUTTONDOWN/WM_LBUTTONUP вместо этого?
2. В вышеприведённом моём примере есть варианты с использованием этих 2 сообщений:
...
else if (byCodeOption == 2)
{
// Option B1
SendMessage(hwnd, WM_LBUTTONDOWN, pt.x, pt.y);
Sleep(10);
SendMessage(hwnd, WM_LBUTTONUP, pt.x, pt.y);
}
else if (byCodeOption == 4)
{
// Option B2
SendMessage(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(pt.x, pt.y));
Sleep(10);
SendMessage(hwnd, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(pt.x, pt.y));
}
else if (byCodeOption == 6)
{
// Option C1
PostMessage(hwnd, WM_LBUTTONDOWN, 0, MAKELPARAM(pt.x, pt.y));
Sleep(5);
PostMessage(hwnd, WM_LBUTTONUP, 0, MAKELPARAM(pt.x, pt.y));
}
else if (byCodeOption == 8)
{
// Option C2
PostMessage(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(pt.x, pt.y));
Sleep(5);
PostMessage(hwnd, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(pt.x, pt.y));
}
else if (byCodeOption == 10)
{
// Option C3
PostMessage(hwnd, WM_LBUTTONDOWN, pt.x, pt.y);
Sleep(5);
PostMessage(hwnd, WM_LBUTTONUP, pt.x, pt.y);
}
Т.е., после вызова SetCursorPos() я всё равно пробовал отправлять сообщения о нажатии вместе с координатами клика (pt.x, pt.y).
Так всё равно не работает. Или может, у меня тут где-то ошибка? Или по отдельности надо отправлять сообщение (отдельно перемещение и отдельно клик)?