Articles of 拖放

如何从ARGV获得长文件名

我想制作一个将一些文件名作为参数的工具,但是当我使用这个代码时: ARGV.each do|a| puts "Argument: #{a}" end 我使用拖放或“发送到”在Windows中,我得到的短文件名。 所以像"C:\Ruby193\bin\test\New Text Document.txt"变成C:\Ruby193\bin\test\NEWTEX~1.TXT作为参数。 从命令行运行脚本时,没有问题,以longfilenames作为参数。 当我使用拖放或发送时,如何获得长文件名?

如何检测窗口全局范围的拖动操作?

当我在Windows XP中的屏幕边缘拖动文件夹时,它将成为包含文件夹中文件的工具栏。 如何检测窗口有拖动操作? 如果我想编写一个应用程序来检测系统范围内的拖动操作,我该怎么做? 还有另一个问题:我怎样才能禁用这个Windows XPfunction呢,真是烦人。

拖放到winapi

我有一个纯粹的Winapi应用程序,需要一些新的function。 其中之一将最好作为两个列表实现,您可以在列表之间拖放(多个)元素。 新function可以限制为一个对话框。 什么是最快捷的方式来实现呢? 一些想法: 纯Winapi(它是DetectDrag) 提供这一个对话框的单独的MFC或.NET DLL embeddedMicrosoft WebBrowser控件并使用JQuery 任何应该避免的选项? 任何更好的想法? 什么是最快实施? 任何指针如何开始?

资源pipe理器在执行拖放操作时不会释放IDataObject

我在我的应用程序中执行拖放操作。 我遇到了Windows资源pipe理器在拖放操作后不能释放我的IDataObject的问题。 为了隔离这个问题,我实现了一个非常简单的拖放源代码,它应该在大多数Win32编译器中编译。 数据对象不包含数据; 正如你所看到的一切非常简单。 数据对象包含可以使用DebugView查看的跟踪,以指示何时创build以及何时销毁。 重现: 按住鼠标键开始拖动。 将对象拖放到打开的Windows资源pipe理器窗口中。 观察DebugView中的输出; 样本输出: [4964] gdo ctor [4964] gds ctor [4964] gds dtor 这个输出表明数据源被破坏了,但有人仍然持有对我的IDataObject的引用! 开始在同一浏览器窗口中拖动文件。 即使我现在还没有和我的项目进行交互,它会导致gdo dtor被打印 – 表示对IDataObject的最终引用被释放。 我正在运行Windows 7 64位。 有意思的是,一些资源pipe理器的窗口在释放之后立即释放数据对象; 其他人似乎没有这样做,直到你开始拖动一个不同的对象到资源pipe理器窗口,如步骤#4所示。 它也似乎取决于在窗口中的哪个位置放置对象 – 有些地方会立即释放对象,有些则不会。 这很奇怪! 我的问题是这些: 资源pipe理器正常吗? 为什么是这样? 或者我的代码中有一个错误? 当我的应用程序终止时,看到COM对象仍然被引用是非常令人不安的! 这也意味着IDataObject所拥有的资源是捆绑的,直到资源pipe理器决定释放该对象。 如果这确实是正常的行为(即使它不是,我想我应该处理不合适的放置目标),那么当应用程序终止时清理未释放COM对象的最佳做法是什么? 我正在用C ++ Builder编写和使用ATL,当用户试图closures应用程序,他们得到一个非常不友好的“在这个应用程序仍然有活动的COM对象,等等等等等等,你确定要closures这个应用程序?” – 大概由ATL生成,它注意到有未发布的COM对象 – 通常在应用程序closures时是一件坏事。 这是一些示例代码。 它实现了一个不提供数据的IDataObject,以及一个非常基本的IDropSource。 当然,真正的应用程序通过IDataObject提供数据,但是我发现这个基本的实现足以重现这个问题。 我用C ++ Builder写的,但是其中90%是可移植的Win32代码。 […]

在运行时拖动窗体上的控件

我刚开始使用WPF。 但我试图添加我的代码(从Winforms),使用户可以拖动任何他们希望在运行时控制。 但我似乎无法得到鼠标的当前位置…呃? 没有鼠标的位置? 🙁

各种剪贴板/拖放格式是什么意思?

我正在玩拖放。 我做了一个示例应用程序,并从我的音乐文件夹中删除一个文件到我的应用程序 以下是e.Data.GetFormats()返回的内容: Shell IDList Array UsingDefaultDragImage DragImageBits DragContext DragSourceHelperFlags InShellDragLoop FileDrop FileNameW 文件名 IsShowingLayered DragWindow IsComputingImage DropDescription DisableDragText ComputedDragImage IsShowingText 这些都意味着什么,以及如何解码和使用它们? 谷歌search他们每个人没有得到任何有用的信息。

使用Windows IStream下载文件

我正在实现将一个虚拟文件从一个网站拖出,并通过一个ActiveX控件拖到桌面上。 如何在我的http url上创build一个IStream ,所以Windows可以执行这个drop? 我正在看的例子使用SHCreateStreamOnFile复制本地文件; 对于其他types的stream,例如http文件下载,必须有类似的function。

覆盖shell扩展的拖放

我正在C ++中使用ShellExtension代码。 我正在创build一个虚拟驱动器。 其中代表networking中的某个存储库。 我现在想要的是启用拖放function到这个驱动器。 我想让用户拖动文件到该虚拟驱动器,然后我必须能够抓住该事件,以便我可以执行我的自定义操作。 到目前为止,我无法find任何此类事件或接口。 我尝试使用IDragAndDrop接口,但其rgs文件没有正确注册。 有什么出路吗?

在我的delphi项目中拖放不起作用

这个话题显然在这里一遍又一遍地被打了,但是现在我从我的观点来看只是没有办法。 操作系统: Windows XP SP3 所以,这里是我在我的应用程序中使用的RichEdit的拖放示例 : procedure TForm1.AcceptFiles( var msg : TMessage ); // or TWMDROPFILES const cnMaxFileNameLen = 255; var i, nCount : integer; acFileName : array [0..cnMaxFileNameLen] of char; begin // find out how many files we're accepting nCount := DragQueryFile( msg.WParam, // or msg.Drop $FFFFFFFF, acFileName, cnMaxFileNameLen ); // query Windows […]

如何拖拽大量的文件而不消耗系统资源?

我正在处理的程序中的一个function是将对象从其主窗口拖放到Windows资源pipe理器中作为文件。 为此,我们重写COleDataSource::OnRenderGlobalData() ,当格式为CF_HDROP ,我们将每个对象保存为一个文件。 当对象数量很小时,这工作正常。 但是,由于我们正在努力支持企业级别的对象,因此当用户试图将大量对象从我们的应用程序拖放到Windows资源pipe理器中时,我们看到很大的延迟,有时会导致挂起或最终崩溃。 我的猜测是,这是因为OnRenderGlobalData()被调用了很多次,当然,每次必须遍历被拖动的对象并将它们保存为文件。 我正在研究覆盖OnRenderFileData()的想法,但问题是它一次只处理一个文件。 有什么办法可以加快我们的应用程序,当用户试图拖动大量的对象到Windows资源pipe理器,最好是通过将保存循环移动到只能执行一次,当实际下降发生的地方?