![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как послать WM_LBUTTONDOWN неактивному окну?
Chorniy © (2008-02-25 20:51:00)Имеем:
1. Окно моей программы (fsStayOnTop), на котором расположена кнопка. Эта кнопка посылает сообщение WM_LBUTTONDOWN окну другой программы (другая программа - игра, развернутая на весь экран)
2. Когда я кликаю по кнопке, то мое окно становится активным
и сообщение то ли не доходит, то ли некорректно обрабатывается другим окном. В общем на другом окне ничего не происходит.
3. При посылке WM_KEYDOWN все рабоет отлично.
как сделать чтобы сообщения обрабатывались, и возможно ли вообще послать сообщения о клике мыши на неактивное окно?
Alexander_Warlock (2008-03-16 03:32:00) [1]Если удалось решить этот вопрос - хотелось бы пообщаться (icq: 121138909). Игра случаем не Lineage II ?
Chorniy (2008-02-26 06:35:00) [2]
> Естественно возможно.
тогда возникает естественный интерес, а в какую сторону копать, чтобы все-таки послать ей события с мышки? Драйвер она все равно должна использовать... или DirectInput какой-нибудь?
вопрос:
какие есть способы принять от мышки события, минуя messages, пусть даже самые извращенные ;) и где почитать про них?
Германн (2008-02-26 01:37:00) [3]
> 1. игра обрабатывает события мыши не через виндовские сообщение
> (такое вообще возможно???)
Естественно возможно.
Подумай сам как в ДОСе работали с мышью? Ведь там не было никаких "виндовских сообщений".
Chorniy (2008-02-26 00:51:00) [4]Даже если окно тестовой проги свернуто, то все равно цвет меняется (значит мессадж доходит и обрабатывается)
;))))
Chorniy (2008-02-26 00:48:00) [5]сделал тестовую прогу, на событие OnMouseDown поставил смену цвета формы
посылаю форме сообщение WM_LBUTTONDOWN, фокус ввода ей не принадлежит, однако цвет сменяется.
Chorniy (2008-02-26 00:41:00) [6]может я неправильно понимаю что такое "неактивное окно"? по моему мнению - это то окно которому не принадлежит фокус ввода.
Chorniy (2008-02-26 00:38:00) [7]
> Leonid Troyanovsky © (25.02.08 23:40) [4]
спасибо, находить окна я научился. Посылаю сообщение всем, окнам которые имеются у игры (5 штук), однако никаких действий не происходит.
два варианта происходящего:
1. игра обрабатывает события мыши не через виндовские сообщение (такое вообще возможно???)
2. т.к. окно неактивное, то клик оно не обрабатывает (
> Неактивным окнам нет дела до событий ввода.
) Но почему тогда оно отлично обрабатывает сообщение нажатия клавиши? будучи все так же неактивным.
подскажите пожалуйста какой вариант вернее... или напишите свой.
Leonid Troyanovsky (2008-02-25 23:40:00) [8]
> Chorniy (25.02.08 23:21) [2]
> почему функция GetParent(Form1.Handle) возвращает ноль,
> а не Application.Handle?
Потому, что оно ему не тот parent.
See also: GetWindowLong with GWL_HWNDPARENT.
--
Regards, LVT.
Leonid Troyanovsky (2008-02-25 23:34:00) [9]
> Chorniy (25.02.08 20:51)
> как сделать чтобы сообщения обрабатывались, и возможно ли
> вообще послать сообщения о клике мыши на неактивное окно?
Неактивным окнам нет дела до событий ввода.
--
Regards, LVT.
Chorniy (2008-02-25 23:21:00) [10]Продолжаю разбираться с ситуацией.
Оказывается, что я посылаю сообщения по хендлу, который приндалежит не самому окну, а приложению, и не могу, зная хендл приложения, получить хендл его окна.
ВОПРОС:
почему функция GetParent(Form1.Handle) возвращает ноль, а не Application.Handle? и как зная Application.Handle найти Form1.Handle?
Мк30 (2008-02-25 22:29:00) [11]Удалено модератором