окна
От: Аноним  
Дата: 04.12.09 17:23
Оценка:
есть приложение в диалоговом окне которого нужно поменять текст в static control'e
нахожу окно, получаю хендл, меняю текст с помощью SetWindowText. очень часто текст не изменяется, точнее он меняется но не перерисовывается окно. пытался посылать WM_PAIN, использовал UpdateWindow результат тот же. Как заставить винду 100% перерисовать окно?
так же в этом диалоговом окне есть Edit, как получить текст, который в нем написан?приложение чужое. хэндл на него получаю с помощью FindWindow
Re: окна
От: Hibiscus Россия  
Дата: 04.12.09 17:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>есть приложение в диалоговом окне которого нужно поменять текст в 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 то про отрисовке рабочего стола окно перерисуется системой и текст уже будет тот который мне нужен
Re[3]: окна
От: Programador  
Дата: 04.12.09 17:58
Оценка:
Здравствуйте, Аноним, Вы писали:
А>дело в том что текст меняется, я проверяю, просто окно не перерисовывается системой!

сообщение должно пройти через TranslateMessage, прямо окну не всегда проходит, например WM_CHAR не проходят, тут еще с фокусом проблемы. К WM_PAINT еще регион приложен. Откуда он возьмётся?
Re: окна
От: Programador  
Дата: 04.12.09 18:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как заставить винду 100% перерисовать окно?

кстати мышь посылал, 100% не удалось получить никак, только 99%
Re[4]: окна
От: Аноним  
Дата: 04.12.09 18:06
Оценка:
P>сообщение должно пройти через TranslateMessage, прямо окну не всегда проходит, например WM_CHAR не проходят, тут еще с фокусом проблемы. К WM_PAINT еще регион приложен. Откуда он возьмётся?
ну вообще то UpdateWindow все делает сама...
Re[5]: окна
От: wallaby  
Дата: 04.12.09 19:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А>ну вообще то 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.

Так что можно попробовать

  InvalidateRect(hWnd, NULL, FALSE);
  UpdateWindow(hWnd);
---
The optimist proclaims that we live in the best of all possible worlds; and the pessimist fears this is true
Re[6]: окна
От: Аноним  
Дата: 04.12.09 19:45
Оценка:
If the update region is empty, no message is sent.
ну у меня то текст сменился. значит регион тоже поменялся!
Re[7]: окна
От: wallaby  
Дата: 04.12.09 21:05
Оценка:
Здравствуйте, Аноним, Вы писали:

А>If the update region is empty, no message is sent.

А>ну у меня то текст сменился. значит регион тоже поменялся!

Логично, но тогда и в вызове UpdateWindow нет надобности — раз текст сменился.
---
The optimist proclaims that we live in the best of all possible worlds; and the pessimist fears this is true
Re: окна
От: Carc Россия http://www.amlpages.com/home.php
Дата: 04.12.09 22:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>есть приложение в диалоговом окне которого нужно поменять текст в static control'e

А>нахожу окно, получаю хендл, меняю текст с помощью SetWindowText. очень часто текст не изменяется, точнее он меняется но не перерисовывается окно. пытался посылать WM_PAIN, использовал UpdateWindow результат тот же. Как заставить винду 100% перерисовать окно?
А>так же в этом диалоговом окне есть Edit, как получить текст, который в нем написан?приложение чужое. хэндл на него получаю с помощью FindWindow

RECT r;
GetClientRect(hwnd,&r);
RedrawWindow(hwnd, &r, NULL, RDW_INVALIDATE|RDW_UPDATENOW);
Aml Pages Home
Re: окна
От: c-smile Канада http://terrainformatica.com
Дата: 05.12.09 01:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>есть приложение в диалоговом окне которого нужно поменять текст в static control'e

А>нахожу окно, получаю хендл, меняю текст с помощью SetWindowText. очень часто текст не изменяется, точнее он меняется но не перерисовывается окно. пытался посылать WM_PAIN, использовал UpdateWindow результат тот же. Как заставить винду 100% перерисовать окно?
А>так же в этом диалоговом окне есть Edit, как получить текст, который в нем написан?приложение чужое. хэндл на него получаю с помощью FindWindow

Ты это делаешь в своем приложении?

А то вот:

However, SetWindowText cannot change the text of a control in another application.


http://msdn.microsoft.com/en-us/library/ms633546(VS.85).aspx
Re[2]: окна
От: kero Россия  
Дата: 05.12.09 03:56
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Ты это делаешь в своем приложении?

CS>А то вот:
CS>

CS>However, SetWindowText cannot change the text of a control in another application.

CS>http://msdn.microsoft.com/en-us/library/ms633546(VS.85).aspx

Это, можно сказать, классический случай, когда MSDN сильно не договаривает
уже доводилось приводить здесь пример использования соответствующих недокументированных возможностей:
http://www.rsdn.ru/forum/winapi/2946153.1.aspx
Автор: kero
Дата: 11.05.08

("Undocumented EditBox").
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[2]: окна
От: Аноним  
Дата: 05.12.09 10:25
Оценка:
C>
C>RECT r;
C>GetClientRect(hwnd,&r);
C>RedrawWindow(hwnd, &r, NULL, RDW_INVALIDATE|RDW_UPDATENOW);
C>

большое спасибо, этот код работает на отлично!
Re[3]: окна
От: Аноним  
Дата: 05.12.09 10:36
Оценка:
K>Это, можно сказать, классический случай, когда MSDN сильно не договаривает -
K>уже доводилось приводить здесь пример использования соответствующих недокументированных возможностей:
K>http://www.rsdn.ru/forum/winapi/2946153.1.aspx
Автор: kero
Дата: 11.05.08

K>("Undocumented EditBox").

а как прочитать данные из чужого едита?
Re[4]: окна
От: Аноним  
Дата: 05.12.09 11:14
Оценка:
А>а как прочитать данные из чужого едита?
разобрался.
SendMessage(hwnd,WM_GETTEXT,...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.