2009-07-21 95 views
3

如何找出哪些应用程序在我的C#表单上放置了一些内容?如何获取生成拖放的应用程序的名称

现在,我做了一些乱撞,像

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

。但我真正需要的是这样的:

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

我怎样才能做到这一点?

+0

好问题,也是,如果有人知道这个相反的(如何获得拖动项目的放置位置从创建的应用程序),他们也可以分享:-) – ThePower 2009-07-21 14:43:06

+1

对于反之亦然的情况,我想你可能只是检测用户放开鼠标的位置,然后使用窗口句柄到PID逻辑找出它。这有点破解,但这是一个更容易的问题。 – EricLaw 2009-07-21 14:47:21

回答

-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)。

如果您只是想了解它是否是因特网 资源管理器的丢失,那么CFSTR_UNTRUSTEDDRAGDROP的出现是一个线索; AFAIK,只有互联网 资源管理器和Web浏览器控件将把这种格式放在剪贴板上。

相关问题