2015-06-10 4 views
1

Я нашел сценарий (http://www.codeproject.com/Articles/28209/Outlook-Drag-and-Drop-in-C), который позволяет перетаскивать изображения в приложение C#. (особенно из Outlook) Формат fileDrop используется для копирования (перетаскивания) изображений с моего жесткого диска на приложение C#. Это хорошо работает, когда изображения хранятся на моем жестком диске, но когда я пытаюсь перетащить изображения непосредственно с карты памяти (с камеры или смартфона (например, Samsung S3)), это не сработает. Это тяговые форматы я получаю от этих изображений (ы):Как перетаскивать изображения непосредственно с камеры или смартфона на приложение C#?

(0): "Shell IDList Array" 
(1): "FileContents" 
(2): "FileGroupDescriptorW" 
(3): "WPD Storage Attributes" 
(4): "Preferred DropEffect" 
(5): "WPD NSE" 
(6): "WPD NSE PnPDevicePath" 
(7): "WPD NSE StoragePUID" 
(8): "UsingDefaultDragImage" 
(9): "DragImageBits" 
(10): "DragContext" 
(11): "DragSourceHelperFlags" 
(12): "InShellDragLoop" 
(13): "IsShowingLayered" 
(14): "DragWindow" 
(15): "IsComputingImage" 
(16): "DataObjectAttributes" 
(17): "DisableDragText" 
(18): "IsShowingText" 
(19): "DropDescription" 
(20): "ComputedDragImage" 
(21): "Logical Performed DropEffect" 
(22): "Performed DropEffect" 
(23): "Paste Succeeded" 

Когда я пытаюсь получить доступ к «FileGroupDescriptorW» Я получаю недопустимую ошибку нарушения прав доступа. Кроме того, здесь отсутствует файл FileGroupDescriptor? Может ли кто-нибудь помочь мне решить эту проблему? Я искал этот сайт и Google, но не нашел ничего полезного.

ответ

-2

Решение опубликовано John Schroedl и было скрыто во многих реакциях на тему.

Эти два 'фиксирует' фиксированная моя проблема:

http://www.codeproject.com/Articles/28209/Outlook-Drag-and-Drop-in-C?msg=3535951#xx3535951xx

OLD C#:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] 
public sealed class FILEGROUPDESCRIPTORA 
{ 
    public uint cItems; 
    public FILEDESCRIPTORA[] fgd; 
} 

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] 
public sealed class FILEGROUPDESCRIPTORW 
{ 
    public uint cItems; 
    public FILEDESCRIPTORW[] fgd; 
} 

ИСПРАВЛЕНО C#:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] 
public sealed class FILEGROUPDESCRIPTORA 
{ 
    public uint cItems; 
    public FILEDESCRIPTORA fgd; 
} 

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] 
public sealed class FILEGROUPDESCRIPTORW 
{ 
    public uint cItems; 
    public FILEDESCRIPTORW fgd; 
} 

И это исправление: http://www.codeproject.com/Articles/28209/Outlook-Drag-and-Drop-in-C?msg=3551197#xx3551197xx

Старый:

case "FileContents": 
    //override the default handling of FileContents which returns the 
    //contents of the first file as a memory stream and instead return 
    //a array of MemoryStreams containing the data to each file dropped 

    //get the array of filenames which lets us know how many file contents exist 
    string[] fileContentNames = (string[])this.GetData("FileGroupDescriptor"); 

Fix:

case "FileContents": 
    //override the default handling of FileContents which returns the 
    //contents of the first file as a memory stream and instead return 
    //a array of MemoryStreams containing the data to each file dropped 
    // 
    // FILECONTENTS requires a companion FILEGROUPDESCRIPTOR to be 
    // available so we bail out if we don't find one in the data object. 

    string fgdFormatName; 

    if (GetDataPresent("FileGroupDescriptorW")) 
     fgdFormatName = "FileGroupDescriptorW"; 
    else if (GetDataPresent("FileGroupDescriptor")) 
     fgdFormatName = "FileGroupDescriptor"; 
    else 
     return null; 

    //get the array of filenames which lets us know how many file contents exist 
    string[] fileContentNames = (string[])this.GetData(fgdFormatName); 

В случае, если кто нуждается в этом ...