Я хотел бы отправить несколько нажатий клавиш из программы на C++ в другое окно.
По этой причине я хотел бы, чтобы пользователь выбирал целевое окно, аналогично тому, как это делается в утилите Spy ++, поставляемой с Visual Studio (перетащите курсор в виде перекрестия на целевое окно и выделите целевое окно рамкой).
Как это перетаскивание выполняется в Windows? Я совершенно не понимаю, где мне начать искать механизм для реализации этой функции.





Вот как это обычно делается:
Есть некоторые вещи, на которые вам нужно обратить внимание - чистое стирание прямоугольника выделения и так далее, но это один из способов сделать это.
Для этого вы также можете нарисовать DC на экране, но в любом случае вам понадобится дескриптор окна, чтобы получить прямоугольник окна.
Если вы поищете в Google исходный код Spy ++, вы увидите несколько примеров этой техники.
Бывшие ответы неверны.
Исходный код Spy ++ был предоставлен в G. Groups в течение многих лет (см. В основном новости о Win32 api ng: //194.177.96.26/comp.os.ms-windows.programmer.win32)
Я знаком с кодом Spy ++, но есть несколько способов сделать это. Вы можете сделать это вне процесса, используя технику, описанную выше, или вы можете сделать это внутри процесса, используя перехватчики, внедрение DLL и создание подклассов. Я считаю, что это именно то, что делает Spy ++. Но для покраски это не обязательно.
Проблема с этим подходом заключается в том, что DWM (в частности, Aero) не знает о ваших красиво нарисованных изображениях и удаляет их случайным образом.