Как мне ждать обновления окна? - PullRequest
0 голосов
/ 10 марта 2011

Когда я открываю окно, оно сначала имеет ложный заголовок (все еще не обновленный) после нескольких секунд обновления заголовка, есть ли какая-либо функция или практическое решение, чтобы дождаться этого, чтобы я мог отправить сообщение куда-нибудь, когда это произойдет ...

То, что у меня есть, это крюк cbt, который получает wparam, когда окно активируется, мне нужно подождать, пока этот wparam станет настоящим заголовком (а не поддельным)

Я могу перевести сонактивация, но это замедлит все.

Ответы [ 2 ]

1 голос
/ 10 марта 2011

Если ваше целевое окно следует стандартному методу для обновления заголовка, вы можете добавить ловушку, чтобы поймать точный момент, когда заголовок изменился.

Для этого вам нужно будет добавить окнахук возврата сообщения с SetWindowsHookEx, передавая ему обработчик CallWndRetProc из вашего кода для получения уведомлений о завершении сообщений Windows обработчиком сообщений целевого окна.

SetWindowsHookEx () @ MSDN
CallWndRetProc @ MSDN

Сообщение Windows, которое нужно перехватить, - WM_SETTEXT, которое отправляется, чтобы вызвать изменение в тексте / заголовке по умолчанию для окна.

WM_SETTEXT @ MSDN

Если вы хотите проверить это изолированно, WM_SETTEXT - это неявное сообщение, отправляемое после вызова SetWindowText для изменения текста / заголовка окна.

SetWindowText () @ MSDN

Кроме того, вы также можете избавиться от крюка cbt, например WM_ACTIVATE, WM_MOUSEACTIVATE и WM_SETFOCUSможет быть пойман в ловушку с тем же крючком, который использовался длярэп WM_SETTEXT.Эти сообщения охватывают различные уровни активности активации и тип для окон.

WM_ACTIVATE @ MSDN
WM_MOUSEACTIVATE @ MSDN
WM_SETFOCUS @ MSDN

Наконец, если целевое окно - это окно, которое вы создаете и управляете в своем собственном процессе, вы можете просто перехватывать эти сообщения Windows вместо использования хуков.Если невозможно использовать ваши доступные платформы для перехвата этих сообщений, SetClassLongPtr также является другой альтернативой, которая может использоваться для реализации подкласса для окон этого типа, чтобы позволить вам перехватывать оконные сообщения.Если вы используете этот метод, вы делегируете все вызовы исходному обработчику сообщений Windows и будете действовать только во время возврата из исходной процедуры после получения интересующего сообщения.

SetClassLongPtr () @ MSDN
WindowProc @ MSDN

1 голос
/ 10 марта 2011

Вот как бы я это сделал в c #:

Настройка прослушивателя для события с измененным текстом.

this.something.TextChanged += new System.EventHandler(something_TextChanged);

Затем настройте код, который будет делать все, что вам нужно, когда текст изменится

void something_TextChanged(object sender, System.EventArgs e)
{
    // your code
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...