Google Chrome — Открыть URL с ShellExecute — SW_SHOWMAXIMIZED не активное окно в переполнении стека

Я использовал эту функцию, чтобы открыть новую вкладку в Chrome и активировать ее:

ShellExecuteA(0,0,"chrome.exe","http://google.com  --incognito",0,SW_SHOWMAXIMIZED);

но Chrome только открывает новую вкладку, но не активное окно.
(Я вызываю эту функцию из глобальной клавиатуры-ловушки приложения без пользовательского интерфейса, если пользователь нажимает указанную клавишу).

Как я могу это исправить?

2

Решение

Похоже, ошибка в chrome.exe. Я мог бы воспроизвести с вашим ShellExecute вызов из простого консольного приложения, если был запущен обычный (не инкогнито) сеанс chrome.exe и не был запущен инкогнито. Другими словами, если нужно было создать новый сеанс Chrome «Инкогнито», обычный сеанс не отображал правильно ShowWindow флаги для порожденного процесса инкогнито. Другим фактором было то, что сбой активации также требовал, чтобы обычный сеанс chrome был активным до запуска тестового приложения. Если какое-либо другое приложение было активным (например, notepad.exe), то активация сеанса инкогнито прошла успешно. Такое же поведение происходит с ShellExecuteEx а также CreateProcess, Наблюдение в Process Explorer (из sysinternals) ясно, что chrome.exe разветвляет дочерний процесс по мере необходимости и затем завершает себя. Это затрудняет перехват hProcess или processId для окончательного вызова SetActiveWindow,

1

Другие решения

Это невозможно. Вы должны сделать Google Chrome браузером по умолчанию и попробовать это:

(проверено только на WinXP с использованием
IE6)

сначала функция, которая находит приложение по умолчанию для любого расширения файла: **

введите код сюда

#include<Registry.hpp>

AnsiString GetDefaultApp(AnsiString ext)
{
TRegistry* reg = new(TRegistry);
reg->RootKey = HKEY_CURRENT_USER;
if(!reg->OpenKeyReadOnly("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\."+ext+"\\OpenWithList"))
return(NULL);
try
{
AnsiString MRUList = reg->ReadString("MRUList");
AnsiString ret = reg->ReadString(AnsiString(char(MRUList[1])));
return(ret);
}
catch(...)
{
return(NULL);
}
}

Теперь код для запуска приложения по умолчанию для HTML-файлов и предоставления
URL в качестве параметра: **

#include<shellapi>
void OpenURL(AnsiString URL)
{
AnsiString app = GetDefaultApp("html");
if(app == NULL)
return;
ShellExecute(NULL,"open",app.c_str(),URL.c_str(),NULL,SW_SHOWDEFAULT);
}

Теперь вы можете открыть URL в новом браузере с помощью этой команды:

OpenURL("http://www.AlgorithMan.de/");
0

По вопросам рекламы [email protected]