Re[11]: WM_KEYDOWN на две клавиши
От: Аноним  
Дата: 23.06.03 11:32
Оценка:
Здравствуйте, Alexmoon, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


A>>>Если все таки lParam не даст желаемого результата, то тебе поможет раздел — Keyboard Input Functions:


A>>>GetKeyState и все тому подобное.


A>Тогда можно сделать и keybd_event, но не забывай о том, что эмуляция реального нажатия и на это сообщение срегагирует то окно, которое находится в фокусе. Чтобы без визуализации временно передать фокус другому окну в другом потоке, так наверное будет правильнее сказать, чем приложении, поскольку окно это собственность потока, тебе нужно сделать AttachThreadInput(my_dwthread, remote_dwthread, true), потом сделать SetFocus(need_hWnd), что передаст ему фокус IO, но не визуальный, потом перед тем как нажимать клавиши, чтобы убдиться в их срабатывании ты вызови WaitForInputIdle(remote_hProcess, 100), 100 чтобы себя не повесить и если не будет возвращать 0, то после нескольких попыток ты будешь знать, что поток висит, а если все таки вернет ноль, то генерируй необходимый тебе keybd_event и на всякий случай, чтобы дождаться его обработки, если конечно нужно или масса других вариантов синхронизации, тот же WaitForInput..., после чего делаешь смело SetFocus своему окну и напослед разъединяешь очереди обоих потоков AttachThreadInput(my_dwthread, remote_dwthread, false) и по моему это все не должно отличаться от реального сценария по функциональности. За неточности извини. Сам еще не делал. Придумывал на лету и по памяти.



Дело в том что при ближайшем рассмотрении в функции keybd_event тоже нет признаков установки клавиш шифт и контрол, но тем не менее мысль об AttachThreadInput хорошая, по крайней мере можно будет попытаться сделать SetKeyState. Вопрос в том как найти thread чужого окна зная токо его hwnd ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.