どのようなものを見つけるか“種類”のドキュメントがIEに表示されています

StackOverflow https://stackoverflow.com/questions/823182

  •  05-07-2019
  •  | 
  •  

質問

iはc#を使用してIE用のボタンを作成しています。このボタンは、PDFドキュメントであるドキュメントにすべて依存する特定のアクションを実行します。ドキュメントタイプがPDFではない場合にアクションが発生しないようにガードを設定しようとしていますが、IEがAdobeにドキュメントを渡してリーダーが担当する方法がわからない。私は両方のSHDocWvを使用していますが、WebBrowserClassオブジェクトを調べましたが、これをどのように把握するかわかりません。提案はありますか?

役に立ちましたか?

解決

これを知るのは少し問題があります。

IWebBrowser2 :: Type プロパティの値は、PDFを処理するプラグインによって異なります。一部のプラグインは、AdobeなどのPDFファイルのHTMLラッパーを作成するため、" HTMLドキュメント"タイプとして、一部のプラグインは(Foxitのように)これを行わないため、これだけを中継することはできません。

したがって、HTMLラッパー付きのPDFを取得した場合は、 IHTMLDocument2 :: mimeType を使用してドキュメントの正確なタイプを確認できます(JPEG / GIF / PNG / etc。ファイルはすべてHTMLでラップされますブラウザ)。しかし、私が知っているように、たとえば私のマシンでは、「Firefox Document」を返します; .htmlファイルはFirefoxに関連付けられているため、HTMLドキュメントの場合:sしかし、これがPDFの場合に当てはまるかどうかはテストしませんでした。

もう1つのオプションは、 GetUrlCacheEntryInfoEx API呼び出しを使用して、ドキュメントを保存するローカルブラウザーキャッシュにファイルを取得し、それを読み取ることです(ファイルの先頭のみ、最初の256バイトのみが重要だと思います)読んだばかりのデータで FindMimeFromData を呼び出すと、MIMEタイプが返されます。

他のヒント

ドキュメントのMIMEタイプを確認するか、webbrowserのwindow.location.hrefを参照してください... pdfが表示されている場合、見つけることができます...

別の良い方法は、次のことを行うことです。

1] DocumentオブジェクトをIPersistにキャストし、.GetClassID(..)を使用してCLSIDを抽出します。 2] ProgIDFromCLSIDをpInvokeして、progIdを抽出します 3] progIDを既知のCOMオブジェクト/アプリケーションと照合します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top