あなたが言ったように、ホットキーは他のウィンドウからメッセージを完全に隠します。あなたがする必要があるのは、フォーカスのあるウィンドウを見つけて、それが選択したテキストを読むことです(そして、おそらくそれを手動でクリップボードに追加しますか?)
このスニペットは、フォーカスされたウィンドウを見つける必要があります。これは C++ ですが、C# に簡単に変換できます。
HWND GetGlobalFocus()
{
GUITHREADINGO info;
info.cbSize = sizeof(info);
if (!GetGUIThreadInfo(0, &info))
return NULL;
return info.hwndFocus;
}
それができたら.. ここが難しいところです。を行うことはできますがPostMessage(hWnd, WM_COPY, 0, 0);
、コントロールがこれをサポートしていない場合は機能しません (構文で強調表示されたコントロールはおそらく非標準であり、これに応答しない可能性があります)。
手動でWM_GETTEXT
メッセージを送信してテキストを取得し、それを手動でクリップボードに追加することもできますが、これも、コントロールが非常に非標準である場合に失敗する可能性が高く、複数のクリップボード形式のアプリケーションを保持できないことは言うまでもありません ( Wordを考えてください)。
もう 1 つのオプションは、ホット キーを受信し、フックを無効にし、キーの組み合わせを で再度送信してkeybd_event
から、フックを再度有効にすることです。これにより、データがクリップボードに保存されます。これは不格好に思えますが、keybd_event
がブロックされているかどうかに応じて機能する可能性がありますが、思い出せません。
お役に立てれば!