Привет всем! Тут передо мной встала задача изменить текст сообщения в MessageBox, выдаавемой какой-нить прогой. Я отловил дескриптор окна и теперь могу поменять заголовок, а вот как нгасчет текста сообщения? Заранее благодарен.
Здравствуйте, Фил, Вы писали:
Фил>Привет всем! Тут передо мной встала задача изменить текст сообщения в MessageBox, выдаавемой какой-нить прогой. Я отловил дескриптор окна и теперь могу поменять заголовок, а вот как нгасчет текста сообщения?
Почитай Рихтера. У него хорошо описано как перехватывать вызовы функций в чужом процессе. Можешь еще посмотреть тут
http://rsdn.ru/qna/?baseserv/hookapi.xml и тут
http://rsdn.ru/article/?baseserv/IntercetionAPI.xmlАвтор(ы): Тихомиров В.А.
Дата: 11.11.2002
Здравствуйте, Фил, Вы писали:
Фил>Привет всем! Тут передо мной встала задача изменить текст сообщения в MessageBox, выдаавемой какой-нить прогой. Я отловил дескриптор окна и теперь могу поменять заголовок, а вот как нгасчет текста сообщения? Заранее благодарен.
Проэнумеруй детские окна, там будет 2 статика. Один картинка, второй текст. Вот тот что текст и меняй на здоровье
Здравствуйте, 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!!!!"));
}
Ну в обчем если где есть недочет — не серчай — я это не проверял. Но работать по идее должно. Удачи
Здравствуйте, 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>Ну в обчем если где есть недочет — не серчай — я это не проверял. Но работать по идее должно. Удачи
Спасибо огромное за инфу! Очень признателен! Завтра буду эксперементировать!