簡體   English   中英

自動播放處理程序:剪貼板格式錯誤?

[英]Autoplay handler: wrong clipboard format?

我正在嘗試實現Windows自動播放處理程序; 根據我發現的文檔和示例,我應該向IDataObject查詢"Autoplay Enumerated IDList Array"剪貼板格式。

所以我試圖做這樣的事情:

[DllImport("user32.dll", SetLastError = true, EntryPoint = "RegisterClipboardFormatW")]
public static extern uint RegisterClipboardFormat([MarshalAs(UnmanagedType.LPWStr)] String format);

private const string CFSTR_AUTOPLAY_SHELLIDLISTS = "Autoplay Enumerated IDList Array";
private static readonly uint AUTOPLAY_SHELLIDLISTS = RegisterClipboardFormat(CFSTR_AUTOPLAY_SHELLIDLISTS);

...

public int Drop(IDataObject pDataObj, int grfKeyState, Point pt, ref DropEffect pdwEffect)
{
    var fmt = new FORMATETC
    {
        cfFormat = (short)AUTOPLAY_SHELLIDLISTS,
        ptd = IntPtr.Zero,
        dwAspect = DVASPECT.DVASPECT_CONTENT,
        lindex = -1,
        tymed = TYMED.TYMED_HGLOBAL
    };

    int hr = pDataObj.QueryGetData(ref fmt);
    if (hr == S_OK)
    {
        ...
    }
    return 0;
}

但是QueryGetData總是返回S_FALSE (很明顯, GetData拋出)。 因此,我嘗試使用EnumFormatEtc枚舉可用格式: 它僅返回一種格式, 它返回4種格式,這些格式均與我傳遞給QueryGetData格式相同( cfFormat值為-16238、15,-16378和-16377)。 如果我使用EnumFormatEtc的第一種格式,而不是AUTOPLAY_SHELLIDLISTS ,那么一切都很好,但是我認為這不是正確的方法...

有人可以解釋發生了什么嗎? 我使用的格式錯誤嗎?

編輯:顯然,從EnumFormatEtc返回的第一種格式是"Shell IDList Array" 顯然我可以使用它,但是"Autoplay Enumerated IDList Array"發生了什么?

好的,我終於找到了一種簡單的方法,使用System.Windows.Forms.DataObject類:

    public int Drop(IDataObject pDataObj, int grfKeyState, Point pt, ref DropEffect pdwEffect)
    {
        try
        {
            var dataObj = new DataObject(pDataObj);
            if (dataObj.ContainsFileDropList())
            {
                StringCollection files = dataObj.GetFileDropList();

                // Do something with files...

            }
            return 0;
        }
        catch(Exception ex)
        {
            Trace.WriteLine(string.Format("Error: {0}", ex));
            return 1;
        }
    }

不需要任何低級COM互操作( IDropTarget接口聲明除外)...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM