[英]C# Drag drop does not work on windows 7
我使用C#winforms有一段時間的項目。 我在Windows 7發布之前實現了拖放功能。 工作就像一個魅力。 但是,使用Windows 7時它不起作用。 該事件甚至沒有被觸發。
AllowDrop
設置為true。 訂閱DragEnter
它不會在Windows 7中調用(不確定vista)。 但是在XP上它一直都有效。 該程序使用administritave priviliges運行。
Windows 7與xp的拖拽有什么不同嗎? 不知道它是否相關,但我使用的是x64
源和目標進程需要具有兼容的安全級別\\權限。 例如,如果您的源是資源管理器並且它以用戶級別權限運行,但您的目標應用程序正在以管理員(提升)級別權限運行,則您將無法拖放,因為這被視為安全問題,因為目標是以更高級別的權限運行。
它被稱為UIPI,用戶界面權限隔離。 旨在防止來自具有受限特權的程序的輸入注入攻擊。 它可以被禁用,你需要這樣做:
<requestedExecutionLevel>
元素的uiAccess屬性設置為true。 從來沒有嘗試過這個,ymmv。
它可能是無關的,但我在Windows 8中遇到了拖拽拖拽問題。它會工作一段時間然后停止工作。 我無法在資源管理器,編輯器等之間拖放。事實證明,當我與運行Windows 7的Hyper-V VM進行交互時,我的拖放能力發生了變化(或者可能是ctrl-alt-end鍵擊以模擬crtl-alt-delete到Hyper-V)。 無論如何,一個問題發生了,以下解決了這個問題:
我在這里找到了我的問題的解決方案: 修復拖放功能在Windows 7 Vista XP中不起作用
基本上解決方案是:
左鍵單擊資源管理器中的文件,在按住鼠標按鈕的同時,按[Esc],然后按[Ctrl],然后釋放鼠標按鈕。 我必須假設這是重置一些輔助功能設置或其他東西。
在您的應用程序中,使用以下值調用ChangeWindowMessageFilter,以允許拖放到提升的應用程序和非提升的應用程序(如Explorer):
ChangeWindowMessageFilter (WM_DROPFILES, MSGFLT_ADD);
ChangeWindowMessageFilter (WM_COPYDATA, MSGFLT_ADD);
ChangeWindowMessageFilter (0x0049, MSGFLT_ADD);
dmex的帖子的一個小的補充。 以下定義變量和常量。
private const uint WM_DROPFILES = 0x233;
private const uint WM_COPYDATA = 0x004A;
private const uint WM_COPYGLOBALDATA = 0x0049;
private const uint MSGFLT_ADD = 1;
此外,如果您的應用程序在Windows 7上,您可能需要考慮使用ChangeWindowMessageFilterEx
。我還認為OLE拖放可能不會使用Windows消息傳遞。 所以它根本不會影響。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.