WM_COPY が失敗した場合、いくつかの方法を試すことができます...
キープレスを偽造するには、WM_KEYDOWN および WM_KEYUP メッセージを送信できます。
しかし、あなたはメッセージで何を送りますか?「c」を送信した場合、これらのメッセージでアプリケーションに ctrl も押されたことを通知する方法はありません。
文字 0x03 (ctrl+c が実際に生成する文字コード) を送信できる場合がありますが、受信アプリケーションがこれを「ctrl+c」アクションとして解釈するという保証はありません。
うまくいかないのはなぜですか?受信アプリケーションは...
- WM_KEYDOWN と WM_KEYUP を無視し、他の手段を使用してキーボードを読み取ります (たとえば、GetAsyncKeyState を使用してキーが押されているかどうかを確認します)。
- WM_KEYDOWN および/または WM_KEYUP メッセージを処理しますが、"c" を探してから GetAsyncKeyState() などを使用して、メッセージの処理時に ctrl が押されているかどうかを検出します。
- 入力フォーカスがない場合はメッセージを無視するか、さらに悪いことに、それらのメッセージを入力フォーカス ウィンドウから受信したかのように処理する可能性があります。
試してみてください。ただし、うまくいかない場合があります。
別の方法として、SendInput が機能する場合は、入力フォーカスを正しいコントロール SendInput に強制してから、入力フォーカスを以前の場所に戻すことができます。
別のアプローチ (おそらく最良の方法) は、それが既知のダイアログであり、静的テキスト フィールドが含まれている場合、その子コントロールとその上の GetText を見つけ (WM_GETTEXT メッセージを送信)、クリップボードの使用を避けることができる場合があります。まったく。(または、クリップボードにテキストが必要な場合は、このように取得してから、自分でクリップボードに配置します)。これにより、アプリケーションをだましてテキストを提供させることが回避され、標準の Windows の動作に戻ります。