Как получить название приложения, которое сгенерировало перетаскивание - PullRequest
3 голосов
/ 21 июля 2009

Как узнать, из какого приложения в моей форме C # было отброшено какое-то содержимое?

Прямо сейчас я делаю некоторые дикие догадки, как

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

Но то, что я действительно ищу, это что-то вроде:

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

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 21 июля 2009

Насколько я знаю, в структуре перетаскивания нет прямой информации, указывающей на исходное приложение.

См. * Форматы буфера обмена оболочки (MSDN).

Если вам интересно узнать, не является ли это каплей из Internet Explorer, наличие CFSTR_UNTRUSTEDDRAGDROP является подсказкой; AFAIK, только Internet Explorer и элементы управления веб-браузера будут помещать этот формат в буфер обмена.

0 голосов
/ 22 июля 2009

ОК, это то, что я в конечном итоге делал, для тех, кто заинтересован ...

// 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");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...