2011-03-09 62 views
0

我有一個C#應用程序,需要使用runas升級才能運行某些功能。我現在遇到的問題是,我有一個拖放的picturebox在runas後不工作。我一整晚都在讀帖子,所以我很熟悉這個原因。我還發現了許多有關通過過濾器接受這些消息的信息。 http://msdn.microsoft.com/en-us/library/ms632675(v=VS.85).aspx從用戶進程拖放到提升進程

我還沒有找到什麼,我希望有人可以幫助我,這是如何以及在代碼的哪裏實現這一點。我一直在嘗試各種方法,但無法實現。這裏有一段代碼,我試圖讓這個工作。順便說一下,我也嘗試用清單中的篩選器進行更改,但是也沒有去那裏。預先感謝任何人可以提供的幫助。

public partial class Form1 : Form 
{ 
    [DllImport("user32.dll", SetLastError = true)] 
    static extern IntPtr ChangeWindowMessageFilter(uint message, uint dwFlag); 

    public Form1() 
    { 
     InitializeComponent(); 
     ChangeWindowMessageFilter(WM_DROPFILES, MSGFLT_ADD); 
     ChangeWindowMessageFilter(WM_COPYDATA, MSGFLT_ADD); 
     ChangeWindowMessageFilter(0x0049, MSGFLT_ADD); 
     GetAndDisplayRights(); 
    } 

    private const uint WM_DROPFILES = 0x233; 
    private const uint WM_COPYDATA = 0x004A; 
    private const uint WM_COPYGLOBALDATA = 0x0049; 
    private const uint MSGFLT_ADD = 1; 
+0

嗨,我不知道完整的答案,但更好地檢查ChangeWindowMessageFilter方法的文檔,你打電話給它,但你沒有做任何與它的返回值... – 2011-03-09 18:54:45

+0

從我在我的研究中發現,諸如「ChangeWindowMessageFilter(WM_DROPFILES,MSGFLT_ADD)」,「是那些指示過濾器允許消息通過的人。還有更多?我會繼續挖掘。 – GeneK 2011-03-09 19:14:22

回答

5

這是不可能的,沒有解決方法。 D + D不能將一個物體從未升高的物體放入升高的過程中。 UIPI(UAC的UI組件)阻止了這一點。 ChangeWindowMessageFilter()解決方法不起作用,D + D不是基於消息的,它使用COM。 WM_DROPFILES可以追溯到Windows 3並不再使用。

我懷疑一些未來的Windows版本提供解決方法,這是不可能的但是作爲Windows 7的

+0

感謝您花時間回答我的問題,即使它不是我所希望的,也會投票給您。 :) – GeneK 2011-03-11 16:13:47

0

的下面是我的工作是如何解決這個問題。

我在表單中嵌入了一個目錄列表和文件列表,併爲文件列表設置了一個鼠標單擊偵聽器。我已將它配置爲僅顯示圖像文件,只要您單擊圖像,它將被設置爲圖像箱圖像。這不是拖放,但相當接近。最重要的是它無論應用程序的特權級別如何都能正常工作。