IDownloadManager interface
https://msdn.microsoft.com/en-us/library/aa753613(v=vs.85).aspx
インターフェイスの定義の方は、次のようになっています。
MIDL_INTERFACE("988934A4-064B-11D3-BB80-00104B35E7F9") IDownloadManager : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE Download( /* [in] */ IMoniker *pmk, /* [in] */ IBindCtx *pbc, /* [in] */ DWORD dwBindVerb, /* [in] */ LONG grfBINDF, /* [in] */ BINDINFO *pBindInfo, /* [in] */ LPCOLESTR pszHeaders, /* [in] */ LPCOLESTR pszRedir, /* [in] */ UINT uiCP) = 0; };
要は GET や POST でダウンロードが必要な場合に
確認を求めてくる、あの画面です。
通常 Download が呼び出されますが。横取りされて、Download が履行されないケースも確認しています:
- PDFファイルが、Adobe Acrobat Reader 等でインライン表示される場合。
- テキスト形式に見えるファイルが、インライン表示される場合。
Download に渡ってくる引数につきまして:
- pmk 以外は、ほとんど NULL。当てにできません。
- POST の場合は、GET と同じ要領で来ます。判別する明確な方法は見つかっていません。
こういう物を見つけました。
IE custom download manager (CSIEDownloadManager)
https://code.msdn.microsoft.com/windowsdesktop/CSIEDownloadManager-8ab5d910
ビルドしたサンプルを参考までにお配りしています。
Setup_CSIEDownloadManager.exe
https://drive.google.com/file/d/0Bygl-em20CSKcEhKZFYxdVZUemM/view?usp=sharing
Windows 8.1 の IE11 でも動きましたので、IDownloadManager は未だ有効のようです。
大変興味記事を参考にさせていただいています。1点質問をさせていただけないでしょうか。
返信削除当方もCSIEDownloadManagerの挙動を確認したくWindows10(1809)環境とVisualStudio2017(community)でコンパイルしてみましたが、
IEのダウンロード時に本プログラムのCOMの参照に失敗しているようです。実行ファイルやインストーラ(msi)は問題なく生成できておりました。
貴殿のインストーラを利用してみると問題なく動きましたが、インストール時の挙動が当方とは異なるものでした。
当方はMicrosoft Visual Studio Installer Projectsを利用して、生成されたmsiを使ってインストールしておりますが、貴殿はどのようなものを利用されていますか?
お世話になります。
削除御返事が遅くなりました💦
> 当方はMicrosoft Visual Studio Installer Projectsを利用して、生成されたmsiを使ってインストールしておりますが、貴殿はどのようなものを利用されていますか?
NSIS を使用しています。
セットアップを改めて実行しましたが NSIS でした。
まことに残念ながら、NSIS セットアップを含むソースコードは発見できませんでした。紛失した模様です。
> IEのダウンロード時に本プログラムのCOMの参照に失敗しているようです。
DLL はレジストリに登録されていますか?
regsvr32.exe xxx.dll
また 32-bit 版と 64-bit 版の違いは大丈夫でしょうか。
64-bit Windows の iexplore.exe は 64-bit で動作するようです。
Visual Studio をお使いとのことで…
oleview.exe を使用すると
COM オブジェクトの一覧化とインスタンス化ができるので、
登録有無の調査については役に立つかもしれません。
お世話になります。
削除ソースコード一式を発見しました
役立ちそうな NSIS のソースコードだけアップしました。
Setup_CSIEDownloadManager.nsi.txt
https://drive.google.com/open?id=1gD_xn2Q2v4fNW1_7SZHyIE6qH_AVFKTP
.NET Framework の regasm.exe で COM コンポーネント登録をしていることがわかりました。
ExecWait '"$WINDIR\Microsoft.NET\Framework\v4.0.30319\regasm.exe" /codebase "$OUTDIR\CSIEDownloadManager.dll"' $0