есть приложение в диалоговом окне которого нужно поменять текст в static control'e
нахожу окно, получаю хендл, меняю текст с помощью SetWindowText. очень часто текст не изменяется, точнее он меняется но не перерисовывается окно. пытался посылать WM_PAIN, использовал UpdateWindow результат тот же. Как заставить винду 100% перерисовать окно?
так же в этом диалоговом окне есть Edit, как получить текст, который в нем написан?приложение чужое. хэндл на него получаю с помощью FindWindow
Здравствуйте, Аноним, Вы писали:
А>есть приложение в диалоговом окне которого нужно поменять текст в static control'e А>нахожу окно, получаю хендл, меняю текст с помощью SetWindowText. очень часто текст не изменяется, точнее он меняется но не перерисовывается окно. пытался посылать WM_PAIN, использовал UpdateWindow результат тот же. Как заставить винду 100% перерисовать окно? А>так же в этом диалоговом окне есть Edit, как получить текст, который в нем написан?приложение чужое. хэндл на него получаю с помощью FindWindow
А результат функции SetWindowText() проверяешь? Он должен быть ненулевой. Если он нулевой, проверь код ошибки (GetLastError()), советую покапать в сторону безопасности. Вроде как системе не логично разрешать менять любому приложению текст в любом окне.
Re[2]: окна
От:
Аноним
Дата:
04.12.09 17:43
Оценка:
H>А результат функции SetWindowText() проверяешь? Он должен быть ненулевой. Если он нулевой, проверь код ошибки (GetLastError()), советую покапать в сторону безопасности. Вроде как системе не логично разрешать менять любому приложению текст в любом окне.
дело в том что текст меняется, я проверяю, просто окно не перерисовывается системой! если например нажать ctrl+alt+del а затем esc то про отрисовке рабочего стола окно перерисуется системой и текст уже будет тот который мне нужен
Здравствуйте, Аноним, Вы писали: А>дело в том что текст меняется, я проверяю, просто окно не перерисовывается системой!
сообщение должно пройти через TranslateMessage, прямо окну не всегда проходит, например WM_CHAR не проходят, тут еще с фокусом проблемы. К WM_PAINT еще регион приложен. Откуда он возьмётся?
Здравствуйте, Аноним, Вы писали:
А>Как заставить винду 100% перерисовать окно?
кстати мышь посылал, 100% не удалось получить никак, только 99%
Re[4]: окна
От:
Аноним
Дата:
04.12.09 18:06
Оценка:
P>сообщение должно пройти через TranslateMessage, прямо окну не всегда проходит, например WM_CHAR не проходят, тут еще с фокусом проблемы. К WM_PAINT еще регион приложен. Откуда он возьмётся?
ну вообще то UpdateWindow все делает сама...
Здравствуйте, Аноним, Вы писали:
А>ну вообще то UpdateWindow все делает сама...
По MSDN UpdateWindow делает следующее:
The UpdateWindow function updates the client area of the specified window by sending a WM_PAINT message to the window if the window's update region is not empty. The function sends a WM_PAINT message directly to the window procedure of the specified window, bypassing the application queue. If the update region is empty, no message is sent.
Здравствуйте, Аноним, Вы писали:
А>есть приложение в диалоговом окне которого нужно поменять текст в static control'e А>нахожу окно, получаю хендл, меняю текст с помощью SetWindowText. очень часто текст не изменяется, точнее он меняется но не перерисовывается окно. пытался посылать WM_PAIN, использовал UpdateWindow результат тот же. Как заставить винду 100% перерисовать окно? А>так же в этом диалоговом окне есть Edit, как получить текст, который в нем написан?приложение чужое. хэндл на него получаю с помощью FindWindow
RECT r;
GetClientRect(hwnd,&r);
RedrawWindow(hwnd, &r, NULL, RDW_INVALIDATE|RDW_UPDATENOW);
Здравствуйте, Аноним, Вы писали:
А>есть приложение в диалоговом окне которого нужно поменять текст в static control'e А>нахожу окно, получаю хендл, меняю текст с помощью SetWindowText. очень часто текст не изменяется, точнее он меняется но не перерисовывается окно. пытался посылать WM_PAIN, использовал UpdateWindow результат тот же. Как заставить винду 100% перерисовать окно? А>так же в этом диалоговом окне есть Edit, как получить текст, который в нем написан?приложение чужое. хэндл на него получаю с помощью FindWindow
Ты это делаешь в своем приложении?
А то вот:
However, SetWindowText cannot change the text of a control in another application.
Это, можно сказать, классический случай, когда MSDN сильно не договаривает —
уже доводилось приводить здесь пример использования соответствующих недокументированных возможностей: http://www.rsdn.ru/forum/winapi/2946153.1.aspx
K>Это, можно сказать, классический случай, когда MSDN сильно не договаривает - K>уже доводилось приводить здесь пример использования соответствующих недокументированных возможностей: K>http://www.rsdn.ru/forum/winapi/2946153.1.aspx