ページ 11

SHGetInstanceExplorer()が失敗してしまいます

Posted: 2007年3月05日(月) 15:12
by THEREMIN
以下のフォーラムの投稿を読んで、SHGetInstanceExplorerを使ってみたのですが、どうしても 80004005(Unspecified error)が出てしまいます。
http://forums.belution.com/ja/vc/000/089/87.shtml

コード: 全て選択

Declare Function SHGetInstanceExplorer Lib "shell32.dll" (ByRef ppunk As *IUnknown) As Long
'--------------------------------------------------------------------------------
Dim hr As Long
Dim piu As *IUnknown
Dim pMalloc As *IMalloc
hr = CoInitialize(0)
hr = CoGetMalloc(1, pMalloc)
hr =SHGetInstanceExplorer(piu)
debug
pMalloc->Release()
CoUninitialize()
Declare Function SHGetInstanceExplorer Lib "shell32.dll" (ppunk As **IUnknown) As Long
hr =SHGetInstanceExplorer(VarPtr(piu))
にしてもやっぱり同じエラーです。

MSDN2を参照してみると、
SHGetInstanceExplorer succeeds only if it is called from within an Explorer.exe or Iexplorer.exe process.
http://msdn2.microsoft.com/en-us/ms647769.aspx
と書いてあるので、ExplorerかIEの内部から呼ぶ必要がある?のだと思うのですが、そのやり方がさっぱり分かりません。
それ以前に、この考え方が正しいのかどうかもわかりません。MSDN2には
SHGetInstanceExplorer fails if the component is running in the default Explorer.exe process.
とも書いてあるんですが・・・

Posted: 2007年3月22日(木) 04:26
by trio
英文を全く読む気がないので無視してもらって構いません(二週間も前の記事だしね…)

本当にExplorerかIEの内部からしか呼べないのであれば
自分でIEやExplorerのプロセスを起動するか
既存のスレッドにフックを仕掛けるかのどちらかしかないと思います

フックに関してはSetWindowsHookExで検索すればどこかしら引っかかる筈です
自前でプロセス起動するよりも数段面倒くさいですが

Posted: 2007年3月22日(木) 07:44
by イグトランス
この関数はシェル拡張などでexplorer/iexploreのプロセス内で動くコンポーネントを対象としているようです。フックでプロセスに入って使うものではないと思います。

まさか返事が来るとは思ってなかった

Posted: 2007年3月22日(木) 18:27
by THEREMIN
シェル拡張ですか。
普通のプログラムからは使えない関数だと認識しておきます。