Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > [VC++] Имитация нажатия кнопки в окне(чужом)


Автор: MuForum 10.2.2008, 00:23
Доброе время суток!

Интересует следующая проблема.

# Задача: Необходимо написать программу, которая будет передавать окну(чужому) сообщение о нажатие какой-то кнопке, и также о перемещение курсора. (Окно неактивно!)
- Одновременно, окно не должно становиться активным, и с глобальным курсором ничего происходить не должно!


Пример: Мне нужно окну(чужому) послать сообщение о нажатие правого клика мыши например, но окно в этот момент не активно! (handle окна я знаю)


P.S. -> Нам известен 'handle' окна. Команды 'Send/PostMessage' в данном случае не помогают, так как окно неактивное!


P.S. -> Я пробовал найти ответ на многочисленных Форумах, искал в поисковой системе http://www.google.com/, но результаты оказались отрицательные.

- Так же во время поисков я наткнулся на интересную статью с описанием WinApi функций: http://www.excode.ru/art922p1.html
Цитата

* ClipCursor
* CopyCursor
* CreateCursor
* DestroyCursor
* GetClipCursor
* GetCursorPos
* SetCursorPos
* ShowCursor

Автор: Damarus 10.2.2008, 02:16
Цитата(MuForum @  10.2.2008,  00:23 Найти цитируемый пост)
P.S. -> Нам известен 'handle' окна. Команды 'Send/PostMessage' в данном случае не помогают, так как окно неактивное!

На основании чего сделан такой вывод? PostMessage вполне будет работать.

Автор: MuForum 10.2.2008, 12:17
Цитата(Damarus @ 10.2.2008,  02:16)
Цитата(MuForum @  10.2.2008,  00:23 Найти цитируемый пост)
P.S. -> Нам известен 'handle' окна. Команды 'Send/PostMessage' в данном случае не помогают, так как окно неактивное!

На основании чего сделан такой вывод? PostMessage вполне будет работать.

На основание опыта!
- На других программах всё нормально, а вот с окном игры такое не проходит.

Автор: _hunter 11.2.2008, 11:58
вполне возможно что в той программе (где-нить в цикле сообщений) просто стоит проверка на наличие у окна фокуса.
тогда тут никакие ухищрения при отправке не помогут...

но можно попробовать пойти другим путем: создать Desktop (CreateDesktop()/CreateDesktopEx()) и потом поназначать его всем потокам SetThreadDesktop(). И на том столе сделать программу активной...

Автор: dumb 17.2.2008, 01:02
Цитата(_hunter @  11.2.2008,  11:58 Найти цитируемый пост)
и потом поназначать его всем потокам SetThreadDesktop()

Цитата(msdn)
The SetThreadDesktop function will fail if the calling thread has any windows or hooks on its current desktop (unless the hDesktop parameter is a handle to the current desktop).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)