В моем приложении VBA я запускаю процесс IExplore с:
Shell sIE, vbMaximizedFocus
Теперь мне нужно изменить размер созданного окна. Для этого я могу использовать функцию SetWindowPos, которая принимает дескриптор окна в качестве одного из аргументов. И у меня нет этой ручки ...
Я бы использовал функцию FindWindowLike (которая запускает окна, сравнивает заголовок с шаблоном и возвращает массив дескрипторов окон с соответствующим заголовком), но я не могу полагаться на заголовок окна. Я не могу просто изменить размер всех окон IE.
Итак, я думал об использовании ЧТО-ТО, что дало бы мне представление о окне процесса, который я только что запустил. Shell не предоставляет этого.
У меня есть пример кода, как это сделать в C ++ с помощью функции CoCreateInstance:
CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (void**)&m_pBrowser);
if (m_pBrowser)
{
pom = buffer;
m_pBrowser->put_Visible(VARIANT_TRUE);
m_pBrowser->Navigate(pom, &(_variant_t(flaga)), &vDummy, &vDummy, &vDummy);
m_pBrowser->get_HWND((long *)&hWnd);
if (hWnd != NULL)
{
...
...
Я бы перенес это на VBA, но я не совсем уверен, что поставить для четвертого параметра:
riid
[in] Ссылка на идентификатор интерфейса, который будет использоваться для связи с объектом.
Ну, я не знаю, какой интерфейс я должен пройти ... Я даже не уверен, смогу ли я использовать его в VBA.
Итак. Есть ли способ выполнить процесс, который предоставил бы мне дескриптор его окна?