Как запустить ShellExecute на объекте оболочки clsid? - PullRequest
1 голос
/ 21 сентября 2009

Оболочка в Windows определяет глобальные объекты, такие как: {{2559a1f4-21d7-11d4-bdaf-00c04f60b9f0), которая является ссылкой на пользовательский «интернет-браузер». Я получил это значение из ярлыка, который перетаскивал мое приложение, но я не могу найти, как использовать его, чтобы открыть его ...

Я бы тоже хотел получить информацию о том, что это за объект.

  • Кто-нибудь знает, как спросить у Windows, что это за объект?
  • Кто-нибудь знает, как его открыть?

Я обнаружил, что эти объекты можно найти, прочитав реестр по адресу:

initString = HLCR\CLSID\\{CLSID\}\PersistentBag\InitString
openCommand = HKLM\Software\Clients\{initString}\shell\open\command

Обычно не очень хорошая идея читать напрямую из реестра. Я бы хотел иметь более понятный способ прочитать эти значения.

Спасибо.

Ответы [ 2 ]

1 голос
/ 21 сентября 2009

Очевидно, вам нужно заполнить структуру SHELLEXECUTEINFO, в поле fMask установлено значение SEE_MASK_CLASSKEY, в поле lpVerb установлено значение "open", а в поле lpClass указано значение GUID.

Тем не менее, я никогда не получал эту чертову работу. Вместо этого я использовал файл правильного типа для использования в вызове CreateProcess.

    HINSTANCE h = FindExecutable("blank.htm", NULL, buffer);

    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

    char url[MAX_PATH];
    sprintf(url, "\"%s\" %s", buffer, (LPCTSTR)m_url);
    CreateProcess(NULL, url, NULL, NULL, FALSE, 0 , NULL, NULL, &si, &pi);

Открывает приложение, которое определено как средство просмотра по умолчанию для файлов типа .htm.

0 голосов
/ 22 сентября 2009

Из "Создание расширений оболочки с объектами экземпляра оболочки" в http://msdn.microsoft.com/en-us/library/ms997573.aspx сказано, что

В то время как традиционному расширению оболочки требуется DLL для реализации объекта, объект экземпляра оболочки извлекает из реестра все, что ему нужно знать.

Кажется безопасным считывать информацию из реестра, поскольку это документированное решение для их создания.

...