Доброго времени. Есть желание реализовать скролл мыши по определенным параметрам.
к примеру:
if (выполнено такое действие) то скролл мыши вверх
else скролл мыши в низ
Пробую реализовать такое действие при скролле мыши:
win w=window (-1, -1, window ("Название окна", "UnityWndClass", -1));
mousewheel(-2); // скролл мыши на 2 щелчка в низ
function mousewheel(int delta)
{
sendmessage(WM_MOUSEWHEEL, delta);
}
Подскажите, что не так и как сделать правильно.
Скролл в активном окне.
1. CEMEH_054 - 17 Июня, 2019 - 03:00:39 - перейти к сообщению
2. Zireael - 17 Июня, 2019 - 03:21:50 - перейти к сообщению
Цитата:
Скролл в активном окне.
CODE:
#define MOUSEEVENTF_WHEEL 2048
external(VOID, "mouse_event", "mouse_event", "user32.dll");
sleep(2000);
mousewheel(-2); // на 2 щелчка вниз
sleep(2000);
mousewheel(3); // на 3 вверх
function mousewheel(int delta)
{
mouse_event(MOUSEEVENTF_WHEEL, 0, 0, delta * 120, 0);
}
external(VOID, "mouse_event", "mouse_event", "user32.dll");
sleep(2000);
mousewheel(-2); // на 2 щелчка вниз
sleep(2000);
mousewheel(3); // на 3 вверх
function mousewheel(int delta)
{
mouse_event(MOUSEEVENTF_WHEEL, 0, 0, delta * 120, 0);
}
Скролл в неактивном окне (не во всех приложениях сработает):
CODE:
win w=window (-1, "Edit", window (-1, "Notepad", -1)); // окно
int x=200; // координаты, в которых выполнить скролл
int y=300;
mousewheel(w, x, y, -2); // на 2 щелчка вниз
sleep(2000);
mousewheel(w, x, y, 3); // на 3 щелчка верх
function mousewheel(win w, int x, int y, int delta)
{
sendmessage(WM_MOUSEWHEEL, delta*120*65536, x+y*65536, w);
}
int x=200; // координаты, в которых выполнить скролл
int y=300;
mousewheel(w, x, y, -2); // на 2 щелчка вниз
sleep(2000);
mousewheel(w, x, y, 3); // на 3 щелчка верх
function mousewheel(win w, int x, int y, int delta)
{
sendmessage(WM_MOUSEWHEEL, delta*120*65536, x+y*65536, w);
}
3. CEMEH_054 - 17 Июня, 2019 - 03:37:41 - перейти к сообщению
Zireael , Спасибо большое.
А что означает 2048?
#define MOUSEEVENTF_WHEEL 2048
А что означает 2048?
#define MOUSEEVENTF_WHEEL 2048
4. Zireael - 17 Июня, 2019 - 03:56:41 - перейти к сообщению
Цитата:
А что означает 2048?
#define MOUSEEVENTF_WHEEL 2048
#define MOUSEEVENTF_WHEEL 2048
Это объявление константы.
CODE:
#define MOUSEEVENTF_WHEEL 2048
messagebox(MOUSEEVENTF_WHEEL);
messagebox(MOUSEEVENTF_WHEEL);
Так можно понять что означает число. Просто флагов может быть несколько, например:
Цитата:
external(VOID, "mouse_event", "mouse_event", "user32.dll" );
mouse_event(34816, 0, 0, 120, 0); // Так не понятно что означает 34816.
mouse_event(34816, 0, 0, 120, 0); // Так не понятно что означает 34816.
Цитата:
#define MOUSEEVENTF_WHEEL 2048
#define MOUSEEVENTF_ABSOLUTE 32768
external(VOID, "mouse_event", "mouse_event", "user32.dll" );
mouse_event(MOUSEEVENTF_WHEEL | MOUSEEVENTF_ABSOLUTE, 0, 0, 120, 0);
#define MOUSEEVENTF_ABSOLUTE 32768
external(VOID, "mouse_event", "mouse_event", "user32.dll" );
mouse_event(MOUSEEVENTF_WHEEL | MOUSEEVENTF_ABSOLUTE, 0, 0, 120, 0);
А так можно открыть описание функции https://docs.microsoft.com/en-us...user-mouse_event и посмотреть какие флаги указаны и что они обозначают.
5. CEMEH_054 - 17 Июня, 2019 - 04:24:30 - перейти к сообщению
Zireael , Спасибо
6. Femidko - 23 Мая, 2020 - 10:12:11 - перейти к сообщению
Добрый вечер!
А не подскажете, в чем может быть причина такой ошибки?
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
А не подскажете, в чем может быть причина такой ошибки?
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
7. Zireael - 23 Мая, 2020 - 10:17:41 - перейти к сообщению
Цитата:
А не подскажете, в чем может быть причина такой ошибки?
Нужен весь код.
8. Femidko - 23 Мая, 2020 - 11:16:43 - перейти к сообщению
Все как Вы писали:
CODE:
#define MOUSEEVENTF_WHEEL 2048
#define MOUSEEVENTF_ABSOLUTE 32768
external(VOID, "mouse_event", "mouse_event", "User32.dll");
function MouseWheel(int delta)
{
mouse_event(MOUSEEVENTF_WHEEL | MOUSEEVENTF_ABSOLUTE, 0, 0, delta * 120, 0);
}
function Roll(win _win) {
activate(_win);
sleep(2000);
mousemove(20, 180, _win);
sleep(random(100, 500));
mouse(LEFT, random(20, 50), random(160, 200), 0, _win)
sleep(random(100, 500));
mouse(LEFT, random(20, 50), random(160, 200), 0, _win)
sleep(random(100, 500));
MouseWheel(-10);
}
#define MOUSEEVENTF_ABSOLUTE 32768
external(VOID, "mouse_event", "mouse_event", "User32.dll");
function MouseWheel(int delta)
{
mouse_event(MOUSEEVENTF_WHEEL | MOUSEEVENTF_ABSOLUTE, 0, 0, delta * 120, 0);
}
function Roll(win _win) {
activate(_win);
sleep(2000);
mousemove(20, 180, _win);
sleep(random(100, 500));
mouse(LEFT, random(20, 50), random(160, 200), 0, _win)
sleep(random(100, 500));
mouse(LEFT, random(20, 50), random(160, 200), 0, _win)
sleep(random(100, 500));
MouseWheel(-10);
}
9. Zireael - 23 Мая, 2020 - 11:29:35 - перейти к сообщению
Цитата:
mouse(LEFT, random(20, 50), random(160, 200), 0, _win)
Нет ; вконце.
CODE:
mouse(LEFT, random(20, 50), random(160, 200), 0, _win);
10. Femidko - 23 Мая, 2020 - 11:45:15 - перейти к сообщению
Zireael пишет:
Нет ; вконце.
господи, как мог пропустить.... благодарствую, в очередной раз. сбило с толку, что на строчку с эвентом колесика ругалось наверн
(Добавление)
Не помогло. Сделал чистый эксперимент:
CODE:
#define MOUSEEVENTF_WHEEL 2048
#define MOUSEEVENTF_ABSOLUTE 32768
external(VOID, "mouse_event", "mouse_event", "User32.dll");
mouse_event(MOUSEEVENTF_WHEEL | MOUSEEVENTF_ABSOLUTE, 0, 0, delta * 120, 0);
#define MOUSEEVENTF_WHEEL 2048
#define MOUSEEVENTF_ABSOLUTE 32768
external(VOID, "mouse_event", "mouse_event", "User32.dll");
mouse_event(MOUSEEVENTF_WHEEL | MOUSEEVENTF_ABSOLUTE, 0, 0, delta * 120, 0);
то же самое