Возможно такой вариант подойдет (под 98 не проверял, под XP работает):
| Код | HWND CConsole::GetHWnd() { char title[256]; char newtitle[256]; wchar_t lpsz[256];
// Создаем GUID GUID guid; HRESULT hr = CoCreateGuid( &guid ); if ( FAILED( hr ) ) return NULL;
// Конвертируем его в текстовое представление (UNICODE) int size = StringFromGUID2( ( REFGUID ) guid, lpsz, 256 );
// Конвертируем UNICODE в ANSI wcstombs( newtitle, lpsz, size );
// Сохраняем текущий заголовок консоли if ( !GetConsoleTitle( title, sizeof( title ) ) ) return NULL;
// Устанавливаем уникальный заголовок if ( !SetConsoleTitle( newtitle ) ) return NULL;
Sleep( 40 );
HWND hwnd = FindWindow( NULL, newtitle );
if ( !hwnd ) return NULL;
if ( !SetConsoleTitle( title ) ) return NULL;
Sleep( 40 );
// Проверяем правильность найденного хэндла окна
GetWindowText( hwnd, newtitle, sizeof( newtitle ) ); if ( lstrcmp( title, newtitle ) ) return NULL;
return hwnd; }
|
Смысл в том, чтобы назначить заголовку окна уникальный текст, а затем найти окно с таким заголовком. |