1

私は問題を抱えており、それに関する Web 上の投稿を 2 つまたは 3 つ見つけただけです。リクエストは失敗します。

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)

Chrome を閉じて動作し、Chrome を再度開いても、数分後にまだ失敗します。次のコードを 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 チーム メンバーのいずれかで: 親愛なる開発者、今日これを読んだ場合は、私のクリップボードに対してあなたよりも多くの権利を持っているので、私のクリップボードを返してください。あなたのせいで2日間探してた。

4

2 に答える 2

3

別のプロセスがクリップボードを開いている場合、そのプロセスがクリップボードを閉じるまで解放する方法はありません。

于 2012-05-12T20:05:07.937 に答える
0

アプリが (最終的にはそれしか制御できないため) ルールに従って動作していることを確認してください。1 つの操作で複数の開閉操作を行っていないことを確認してください。たとえば、クリップボードに複数の形式を配置する場合は、2 つではなく、1 つの開閉ブロックにカプセル化するようにしてください。更新後にクリップボードを閉じると、クリップボード通知が生成され、(クリップボードを監視する) 他のアプリが新しいデータを確認するようになります。そのため、目的の操作ごとにそのようなイベントを 1 つ (複数ではなく) 生成するようにしてください。意図しない操作を作成しないでください (つまり、アプリの起動時にクリップボードを開いたり閉じたりしないでください)。クリップボードを更新したばかりの場合は、

于 2012-05-14T13:08:21.917 に答える