Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2013, 19:34   #1
Angelochek*
Пользователь
 
Регистрация: 26.09.2013
Сообщений: 26
Вопрос

Всем здравствуйте, помогите пожалуйста.
Мне нужно кликнуть мышкой в другом приложении в заданных координатах делаю так:
PostMessage(hwnd1, WM_LBUTTONDOWN, MK_LBUTTON, MakeLParam(i, j));
PostMessage(hwnd1, WM_LBUTTONUP, 0, MakeLParam(i, j));
Но ничего не происходит. В Spy++ заметил что когда я делаю это вручную перед нажатием кнопки отправляются эти сообщения:
WM_SETCURSOR hwnd:здесь хэндл окна nHittest:HTCLIENT wMouseMsg: WM_LBUTTONDOWN
и перед отжатием кнопки:
WM_SETCURSOR hwnd:здесь хэндл окна nHittest:HTCLIENT wMouseMsg: WM_LBUTTONUP

Тоесть как я понял программа проверяет правильно ли установлен курсор. Как мне повторить эти сообщения? Напишите готовый код. Делаю на Delphi.

Как отправить такое сообщение нашел:
Код:
Var
 msg, msg1: Longword;
Begin
 msg:= HTCLIENT or (WM_LBUTTONDOWN shl 16);
 msg1:= HTCLIENT or (WM_LBUTTONUP shl 16);

 SendMessage(hwnd1, WM_SETCURSOR, hwnd1, msg);
 SendMessage(hwnd1, WM_SETCURSOR, hwnd1, msg1);
Но всеравно ничего не происходит в чем может быть дело?

Последний раз редактировалось Stilet; 03.11.2013 в 19:34.
Angelochek* вне форума Ответить с цитированием
Старый 17.10.2013, 06:32   #2
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Если целевое приложение имеет более высокие административные права, Вы не сможете осуществить задуманное.
vadimych вне форума Ответить с цитированием
Старый 17.10.2013, 15:24   #3
Angelochek*
Пользователь
 
Регистрация: 26.09.2013
Сообщений: 26
По умолчанию

Это - игра.
Angelochek* вне форума Ответить с цитированием
Старый 17.10.2013, 15:49   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от Angelochek* Посмотреть сообщение
Но всеравно ничего не происходит в чем может быть дело?
А что собственно должно произойти?
waleri вне форума Ответить с цитированием
Старый 17.10.2013, 16:43   #5
Angelochek*
Пользователь
 
Регистрация: 26.09.2013
Сообщений: 26
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
А что собственно должно произойти?
Должен произойти клик по нужному месту тоесть персонаж должен начать рубить дерево.

Последний раз редактировалось Angelochek*; 17.10.2013 в 16:47.
Angelochek* вне форума Ответить с цитированием
Старый 17.10.2013, 21:08   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

А откуда берете i и j?
Попробуйте перед отправлением сообщений сделать окно игры активным - вполне возможно, что игра, когда окно неактивно, уходит в паузу или не реагирует на такие события.
waleri вне форума Ответить с цитированием
Старый 17.10.2013, 22:57   #7
Vladiger
Пользователь
 
Регистрация: 31.08.2013
Сообщений: 93
По умолчанию

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

Пробовать нужно, искать подходящие методы. Как вариант можно просто програмно эмулировать нажатие клавиш клавиатуры или мыши функциями keybd_event() или mouse_event(). Не очень удобный вариант, но в большинстве случаев самый работоспособный.
Неудобный тем, что эмуляция нажатия не привязана ни к какому окну, то есть кнопка мыши просто нажимается и отпускается в указанных координатах, но сами координаты никак не привязаны к окну. Можно сделать окно активным, подобрать координаты в области Desktop где нужно кликать мышкой и это может работать. Но при этом следует помнить, что окно может быть сдвинуто, либо по каким либо другим причинам координаты клика мышкой в окне могут измениться и тогда это нужно будет как то отслеживать, приспосабливаться и.т.д...
Vladiger вне форума Ответить с цитированием
Старый 17.10.2013, 23:48   #8
Angelochek*
Пользователь
 
Регистрация: 26.09.2013
Сообщений: 26
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
А откуда берете i и j?
Попробуйте перед отправлением сообщений сделать окно игры активным - вполне возможно, что игра, когда окно неактивно, уходит в паузу или не реагирует на такие события.
i и j это координаты найденного пикселя. Попробывал при активном окне и когда срабатывает нажатие объект(дерево) выделяется как будто на него наведен курсор тоесть что то происходит но не до конца.

Последний раз редактировалось Angelochek*; 18.10.2013 в 00:12.
Angelochek* вне форума Ответить с цитированием
Старый 18.10.2013, 01:12   #9
Vladiger
Пользователь
 
Регистрация: 31.08.2013
Сообщений: 93
По умолчанию

Цитата:
Сообщение от Angelochek* Посмотреть сообщение
Попробывал при активном окне и когда срабатывает нажатие объект(дерево) выделяется как будто на него наведен курсор тоесть что то происходит но не до конца.
Тогда ещё время нажатия может играть роль, попробуй
Код:
PostMessage(hwnd1, WM_LBUTTONDOWN, MK_LBUTTON, MakeLParam(i, j));
Sleep(500);
PostMessage(hwnd1, WM_LBUTTONUP, 0, MakeLParam(i, j));
Vladiger вне форума Ответить с цитированием
Старый 18.10.2013, 08:44   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

А координаты относительно чего? Окна или экрана?
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Установка курсора _-Re@l-_ Общие вопросы Delphi 3 28.05.2010 17:25
задание положения курсора в окне(не full screen)) Oburec Общие вопросы Delphi 1 30.06.2009 00:42
Установка курсора на новую запись в DBGrid Nomiko БД в Delphi 9 24.05.2009 18:40
Установка курсора в определеное место экрана? ALEX_RAS Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 23.05.2008 20:49
Установка собственного курсора Amateur Общие вопросы Delphi 4 13.11.2007 05:42