将Win7机器拖放到我的应用程序

时间:2010-12-20 17:08:06

标签: windows winforms windows-7 drag-and-drop

我有一个用户正在Win7上运行我的Winforms应用程序。我的应用程序允许用户从打开的Excel电子表格中选择行,然后将它们拖放到应用程序中。但是,此用户无法执行拖放操作。光标变为“no”光标(带有直线的小圆圈),操作无法完成。

我正在研究drag-n-drop和Win7以及我发现的所有内容都指向UAC和/或UIPI。我正在寻找一些解决方案,我不确定下面的任何一个是否有效:

  • 如果用户以管理员身份登录(并因此以管理员身份运行我的应用),是否允许拖放操作?

  • 用户是否需要关闭或更改UAC / UIPI的设置以便能够拖放?

我不确定问题是什么。我的应用程序通常从C:/ Documents and Settings / ...(Win7上的C:/ Users / ...)运行。它是从物质运行的吗?拖放不起作用,因为用户没有运行具有足够权限的应用程序?他的Excel和我的应用程序是否在不同的权限级别?如果是这样,可以做些什么呢?请注意,即使我的应用程序允许用户直接拖动文件,但这也不起作用。

此外,有什么方法可以让用户与其他应用重现此问题吗?是否有Win7附带的应用程序,他可以看到相同的问题。例如,可以使用记事本复制吗?

感谢。

1 个答案:

答案 0 :(得分:4)

UIPI解决这个问题是非常长期的。它与用户是否以管理员身份登录没有任何关系,这不会影响UAC,并且您的程序无论如何都将使用相同的帐户运行。 UIPI可以启动停止D + D的唯一方法是你的程序被提升而Excel不被提升。

要让自己升高需要工作而不是偶然发生。你必须包含一个清单,以便用户获得UAC提示,你就知道了。或者用户必须更改桌面快捷方式并勾选“以管理员身份运行此程序”选项,她知道这一点。虽然UIPI可以绕过Windows消息(ChangeWindowMessageFilter),但它不能用于拖放,所以如果任何高程正在进行,那么你的卡住了。最终的测试是简单地要求用户将UAC滑块完全放下。

更可能的情况是,您的DragEnter事件处理程序对它看到的数据不满意,因此不会分配e.Effect属性。如果您无法在现场获得调试器,那么请编写一个小测试程序,记录e.Data.GetFormats()的值以及您用来检查丢弃是否可接受的其他任何内容。并且不要忘记显而易见的事:用户只是以某种方式摸索拖拽。