0

次のようにWndProcを編集する標準の推奨方法でClipboardビューアを作成しました。

            case WM_DRAWCLIPBOARD:

                Logger.Main.LogMessage("Draw Clipboard event");
                if (OnClipboardChanged != null) {
                    OnClipboardChanged(this, new ViewChangeEventArgs());
                }
                WindowAPI.SendMessage(NextClipboardViewer, m.Msg, m.WParam, m.LParam);
                break;

            case WM_CHANGECBCHAIN:

                Logger.Main.LogMessage("Change CB Chain");
                if (m.WParam == NextClipboardViewer) {
                    NextClipboardViewer = m.LParam;
                }
                else {
                    WindowAPI.SendMessage(NextClipboardViewer, m.Msg, m.WParam, m.LParam);
                }
                break;

クリップボードで新しいデータが利用可能になったときに、アプリケーションに通知する必要があります。正常に動作し、メッセージが適切に検出されます。

クリップボード内の同じデータに関連付けられた、同じタイムスタンプで生成されたWM_DRAWCLIPBOARDで生成されたイベントを大量に受け取ることがあります(これを再現するのは非常に困難です)。何がこれを引き起こす可能性があるかについての考えはありますか?それらのメッセージに関する詳細情報を取得する方法について何か提案はありますか?

ありがとう。

4

1 に答える 1

0

最後に読み取ったクリップボード データを保存するには、グローバルを作成する必要があります。次に、あなたの場合 WM_DRAWCLIPBOARD: メソッドで、最後の読み取りと比較し、データが異なる場合にのみ処理します。

于 2015-09-29T14:29:26.693 に答える