适用于Windows 10“开始”菜单元素的剪贴板格式

时间:2015-08-06 21:28:41

标签: vb.net windows com

我正在实现一个IDropTarget COM接口,它允许任何OLE应用程序在我的应用程序上拖动它的数据。但是,当我从Windows 10“开始”菜单中删除菜单项时,它会失败。

该代码适用于桌面或Windows资源管理器中的文件夹和文件,但在来自“开始”菜单时失败。

使用CFSTR_SHELLIDLIST剪贴板格式,代码在iDataObject :: QueryGetData中失败。

有人知道Windows 10中的“开始”菜单项使用的剪贴板格式是什么?显然我可以使用IDataObject :: EnumFormatEtc但找不到任何示例。

以下是相关代码:

_format = RegisterClipboardFormat(CFSTR_SHELLIDLIST)

Public Function DragDrop1(ByVal pDataObj As System.IntPtr, ByVal grfKeyState As Integer, ByVal pt As ShellCOM._POINT, ByRef pdwEffect As Integer) As Integer Implements ShellCOM.IDropTarget.DragDrop

        Dim DataObj As ShellCOM.IDataObject
        DataObj = Marshal.GetTypedObjectForIUnknown(pDataObj, GetType(ShellCOM.IDataObject))

        If DataObj IsNot Nothing Then
            Dim format As New FORMATETC
            Dim medium As New STGMEDIUM

            format.cfFormat = _format
            format.ptd = 0
            format.dwAspect = DVASPECT.DVASPECT_CONTENT
            format.lindex = 0
            format.Tymed = TYMED.TYMED_HGLOBAL

            If DataObj.QueryGetData(format) = S_OK Then      <----- code fail here, what is the correct format of an element from Windows 10 Start Menu?
                 ' ....
                 ' ....
            End If
        End If

    Return S_OK
End Function

1 个答案:

答案 0 :(得分:0)

问题解决了。 IDataObject::QueryGetData网站表示目前lindex成员仅支持-1。所以现在我的应用程序可以获取菜单项路径。

format.lindex = -1