Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.136.97.64] |
|
Сообщ.
#1
,
|
|
|
Всем привет!
Необходимо сменить фокус чужого окна (который находим через FindChildWindow). Проблема в том, что SetFocus не работает, ибо: Цитата The window must be attached to the calling thread's message queue. PostMessage(WM_SETFOCUS) работает тоже через раз (в лучшем случае), да к тому же, по-хорошему, там нужно указывать в wParam окно, которое теряет фокус (потому как даже при удачном перемещении фокуса пунктирная рамочка с кнопочки, имевшей фокус ранее, не удаляется). Подскажите, плиз, как правильно установить фокус? Предварительно я активирую окно через SetForegroundWindow. |
Сообщ.
#2
,
|
|
|
Цитата Jin X @ Необходимо сменить фокус чужого окна Foreground activation permission is like love: You can’t steal it, it has to be given to you |
Сообщ.
#3
,
|
|
|
B.V., тут проблема в другом. Я не пытаюсь вывести на передний план своё окно, я вывожу чужое, и оно прекрасно выводится.
Вопрос в том, как передать фокус на нужный мне контрол в чужом окне. Добавлено Решение найдено (подсказали в другом месте): DWORD dwThreadID = GetWindowThreadProcessId(hWindow, NULL); // Получаем идентификатор потока окна DWORD dwThisThreadID = GetCurrentThreadId; AttachThreadInput(dwThisThreadID, dwThreadID, TRUE); // Присоединяемся к потоку обработки ввода SetFocus(hWindow); // Посылаем сообщение для установки фокуса AttachThreadInput(dwThisThreadID, dwThreadID, FALSE); |