0

ユーザーがキーボードのF8キーを押すと、選択したテキストをコピーするプログラム(C#)の1つでSendKeysを使用しています。

Windows 7では正常に動作していますが、WindowsXPでは次の問題があります。

  1. メモ帳で、次の文が「これはテストです」と書かれているとします。

  2. ユーザーが「is」を選択してF8キーを押すと、テキストはコピーされません。

  3. その後、ユーザーが「これ」を選択すると、コピーされるテキストは「です」になります

  4. その後、ユーザーが「テスト」を選択すると、コピーされるテキストは「これ」になります

ご覧のとおり、F8キーを押すと、現在のテキストではなく、以前に選択したテキストがコピーされます。これはWindowsXPでのみ発生します。

これがコードです

System.IntPtr test = GetForegroundWindow();
System.Windows.Forms.SendKeys.Send("^(c)");
string copiedText = Clipboard.GetText();

F8にグローバルキーバインディングを使用しているため、コードの最初の行は現在アクティブなウィンドウを示しています。その後、Ctrl + Cが送信され、クリップボードからテキストがコピーされます。

4

1 に答える 1

2

SendWait次の方法を使用するように切り替えることをお勧めします。

SendWaitを使用して、キーストロークまたはキーストロークの組み合わせをアクティブなアプリケーションに送信し、キーストロークメッセージが処理されるのを待ちます。

(強調追加)

現在、競合状態が発生しており、クリップボードの内容を読み取ろうとする前に、他のアプリケーションがCTRL-Cを処理したという保証はありません。古いコンテンツを入手することがあるのも当然です。

(他のアプリケーションを自動化する恐ろしい方法であるという通常の警告を挿入し、代わりに自動化APISendKeysの使用を検討し、必要な場合を除いてクリップボード全体を踏みにじらないようにします)

于 2012-04-13T07:22:15.683 に答える