Здравствуйте 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;
}
Успехов!
Павел.