1

Windows のシェル エクスプローラーは、ユーザー「インターネット ブラウザー」へのリンクである ::{2559a1f4-21d7-11d4-bdaf-00c04f60b9f0 などのグローバル オブジェクトを定義します。アプリケーションにドラッグ アンド ドロップしたショートカットからこれらの値を取得しましたが、それを使用して開く方法が見つかりません...

このオブジェクトが何であるかについての情報も取得したいと思います。

  • このオブジェクトが何であるかを Windows に尋ねる方法を知っている人はいますか?
  • 誰かがそれを開く方法を知っていますか?

これらのオブジェクトは、次のレジストリから読み取ることで見つけることができます:

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

通常、レジストリから直接読み取ることはお勧めできません。これらの値を読み取るためのよりクリーンな方法があれば幸いです。

ありがとう。

4

2 に答える 2

1

fMask フィールドを SEE_MASK_CLASSKEY に設定し、lpVerb フィールドを「open」に設定し、lpClass を GUID に設定して、SHELLEXECUTEINFO 構造体に入力する必要があるようです。

しかし、私はいまいましいことを機能させることはありませんでした。代わりに、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 のファイルの既定のビューアーとして定義されているアプリを開きます。

于 2009-09-21T10:43:02.537 に答える
0

http://msdn.microsoft.com/en-us/library/ms997573.aspxの「Creating Shell Extensions with Shell Instance Objects」から、

従来のシェル拡張ではオブジェクトを実装するために DLL が必要ですが、シェル インスタンス オブジェクトは必要な情報をすべてレジストリから取得します。

それらを作成するための文書化された解決策であるため、レジストリから情報を読み取ることは安全であるようです。

于 2009-09-22T16:30:54.203 に答える