2009-07-21 10 views
3

Wie finde ich heraus, welche Anwendung einige Inhalte in meinem C# -Formular gelöscht hat?So erhalten Sie den Namen der Anwendung, die das Ziehen und Ablegen generiert hat

Im Moment mache ich ein paar wilde Vermutungen, wie

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

Aber was ich mich wirklich für so etwas wie:

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

Wie kann ich das tun?

+0

Gute Frage, auch, wenn jemand das Gegenteil davon weiß (wie den Ablageort des gezogenen Elements erhalten aus die erstellte Anwendung), könnten sie auch teilen :-) – ThePower

+1

Für den umgekehrten Fall, ich denke, Sie könnten wahrscheinlich nur feststellen, wo der Benutzer die Maus loslassen und dann Fenster-Handle-zu-PID-Logik verwenden, um es herauszufinden . Es wäre ein bisschen ein Hack, aber es ist ein einfacheres Problem. – EricLaw

+0

für HTML-Zeug, kann es in der SourceURL "Artikel" gefunden werden: String pastedHtml = (Zeichenfolge) e.Data.GetData (DataFormats.Html); Version: 1.0 StartHTML: 000000182 EndHTML: 000008325 StartFragment: 000008144 EndFragment: 000008205 StartSelection: 000008144 EndSelection: 000008205 SourceURL: http: //www.msn.com/ Renaud

Antwort

-1

OK, das ist, was ich tun endete, für die Interessenten ...

// 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

Soweit ich weiß, gibt es keine direkte Information in der Drag-Drop-Struktur, die die ursprüngliche Anwendung angibt.

Siehe * Shell Clipboard Formats (MSDN).

Wenn Sie nur herausfinden möchten, ob es sich um einen Internet Explorer handelt, ist das Vorhandensein von CFSTR_UNTRUSTEDDRAGDROP ein Hinweis; AFAIK, nur Internet   Explorer und Web Browser Controls legen dieses Format in die Zwischenablage.

+0

danke Eric, hört sich gut an. immer noch muss ich zwischen allen wichtigen app-typen (ffox, dh wort, excel, email, ...) unterscheiden. Jetzt mache ich mich auf den Weg, indem ich ein paar Tipps wie UniformResourceLocatorW und dergleichen schnüffle, aber ich habe auf einen allgemeineren und solideren Ansatz gehofft ... – Renaud

Verwandte Themen