4

問題: C# コードの一部から、キーボード キーを押すように呼び出しますが、ここに問題があります。背景と別のフォーム/プログラムにフォーカスがある

目的CapsLock:との状態をロックするプログラムを作成するNumLock

バックグラウンド: 私はラップトップを持っていますが、これらの 2 つのキーは私を非常にイライラさせます。バックグラウンドで実行され、CapsLock誤って有効になるとすぐに無効になり、NumLock決して無効にされないようにしたいです。コーディングに関する知識を広げるために、解決策を見つけようとしましたが、(全体の) 問題を解決するものはありません。

4

4 に答える 4

1
using System;
using System.Runtime.InteropServices;

public class CapsLockControl
{

    public const byte VK_NUMLOCK = 0x90;
    public const byte VK_CAPSLOCK = 0x14;

    [DllImport("user32.dll")]
        static extern void keybd_event(byte bVk, byte bScan, uint dwFlags,UIntPtr dwExtraInfo);
    const int KEYEVENTF_EXTENDEDKEY = 0x1;
    const int KEYEVENTF_KEYUP = 0x2;

    public static void Main()
    {
        if (Control.IsKeyLocked(Keys.CapsLock))
        {
            Console.WriteLine("Caps Lock key is ON.  We'll turn it off");
            keybd_event(CapsLockControl.VK_CAPSLOCK, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr) 0);
            keybd_event(CapsLockControl.VK_CAPSLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
                (UIntPtr) 0);
        }
        else
        {
            Console.WriteLine("Caps Lock key is OFF");
        }
    }
}
于 2013-02-26T13:01:12.637 に答える
0

キーボードとマウスの両方のクリックをシミュレートするCodePlexプロジェクトを試すことができます。

それはWindows入力シミュレータと呼ばれ、ここで見つけることができます

于 2013-02-26T12:57:06.610 に答える
0

user32.dll を使用してキーボードをフックする必要があります。この codeProjectサンプルで開始する必要があります

于 2013-02-26T12:52:51.063 に答える
0

capslock が実際に押されないようにするには、次のようにします。

SetWindowsHookEx

ここには、その使用方法に関する情報がたくさんあります。例えば

グローバル フック キーロガーの問題

フォーム外のユーザー入力を無効にしないグローバル キーボード フック

そしてもちろんmsdn

http://msdn.microsoft.com/en-us/library/windows/desktop/ms644990%28v=vs.85%29.aspx

于 2013-02-26T12:54:08.613 に答える