2009-07-21 7 views
3

どのアプリケーションがC#フォームにコンテンツをドロップしたのかを知る方法を教えてください。ドラッグアンドドロップを生成したアプリケーションの名前を取得する方法

は、今私は

if (e.Data.GetDataPresent("UniformResourceLocatorW", true)) { 
    // URL dropped from IExplorer 
} 

のように、いくつかの野生の推測をやっているしかし、私は本当に探しているものですのようなもの:

if (isDroppedFrom("iexplorer")) { 
    // URL dropped from IExplorer 
} 

私はこれをどのように行うことができますか?

+0

良い誰もこれの逆を知っていれば、質問、また、(どのようにドラッグしたアイテムのドロップ位置を取得します作成されたアプリケーション)、彼らも共有することができます:-) – ThePower

+1

その逆の場合は、おそらくユーザーがマウスを放す場所を検出し、それを把握するためにウィンドウハンドルのPIDロジックを使用する。それはちょっとしたハックだけど、簡単な問題だ。 – EricLaw

+0

htmlの場合は、SourceURLの "item"にあります。 String pastedHtml =(string)e.Data.GetData(DataFormats.Html); バージョン:1.0 StartHTML:000000182 EndHTML:000008325 StartFragment:000008144 EndFragment:000008205 StartSelection:000008144 EndSelection:000008205 のSourceURLます:http:!//www.msn.com/ Renaud

答えて

-1

OK、...

// Firefox // 
if (e.Data.GetDataPresent("text/x-moz-url", true)) { 
    HandleFirefoxUrl(e); 
} else if (e.Data.GetDataPresent("text/_moz_htmlcontext", true)) { 
    HandleFirefoxSnippet(e); 

// Internet Explorer // 
} else if (e.Data.GetDataPresent("UntrustedDragDrop", false)) { 
    HandleIELink(e); 
} else if (e.Data.GetDataPresent("UniformResourceLocatorW", false)) { 
    HandleIEPage(e); 

} else if (e.Data.GetDataPresent(DataFormats.FileDrop, true)) { //FILES 
    Array droppedFiles = (Array)e.Data.GetData(DataFormats.FileDrop); 
    HandleFiles(droppedFiles); 

} else if (e.Data.GetDataPresent(DataFormats.Bitmap, true)) { // BITMAP 
    Bitmap image = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap); 
    HandleBitmap(image); 

} else if (e.Data.GetDataPresent(DataFormats.Html, true)) { // HTML 
    String pastedHtml = (string)e.Data.GetData(DataFormats.Html); 
    HandleHtml(pastedHtml); 

} else if (e.Data.GetDataPresent(DataFormats.CommaSeparatedValue, true)) { // CSV 
    MemoryStream memstr = (MemoryStream)e.Data.GetData("Csv"); 
    StreamReader streamreader = new StreamReader(memstr); 
    String pastedCSV = streamreader.ReadToEnd(); 
    HandleCSV(pastedCSV); 

    // } else if (e.Data.GetDataPresent(DataFormats.Tiff, true)) { 
    // } else if (e.Data.GetDataPresent(DataFormats.WaveAudio, true)) { 

} else if (e.Data.GetDataPresent(DataFormats.Text, true)) { //TEXT 
    String droppedText = e.Data.GetData(DataFormats.Text).ToString(); 
    HandleText(droppedText); 

[else if .....] 

} else { // UNKNOWN 
    Debug.WriteLine("unknown dropped format"); 
} 
1

私が知る限り、元のアプリケーションを示すドラッグドロップ構造に直接の情報はありません。

* Shell Clipboard Formats(MSDN)を参照してください。

Internet   Explorerからのドロップであるかどうかだけを知りたい場合は、CFSTR_UNTRUSTEDDRAGDROPの存在が手掛かりです。 AFAIK、インターネットのみ エクスプローラとWebブラウザコントロールはこの形式をクリップボードに入れます。これは私が興味のある方のために、やってしまったものです

+0

エリック、ありがとう。それでも、私はbtwすべての主要なアプリのタイプ(ffox、すなわち、単語、Excel、電子メール、...)を区別する必要があります。だから、私はUniformResourceLocatorWなどのヒントを盗聴することで自分の道をつくっていますが、もっと一般的で堅実なアプローチを望んでいました... – Renaud

関連する問題