2008年2月20日水曜日

[.NET]キーボードステータスの取得

会社用なのですが、スタートアップとシャットダウンの時に時刻を記録して集計するツールがあります。
基本的に自動的に画面を開き保存が終わると自動的に画面を閉じます。
で、土曜日など稼動日ではない場合には、念のため確認の画面を表示します。

しかし、帰る前に雑務などで、時間を記録したくないときも時刻を記録してしまうという難点がありました。そこで、シフトキー押下されていたら記録しない。というモードを追加しようと思い調査してみました。
が。.NET Framework2.0では残念ながらサポートされていないっぽいことがわかりました。
で、仕方が無いのでp/invokeです。実装はこのようなかんじ。

[DllImport("user32.dll")]
static extern short GetAsyncKeyState(int vKey);
const int VK_SHIFT = 0x10;
private void Form_Load(object senderEventArgs e)
{
    if (GetAsyncKeyState(VK_SHIFT) != 0)
    {
        MessageBox.Show("緊急停止!!");
    }
}

0 件のコメント: