gpt4 book ai didi

c# - 自动播放处理程序 : wrong clipboard format?

转载 作者:可可西里 更新时间:2023-11-01 10:37:42 24 4
gpt4 key购买 nike

我正在尝试实现 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 接口(interface)声明除外)...

关于c# - 自动播放处理程序 : wrong clipboard format?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15972801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com