Re: А как открыть окно браузерера, чтоб оно имело определенн
От: Snax Россия  
Дата: 18.10.02 07:45
Оценка:
Здравствуйте ivankor, Вы писали:

I>А как открыть окно браузерера, чтоб оно имело определенные размеры?

А...... а причем тут мультимедия, графика, да еще и звук?
По-моему, тут чистое WinAPI. Ну да ладно. Во-первых, придется
использовать ::CreateProcess() в "чистом" виде:
    TCHAR  szExec[MAX_PATH];
    DWORD dwLen = MAX_PATH;

    PROCESS_INFORMATION    pi = {0};
    STARTUPINFO si = {0};
    si.cb = sizeof(STARTUPINFO);
    si.dwFlags = STARTF_USEPOSITION | STARTF_USESIZE | STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_NORMAL;
    si.dwX = 100;
    si.dwY = 100;
    si.dwXSize = 1000;
    si.dwYSize = 100;

    ::AssocQueryString(0, ASSOCSTR_EXECUTABLE, _T(".html"), _T("Open"), szExec, &dwLen);
    ::lstrcat(szExec, _T(" http://www.rsdn.ru/"));
    ::CreateProcess(NULL, szExec, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
    ::CloseHandle(pi.hProcess);
    ::CloseHandle(pi.hThread);


Собственно, все. За исключением того, что программисты из Редмонда #$% кладут
на эти параметры. В самом деле, они же лучше Вас знают, что Вам нужно.
Поэтому читают из реестра какую-то сохраненную позицию и выставляют в нее
свое окошко. Впрочем, на @#$% с закоулками найдется #$% с винтом.

Придется подождать, пока окошко прорисуется и перетащить на новое место.
Сразу опосля ::CreateProcess() нужно добавить еще пару строк.

    // Ждем секунду, чтобы процесс запустился
    ::SleepEx(1000, false);
    // Еще немного, если нужно
    ::WaitForInputIdle(pi.hProcess, INFINITE);
    // Ищем главное окно (должно быть одно)
    ::EnumThreadWindows(pi.dwThreadId, EnumThreadWndProc, (LPARAM)&hWndMain);
    // Делаем, что хотим
    ::MoveWindow(hWndMain, 100, 200, 1000, 100, true);
    ::CloseHandle(pi.hProcess);
    ::CloseHandle(pi.hThread);


А вот функция перебора окон (все равно оно одно):

BOOL CALLBACK EnumThreadWndProc(HWND hwnd, LPARAM lParam)
{
    HWND *phwnd = (HWND *)lParam;
    *phwnd = hwnd;
    return TRUE;
}


Успехов!

Павел.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.