RegisterHotKeyを使用して、システム全体のホットキーを定義しています。このホットキーを押すと、強調表示されたテキストがMicrosoftWindowsのクリップボードに自動的にコピーされます。
Ctrl+を押すだけでテキストがクリップボードにコピーされCます。これは、ほとんどすべてのWindowsアプリケーションで機能することがわかった唯一のものの1つであるようです。keybd_eventを呼び出すことにより、キー自体が押されています。
グローバルホットキーとクリップボードへのコピーは、ホットキーをを含むものに割り当てた場合を除いて、実際にはすべての場合にうまく機能しますCtrl。これCtrlは、クリップボードへのコピーまたはそれらの線に沿った何かを妨害しているようです。
例:ホットキーをに設定するとF11、すべてが正しく開始され、テキストがコピーされます。一方、Ctrl+ Alt+Dは、強調表示されたテキストのコピーを単に拒否します。
私はBlockInputをいじってみて、それによって追加のことがキーストロークに影響を与えるのを防ぐことができるかどうかを確認しました。
また、すべてのキーがKeyUp状態に設定されることを期待してCtrl、KEYEVENTF_KEYUPをに送信しようとしました。この例を以下に示します。AltShift
// This will send ctrl + C to the active window to copy something to the clipboard.
public static void SendCtrlC(IntPtr hWnd)
{
const byte Control = (byte)VKCode.Control;
const byte LeftControl = (byte)VKCode.Lcontrol;
const byte LeftAlt = (byte)VKCode.Lmenu;
const byte LeftShift = (byte)VKCode.Lshift;
const byte RightControl = (byte)VKCode.Rcontrol;
const byte RightAlt = (byte)VKCode.Rmenu;
const byte RightShift = (byte)VKCode.Rshift;
const byte KeyC = (byte)VKCode.KeyC;
const int KeyUp = (int)KeyEvent.KeyEventFKeyUp;
const int KeyDown = (int)KeyEvent.KeyEventFKeyDown;
KeyBdEvent(LeftControl, 0, KeyUp, 0); // Left Control Up
KeyBdEvent(LeftAlt, 0, KeyUp, 0); // Left Alt Up
KeyBdEvent(LeftShift, 0, KeyUp, 0); // Left Shift Up
KeyBdEvent(RightControl, 0, KeyUp, 0); // Left Control Up
KeyBdEvent(RightAlt, 0, KeyUp, 0); // Left Alt Up
KeyBdEvent(RightShift, 0, KeyUp, 0); // Left Shift Up
Window.SetForegroundWindow(hWnd);
KeyBdEvent(Control, 0, KeyDown, 0); // Left Control Down
KeyBdEvent(KeyC, 0, KeyDown, 0); // Key C Down
KeyBdEvent(KeyC, 0, KeyUp, 0); // Key C Up
KeyBdEvent(Control, 0, KeyUp, 0); // Left Control Up
}