3

Microsoft.NET Framework では、System.Windows.Forms という名前空間に Form クラスがあり、そこで多くのイベントが定義されています。イベント KeyPressed は、フォーム自体が入力フォーカスを持っている間にキーボードのキーが押された瞬間に発生します。しかし、フォームに入力フォーカスがあるかどうかに関係なく、いつでもキーが押されたときに何かが起こるようにしたい場合は、タイマーを実行し、getKeyState または user32.dll から GetAsyncKeyState 関数を dllimport して、知ることができます。いつでもキーが押されたとき。

同じ user32.dll 関数とタイマーを使用して、フォームの MouseDown イベントがある場合とない場合で同じことをマウスで実行できますが、マウス ホイールを上下にスクロールすると、フォームの MouseDown イベントで何かが起こるようにプログラムできます。 .

Delta は、MouseEventArgs でのマウス ホイール イベントの値ですが、マウス ホイールが上下にスクロールされた場合に発生するだけでなく、MouseEvent を使用してそのフォームにフォーカスを入力する必要があります。

フォームに依存したくありません。マウス ホイールの状態を取得するために GetKeyState 関数または GetAsyncKeyState 関数に与える整数がわからないので、タイマーが頻繁に呼び出す関数の if でコードを実行できます。

私は何をすべきか?どの整数ですか?「デルタ」を返すことができる user32 または他の dll からの他の関数はありますか? 分かると嬉しいので回答お願いします!:D

4

2 に答える 2

3

グローバル マウスおよびキーボード イベントを簡単に取得できる、非常に優れたCodePlex ライブラリがあります。

上記のリンクからの説明:

このライブラリを使用すると、アプリケーションが非アクティブでバックグラウンドで実行されている場合でも、キーボードとマウスをタップし、それらのアクティビティを検出して記録できます。

このライブラリは、Windows のグローバル フックに接続し、キーボードとマウスのクリックと移動を追跡し、KeyEventArgs と MouseEventArgs を使用して一般的な .NET イベントを発生させるため、必要な情報を簡単に取得できます: マウス座標

  • クリックされたマウス ボタン
  • マウスホイールのスクロール
  • キーのプレスとリリース
  • 特別なキーの状態

例 (デモ プログラムから変更) では、デルタのみが表示されます。

using System;
using System.Windows.Forms;
using MouseKeyboardActivityMonitor;
using MouseKeyboardActivityMonitor.WinApi;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private readonly MouseHookListener m_MouseHookManager;

        public Form1()
        {
            InitializeComponent();

            m_MouseHookManager = new MouseHookListener(new GlobalHooker());
            m_MouseHookManager.Enabled = true;

            m_MouseHookManager.MouseWheel += HookManager_MouseWheel;

        }

        private void HookManager_MouseWheel(object sender, MouseEventArgs e)
        {
            labelWheel.Text = string.Format("Wheel={0:000}", e.Delta);
        }
    }
}
于 2013-06-27T19:00:07.083 に答える