スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
 

エクスプローラの取り込み

エクスプローラからアドレスを取得するのに以下の様な感じで CWM_GETPATH → SHLockShared で取得していました。

dwProcID := GetCurrentProcessId();
SendMessageTimeout(hWindow, CWM_GETPATH, dwProcID, 0, SMTO_ABORTIFHUNG, 2000, hMem);
ItemIDList := SHLockShared(hMem, dwProcID);
Result := ILClone(ItemIDList);
SHUnlockShared(ItemIDList);
SHFreeShared(hMem, dwProcId);

Vista で取得できないと言う事で調べたら SHLockShared 等が shell32.dll から無くなっているらしい。情報源は BugTrack-MDIE/83 - MDIE wiki

SHLWAPI.DLL に SHLockShared 等がある様なので調整したのが、11-2-27

11-2-27でダメだったので、さらに調べてみると Vista で CWM_GETPATH が動かないと書かれた情報がチラホラ。
ちょっと方向性を変えて IShellWindows でIEとエクスプローラの情報が取れるらしいので調整してみました。

SW := CoShellWindows.Create; //IShellWindows取得
spDisp := SW.Item(i); //IDispatch
spDisp.QueryInterface(IWebBrowser2, WB); //IWebBrowser2取得

通常パスなら 後、WB.LocationURL でOKだけど、マイコンピュータ等の特殊フォルダは取れないので…

WB.QueryInterface(IServiceProvider, SP); //IServiceProvider取得
SP.QueryService(SID_SShellBrowser, IID_IShellBrowser, SB); //IShellBrowser取得
SB.QueryActiveShellView(SV); //IShellView取得
SV.GetItemObject(SVGIO_ALLVIEW, IDataObject, Pointer(dataObj)); //IDataObject取得

といった感じで IDataObject を取得してそこから ItemIDList を取り出しています。
ただ、Window95 でI ShellWindowsは動かないので CWM_GETPATH でダメだったら、IShellWindowsで取得するようにしています。
スポンサーサイト
 

コメント

コメントの投稿

  • URL
  • コメント内容
  • password
  • 秘密
  • 管理者にだけ表示を許可する

トラックバック

トラックバックURL: http://gakana.blog34.fc2.com/tb.php/4-54b9317a
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。