我正在实现一个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
答案 0 :(得分:0)
问题解决了。 IDataObject::QueryGetData网站表示目前lindex成员仅支持-1。所以现在我的应用程序可以获取菜单项路径。
format.lindex = -1