2012-05-12 143 views
1

我有一個問題,我只是來翻過關於它的網絡上兩個或三個職位:當我使用C#應用程序(Clipboard.SetText或Clipboard.Clear)剪貼板,Chrome是隨機使用它,所以我的剪貼板請求失敗。谷歌瀏覽器竊取剪貼板

System.Runtime.InteropServices.ExternalException: Requested Clipboard operation did not succeed. 
    at System.Windows.Forms.Clipboard.ThrowIfFailed(Int32 hr) 
    at System.Windows.Forms.Clipboard.SetDataObject(Object data, Boolean copy, Int32 retryTimes, Int32 retryDelay) 
    at System.Windows.Forms.Clipboard.SetText(String text, TextDataFormat format) 
    at System.Windows.Forms.Clipboard.SetText(String text) 

我關閉瀏覽器,它的工作原理,然後重新打開瀏覽器,有些分鐘後,它仍然失敗。我使用下面的代碼以1秒的計時器和GetOpenClipboardWindow(),其他的PInvoke :(,以確認這確實是Chrome瀏覽器很討厭我:

[DllImport("user32.dll")] 
    static extern IntPtr GetOpenClipboardWindow(); 

    [DllImport("user32.dll", SetLastError = true)] 
    static extern int GetWindowThreadProcessId(IntPtr hWnd, out int 
    lpdwProcessId); 


    IntPtr hwnd = GetOpenClipboardWindow(); 
    if (hwnd != IntPtr.Zero) 
    { 
     int processId; 
     GetWindowThreadProcessId(hwnd, out processId); 
     Process p = Process.GetProcessById(processId); 
     listBox1.Items.Add(p.Modules[0].FileName); 
    } 

是否有任何的你已經有這個問題?你知道爲什麼Chrome瀏覽器竊取剪貼板

[編輯]

在任何Chrome團隊成員:尊敬的開發商,如果你今天這個閱讀,給我剪貼板回來,因爲我有比你更多的權利在我的剪貼板上我一直在尋找兩天因爲你

+1

似乎很奇怪的頭。這可能是Chrome的附加功能嗎?它發生在其他機器上嗎? –

+1

同樣發生在這個人身上:http://code.google.com/p/chromium/issues/detail?id=86765 –

回答

3

恐怕沒有什麼可以做的了,如果另一個進程打開了剪貼板,在這個進程關閉它之前沒有辦法釋放它。

+0

沒錯。看來我唯一能做的就是處理錯誤,並等待Chrome來完成它的工作。如果時間太長,我會告訴用戶重新啓動或關閉有罪程序。 –

0

確保您的應用程序(因爲最終,這就是你能控制)是遵守遊戲規則。確保你沒有做多次打開/關閉操作。例如,如果您將多種格式放置到剪貼板上,請確保您封裝在一個打開/關閉塊中,而不是兩個。每次更新後關閉剪貼板,都會生成剪貼板通知,這會觸發其他應用程序(監視剪貼板)查看新數據。因此,請確保您爲每個預期操作生成一個此類事件(不是多個)。不要創建意外的操作(即在啓動應用程序時不要打開/關閉剪貼板)。如果你剛剛更新了剪貼板,不要指望你可以立即讀取剪貼板沒有碰撞與其他應用程序從Windows(WM_DRAWCLIPBOARD等)反應,通知消息