如何获取生成拖放的应用程序的名称

时间:2009-07-21 14:39:28

标签: c# drag-and-drop

如何找出哪个应用程序在我的C#表单上删除了一些内容?

现在我正在做一些疯狂的猜测,比如

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

但我真正想要的是:

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

我该怎么做?

2 个答案:

答案 0 :(得分:1)

据我所知,拖放结构中没有直接信息表明原始应用程序。

请参阅* Shell Clipboard Formats(MSDN)。

如果您只是想知道它是否是Internet Explorer的丢弃,那么CFSTR_UNTRUSTEDDRAGDROP的存在就是一个线索; AFAIK,只有Internet Explorer和Web浏览器控件才会将此格式放在剪贴板上。

答案 1 :(得分:-1)

好的,对于那些感兴趣的人来说,这就是我最终要做的......

// 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");
}