| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Клик по неактивному окну |
| Автор: RinOSpro 25.8.2010, 15:25 |
| Всем привет! Облазил пол инета но так и не нашел ответа на достаточно простой вопрос... Как кликнуть по неактивному окну то есть если окно свернутое или оно находится за другим окном? Один из способов это использовать SetForegroundWindow, но это не лучший вариант имхо. Сейчас кликаю так: Post/Send Message(LHandle, WM_LBUTTONDOWN, MK_LBUTTON, MakeLParam(LPoint.X, LPoint.Y)); Post/Send Message(LHandle, WM_LBUTTONUP, MK_LBUTTON, MakeLParam(LPoint.X, LPoint.Y)); Можно ли вообще кликать по неактивному окну? без патча ядра) |
| Автор: RinOSpro 9.9.2010, 14:31 |
| Людии) где выы) Не ужели ни кто не знает... |
| Автор: okkonst 9.9.2010, 14:38 |
| Например - так. последний ноль - туда, вестимо, лучше передать координаты мыши. Postmessage(WND, WM_LBUTTONDOWN, 0,0); PostMessage(WND, WM_LBUTTONUP,0,0); |
| Автор: RinOSpro 9.9.2010, 14:46 |
| О боже... да ты даже не удосужился пост до конца дочитать. |
| Автор: Keeper89 9.9.2010, 15:16 |
По заголовку окна или куда щелкнуть? |
| Автор: okkonst 9.9.2010, 16:24 |
| Удосужился. Просто ты не удосужился нормально вопрос задать. И сказать, в чем проблема. Собственно, чего ты хочешь? Например, на твой вопрос можно ответить так: нет, нельзя, поскольку, как только ты кликнешь мышой на неактивном окне - оно станет активным, и ты будешь щелкать по АКТИВНОМУ окну |
| Автор: okkonst 9.9.2010, 17:56 | ||
В общем случае твоя задача вряд ли имеет однозначное решение. По сути, она сводится к эмуляции пользовательского ввода... без оного. Частные решения, безусловно есть, но они могут зависеть от управляемой программы. Самое простое и, пожалуй, надежное - то, что ты и сам применил. Кстати, ты так и не сказал, чем оно тебя не устраивает. Подозреваю, что работоспособность оного зависит от алгоритма обработки сообщения. Например, внутри может происходить считывание координат мыши (GetCursorPos) - тогда перед отправкой надо мышку правильно позиционировать. Возможны и более извращенные варианты. Все-таки, рассказал бы о задаче? Тебе надо управлять каким-то конкретным приложением? Паинтом, или он выбран случайно ради примера? Если да - то с какой целью (в смысле, просто кликать)? Работает ли твой способ, если да - что тебя в нем не устраивает? |
| Автор: RinOSpro 10.9.2010, 09:29 | ||
Задача абстрактная, в общем кликать по кординатам которы задаст пользователь. В частности может использоваться для клик-бота в игре. К примеру сижу я чем ни будь занимаюсь, и тут бац разворачивается окно и давай кликать. У меня раньше такая проблема была с отправкой пользовательского ввода с клавиатуры но в этом случае я нашел решение: http://delphiworld.narod.ru/base/keyboard_keys_down3.html, сейчас ищу такое же решение для мышки.
Это я уже написал, мышка правильно позиционируется, расчитывает ClientRect. Паинт выбран по тому что в нем хорошо видно куда я кликаю |