Изменение текста сообщения чужого окна.
От: Фил Россия  
Дата: 20.05.03 11:28
Оценка:
Привет всем! Тут передо мной встала задача изменить текст сообщения в MessageBox, выдаавемой какой-нить прогой. Я отловил дескриптор окна и теперь могу поменять заголовок, а вот как нгасчет текста сообщения? Заранее благодарен.
Фил
Re: Изменение текста сообщения чужого окна.
От: Demon Россия  
Дата: 20.05.03 12:36
Оценка:
Здравствуйте, Фил, Вы писали:

Фил>Привет всем! Тут передо мной встала задача изменить текст сообщения в MessageBox, выдаавемой какой-нить прогой. Я отловил дескриптор окна и теперь могу поменять заголовок, а вот как нгасчет текста сообщения?


Почитай Рихтера. У него хорошо описано как перехватывать вызовы функций в чужом процессе. Можешь еще посмотреть тут http://rsdn.ru/qna/?baseserv/hookapi.xml и тут http://rsdn.ru/article/?baseserv/IntercetionAPI.xml
Автор(ы): Тихомиров В.А.
Дата: 11.11.2002
Re: Изменение текста сообщения чужого окна.
От: BlackHeretic Израиль  
Дата: 20.05.03 12:46
Оценка:
Здравствуйте, Фил, Вы писали:

Фил>Привет всем! Тут передо мной встала задача изменить текст сообщения в MessageBox, выдаавемой какой-нить прогой. Я отловил дескриптор окна и теперь могу поменять заголовок, а вот как нгасчет текста сообщения? Заранее благодарен.


Проэнумеруй детские окна, там будет 2 статика. Один картинка, второй текст. Вот тот что текст и меняй на здоровье
ICQ 156156278
Re[2]: Изменение текста сообщения чужого окна.
От: BlackHeretic Израиль  
Дата: 20.05.03 13:18
Оценка:
Здравствуйте, BlackHeretic, Вы писали:

BH>Здравствуйте, Фил, Вы писали:


Фил>>Привет всем! Тут передо мной встала задача изменить текст сообщения в MessageBox, выдаавемой какой-нить прогой. Я отловил дескриптор окна и теперь могу поменять заголовок, а вот как нгасчет текста сообщения? Заранее благодарен.


BH>Проэнумеруй детские окна, там будет 2 статика. Один картинка, второй текст. Вот тот что текст и меняй на здоровье


Насколько я понял дескриптор месадж бокса у тебя есть, обзовем его

HWND hMsgBox;



Тогда

BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)
{
    CHWNDArray* pArr = (CHWNDArray*)lParam;
    pArr->Add(hwnd);
    return TRUE;
}

typedef CArray<HWND,HWND> CHWNDArray;
CHWNDArray hwndArr;
EnumChildWindows(hMsgBox, EnumProc, (LPARAM)&hwndArr);


Ну и собсно тут у тебя есть массив всех деток.
Далее пробегаешь по массиву

TCHAR className[1024];
int index = -1;
for(int i=0; i<hwndArr.GetSize(); i++)
{
  if(GetClassName(hwndArr[i], className, 1024))
  {
    if(_tcsicmp(className, _T("STATIC")==0)
    {
      if(!(GetWindowLong(hwndArr[i], GWL_STYLE) & SS_ICON))
      {
        index = i;
        break;
      }
    }
  }
}

if(index>=0)
{
  SetWindowText(hwndArr[index], _T("Yesss!!!!"));
}


Ну в обчем если где есть недочет — не серчай — я это не проверял. Но работать по идее должно. Удачи
ICQ 156156278
Re[3]: Изменение текста сообщения чужого окна.
От: Фил Россия  
Дата: 21.05.03 17:58
Оценка:
Здравствуйте, BlackHeretic, Вы писали:

BH>Здравствуйте, BlackHeretic, Вы писали:


BH>>Здравствуйте, Фил, Вы писали:


Фил>>>Привет всем! Тут передо мной встала задача изменить текст сообщения в MessageBox, выдаавемой какой-нить прогой. Я отловил дескриптор окна и теперь могу поменять заголовок, а вот как нгасчет текста сообщения? Заранее благодарен.


BH>>Проэнумеруй детские окна, там будет 2 статика. Один картинка, второй текст. Вот тот что текст и меняй на здоровье


BH>Насколько я понял дескриптор месадж бокса у тебя есть, обзовем его


BH>
BH>HWND hMsgBox;
BH>



BH>Тогда


BH>
BH>BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)
BH>{
BH>    CHWNDArray* pArr = (CHWNDArray*)lParam;
    pArr->>Add(hwnd);
BH>    return TRUE;
BH>}

BH>typedef CArray<HWND,HWND> CHWNDArray;
BH>CHWNDArray hwndArr;
BH>EnumChildWindows(hMsgBox, EnumProc, (LPARAM)&hwndArr);
BH>


BH>Ну и собсно тут у тебя есть массив всех деток.

BH>Далее пробегаешь по массиву

BH>
BH>TCHAR className[1024];
BH>int index = -1;
BH>for(int i=0; i<hwndArr.GetSize(); i++)
BH>{
BH>  if(GetClassName(hwndArr[i], className, 1024))
BH>  {
BH>    if(_tcsicmp(className, _T("STATIC")==0)
BH>    {
BH>      if(!(GetWindowLong(hwndArr[i], GWL_STYLE) & SS_ICON))
BH>      {
BH>        index = i;
BH>        break;
BH>      }
BH>    }
BH>  }
BH>}

BH>if(index>=0)
BH>{
BH>  SetWindowText(hwndArr[index], _T("Yesss!!!!"));
BH>}
BH>


BH>Ну в обчем если где есть недочет — не серчай — я это не проверял. Но работать по идее должно. Удачи

Спасибо огромное за инфу! Очень признателен! Завтра буду эксперементировать!
Фил
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.