C#在拖动操作中是否检测到桌面文件夹鼠标向上移动?

C#在拖动操作中是否检测到桌面文件夹鼠标向上移动?,c#,winapi,desktop,directory,drag-and-drop,C#,Winapi,Desktop,Directory,Drag And Drop,情景: 从WinForm中的控件启动拖放 注意:所有拖放代码都经过验证和仔细测试。我现在就可以使用代码了 释放鼠标时在桌面上创建/写入文件 拖动到窗体外部,鼠标移到桌面或桌面上的某个“项目”上 [根据Groo的评论进行编辑] 在这种情况下,拖放可能会进入桌面(在那里它将成为一个文件:该案例已经处理);或者,拖放可能会进入另一个应用程序运行实例中相同类型的控件(与从中启动拖动的控件相同)(该情况已得到处理)。我要问的情况是,在桌面文件夹中的数据丢失发生在哪里:Groo的评论让我们想测试一下,试图“

<在发布此消息之前,我已审阅了SO显示的“相关问题”>

情景:

  • 从WinForm中的控件启动拖放

    注意:所有拖放代码都经过验证和仔细测试。我现在就可以使用代码了 释放鼠标时在桌面上创建/写入文件

  • 拖动到窗体外部,鼠标移到桌面或桌面上的某个“项目”上

  • [根据Groo的评论进行编辑]

    在这种情况下,拖放可能会进入桌面(在那里它将成为一个文件:该案例已经处理);或者,拖放可能会进入另一个应用程序运行实例中相同类型的控件(与从中启动拖动的控件相同)(该情况已得到处理)。我要问的情况是,在桌面文件夹中的数据丢失发生在哪里:Groo的评论让我们想测试一下,试图“动态”修改DataObject类型。。。在拖动过程中。。。这是我以前从未尝试过的:我不知道这是否可能

    [结束编辑]

    我可以使用此代码示例[1*]中的api调用来获取鼠标在桌面上移动时的IntPtr ID:对于任何桌面项目,如文件夹、快捷方式、回收站等,都会返回相同的IntPtr

    我想要的是:能够检测鼠标何时在桌面上的某个文件夹上释放:当然,我想要做的是获取鼠标移动到的文件夹的路径:这样我就可以在该文件夹中创建文件

    谢谢,比尔

    [1*]

    “Jörg Bausch的FindWindow”


    如果您的文件在开始拖动之前就已经存在(或者您可以在之前创建它),您只需在传递给
    DoDragDrop
    方法的
    DataObject
    实例中指定源文件路径即可

    类似这样的内容(您应该已经有了相应的处理程序):

    如果您有兴趣在拖动时添加一些奇特的半透明效果,请尝试。如果您的文件不存在,并且在将其放到资源管理器后确实需要创建它,请选中

    您还可以重写
    DataObject
    以处理对象被删除时调用的
    GetData
    方法:

    public class MyDataObject : DataObject
    {
        public MyDataObject(string format, object data)
           : base(format, data) { }
    
        public override object GetData(string format)
        {
            MessageBox.Show("Format: "+format);
            return base.GetData(format);
        }
    }
    

    谢谢,Groo,我会研究你回复的链接和代码,我会在我的帖子中添加一条评论,这可能会澄清为什么在这种情况下,我没有将文件格式对象放入DataObject中。最好的,
    public class MyDataObject : DataObject
    {
        public MyDataObject(string format, object data)
           : base(format, data) { }
    
        public override object GetData(string format)
        {
            MessageBox.Show("Format: "+format);
            return base.GetData(format);
        }
    }