Подскажите как рассчитать координаты для WM_LBUTTONUP, WM_MOUSEMOVE и WM_LBUTTONDOWN отправляя сообщения через sendmessage?
P:S работаю с Nox 6.6.1.1
1. Nikanr - 23 Июля, 2020 - 13:02:06 - перейти к сообщению
2. Zireael - 23 Июля, 2020 - 17:54:23 - перейти к сообщению
CODE:
#define WM_LBUTTONUP 514
#define WM_LBUTTONDOWN 513
#define WM_MOUSEMOVE 512
win w=window (-1, "Edit", window (-1, "Notepad", -1)); // блокнот
mouseleft_down(w, 20, 10); // зажать левую кнопку в координатах 20 10
sleep(200);
mouse_move(w, 20, 300); // переместить курсор в координаты 20 300
sleep(200);
mouseleft_up(w, 20, 300); // отпустить левую кнопку в координатах 20 300
function mouseleft_down(win w, int x, int y)
{
sendmessage(WM_LBUTTONDOWN, 1, x+y*65536, w);
}
function mouseleft_up(win w, int x, int y)
{
sendmessage(WM_LBUTTONUP, 0, x+y*65536, w);
}
function mouse_move(win w, int x, int y)
{
sendmessage(WM_MOUSEMOVE, 0, x+y*65536, w);
}
#define WM_LBUTTONDOWN 513
#define WM_MOUSEMOVE 512
win w=window (-1, "Edit", window (-1, "Notepad", -1)); // блокнот
mouseleft_down(w, 20, 10); // зажать левую кнопку в координатах 20 10
sleep(200);
mouse_move(w, 20, 300); // переместить курсор в координаты 20 300
sleep(200);
mouseleft_up(w, 20, 300); // отпустить левую кнопку в координатах 20 300
function mouseleft_down(win w, int x, int y)
{
sendmessage(WM_LBUTTONDOWN, 1, x+y*65536, w);
}
function mouseleft_up(win w, int x, int y)
{
sendmessage(WM_LBUTTONUP, 0, x+y*65536, w);
}
function mouse_move(win w, int x, int y)
{
sendmessage(WM_MOUSEMOVE, 0, x+y*65536, w);
}
3. Nikanr - 24 Июля, 2020 - 02:03:27 - перейти к сообщению
Zireael , Спасибо, работает. Еще хотел спросить про MK_LBUTTON: эмулятор воспринимает перемещения мыши в фоне (как и в игре), но если мы хотим переместить какого-нибудь персонажа на новую позицию, то перемещение с помощью WM_MOUSEMOVE работает только если мы предварительно поставим флаг MK_LBUTTON в WM_MOUSEMOVE с тем же флагом в WM_LBUTTONDOWN, а когда мы отпускаем клавишу, то она отпускается в начальных координатах в которых мы зажимали клавишу, но не в тех что указывали при вызове WM_LBUTTONUP.
Функция примерно такая:
Можно ли как-то это исправить?
(Добавление)
Если добавить MK_LBUTTON в WM_LBUTTONUP, то лкм не отпускает
Функция примерно такая:
CODE:
#define WM_LBUTTONUP 514
#define WM_LBUTTONDOWN 513
#define WM_MOUSEMOVE 512
#define MK_LBUTTON 1
function mouse_move(win w,int xs,int ys,int xf,int yf){
sendmessage(WM_LBUTTONDOWN, MK_LBUTTON, xs+ys*65536, w);
pause(300);
sendmessage(WM_MOUSEMOVE, MK_LBUTTON, xf+yf*65536, w);
pause(300);
sendmessage(WM_LBUTTONUP, 0, xf+yf*65536, w);
}
#define WM_LBUTTONDOWN 513
#define WM_MOUSEMOVE 512
#define MK_LBUTTON 1
function mouse_move(win w,int xs,int ys,int xf,int yf){
sendmessage(WM_LBUTTONDOWN, MK_LBUTTON, xs+ys*65536, w);
pause(300);
sendmessage(WM_MOUSEMOVE, MK_LBUTTON, xf+yf*65536, w);
pause(300);
sendmessage(WM_LBUTTONUP, 0, xf+yf*65536, w);
}
Можно ли как-то это исправить?
(Добавление)
Если добавить MK_LBUTTON в WM_LBUTTONUP, то лкм не отпускает