Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 恢复文件拖放_C#_C++_Windows - Fatal编程技术网

C# 恢复文件拖放

C# 恢复文件拖放,c#,c++,windows,C#,C++,Windows,我想阻止在应用程序上拖放文件。为此,我可以使用win32 API [DllImport("ole32.dll")] public static extern int RevokeDragDrop(UIntPtr hwnd); 现在,我想恢复该应用程序的拖放功能。是否有任何API将其还原回来?您将使用RegisterDragDrop函数,这是它(可能)最初的设置方式 发件人: 如果应用程序可以在OLE拖放操作期间接受拖放的对象,则必须调用RegisterDragDrop函数。只要有一个应用程序窗

我想阻止在应用程序上拖放文件。为此,我可以使用win32 API

[DllImport("ole32.dll")]
public static extern int RevokeDragDrop(UIntPtr hwnd);

现在,我想恢复该应用程序的拖放功能。是否有任何API将其还原回来?

您将使用
RegisterDragDrop
函数,这是它(可能)最初的设置方式

发件人:

如果应用程序可以在OLE拖放操作期间接受拖放的对象,则必须调用RegisterDragDrop函数。只要有一个应用程序窗口可作为潜在的投放目标,即当窗口在屏幕上显示为未被遮挡时,请执行此操作


请注意,
RegisterDragDrop()
并不是窗口接受拖放的唯一方式。还有
DragAcceptFiles()
。还请注意,
RegisterDragDrop()
需要一个
IDropTarget
对象,您无法从窗口查询该对象,因此如果您
RevokeDragDrop()
一个您不拥有的窗口,则无法正确还原其
IDropTarget
。我不拥有此窗口。RegisterDragDrop似乎只是一种方法,因为我们似乎无法使用RegisterDragDrop将其还原回来。看起来DragAcceptFiles可能会有所帮助。我会调查的。从问题上看不清楚你不是窗户的主人。很抱歉我试着使用[DllImport(“shell32.dll”)]公共静态外部void DragAcceptFiles(IntPtr hwnd,bool fAccept);然后从代码中,我调用了DragAcceptFiles(HandleOftatProcess,false),但它并没有阻止该应用程序中的拖放文件。是否有其他方法来实现这一点?阻止文件拖放并再次取消阻止它。我知道使用鼠标钩住可以解决这个问题,但是鼠标钩住占用了太多的CPU。在C#程序中,通常会更改AllowDrop属性以调用这些本机函数。我们无法告诉您为什么要pinvoke,如果hwnd属于另一个进程,则无法正确地重新启用它。由于IDropTarget接口引用必须属于该进程。如果可以为外部程序启用它,它不算是安全隐患吗?