C#在拖动操作期间检测桌面文件夹鼠标?

标签 c# winapi desktop directory drag-and-drop

<在发布之前我已经查看了 SO 显示的“相关问题”>

场景:

  1. 从 WinForm 中的控件开始拖放。

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

  2. 拖动到窗体之外,鼠标移到桌面或桌面上的某个“项目”上。

[编辑以回应 Groo 的评论]

在这种情况下,拖放可能会进入桌面(它将成为一个文件:这种情况已经处理);或者,拖放可能会进入另一个应用程序的运行实例中的相同类型的控件(作为从中启动拖动的控件)(这种情况已处理)。我要问的情况是在桌面文件夹上发生下降的地方:Groo 的评论让我想测试尝试“即时”修改 DataObject 类型......在拖动期间......我从未尝试过之前:我不知道这是否可能。

[结束编辑]

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

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

谢谢,比尔

[1*]

“Jörg Bausch 的 FindWindow”

http://www.codeproject.com/KB/dialog/FindWindow.aspx?msg=3262771

最佳答案

如果您的文件在您开始拖动之前就存在(或者您之前能够创建它),您可以简单地在DataObject 中指定源文件路径。实例传递给 DoDragDrop方法。

像这样(你应该已经有合适的处理程序):

public partial class Form1: Form
{
    public Form1()
    {
       InitializeComponent();
       this.MouseDown += Form1_MouseDown;
    }

    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        string[] files = new string[] { @"C:\SomeTestFile.txt" };
        this.DoDragDrop(new DataObject(DataFormats.FileDrop, files),
          DragDropEffects.Copy);
    }
} 

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

您还可以覆盖 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);
    }
}

关于C#在拖动操作期间检测桌面文件夹鼠标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1699504/

相关文章:

c# - 如何将 SonarLint 分析结果从 Visual Studio 发送到 SonarQube 服务器

时间:2019-05-17 标签:c#genericclass: how can I restrict a member function to be used with specific types?

c++ - 异步 ReadDirectoryChangesW 调用阻止线程退出

java 。通过单击按钮绘制形状的问题

Java Swing Clickable JFree Charts,单击每个条形图或饼图即可打开新框架或新图表

java - 在 Windows 桌面上创建快捷方式图标

c# - 从 URL 链接获取名称的正则表达式

c# - .Net Regex 性能问题

c++ - MapViewOfFile 中信号量的最佳方法 - C++

c++ - ImageList 和 BltBit - ting