2

これはメソッド定義です:

  [DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int msg, IntPtr lparam, IntPtr wparam);

これは SendMessage の呼び出しです。

 //WM_COPY = 0x0301
 SendMessage(handle, WM_COPY, IntPtr.Zero, IntPtr.Zero);

これは私がデータを取得する方法です:

string text = System.Windows.Forms.Clipboard.GetText();

データをクリップボードにコピーしたくないことを除いて、同じことをしたいと思います。データをメモリ内の他の部分にコピーすることは可能ですか? もしそうなら、どのように?

4

2 に答える 2

5

いいえ。メッセージを受信したときに他のアプリケーションが何をするかを制御することはできません。ターゲットウィンドウがそのメッセージに対して持っているすべての動作を取得し、それ以外には何も取得しません(ターゲットを制御しない限り、自分で処理できます)。

WM_COPYは単なるメッセージです (これも標準的なものであり、特定の方法で処理するのが理にかなっています) - 一部のウィンドウはそれを処理しますが、一部のウィンドウは処理しません。MSDN で定義されているように、WM_COPYは編集コントロール用にテキストを保存します。

アプリケーションは、エディット コントロールまたはコンボ ボックスに WM_COPY メッセージを送信して、現在の選択内容を CF_TEXT 形式でクリップボードにコピーします。

WM_COPY を処理する独自のアプリケーションを実装している場合は、必要な場所にデータをコピーできます。また、編集コントロールをサブクラス化する場合は、デフォルトの動作を維持することが非常に理にかなっています...

于 2012-11-26T17:10:47.450 に答える
0

クリップボードがオプションでない場合は、代わりにファイルに書き込むことができます。

于 2012-11-26T17:10:04.893 に答える