0

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
}
4

1 に答える 1

1

チェック: http : //pinvoke.net/default.aspx/user32.sendinput、SendInput @ msdn SendInputで ダブルクリックを追加して、強調表示されたテキストの取得を自動化することもできます。アプリケーションに情報を送信するためにクリップボードを操作しないように注意してください。

于 2013-01-15T21:10:05.457 に答える