1

押されたキーを検出するか、キーが押されたときに開始する Windows サービスを開発したいと考えています。それは可能ですか?

一定期間後に実行され、データベーステーブルを更新するサービスを作成しました。

これは、時々データベースを更新するために行ったコードです。

System.Timers.Timer timer1 = new System.Timers.Timer();
private void InitializeComponent()
{
    ((System.ComponentModel.ISupportInitialize)(timer1)).BeginInit();
    timer1.Enabled = true;         
    ((System.ComponentModel.ISupportInitialize)(timer1)).EndInit();
}

protected override void OnStart(string[] args)
{
    try
    {      
        WriteLog("test Services Started at : " + System.DateTime.Now);
        // Time Elapsed event 
        timer1.Elapsed += new ElapsedEventHandler(OnElapsedTime);
        int intOnElapsedTime = Convert.ToInt32(
            System.Configuration.ConfigurationManager
            .AppSettings["intOnElapsedTime"]
            .ToString());
        timer1.Interval = 1000 * 10 * intOnElapsedTime;
        timer1.Enabled = true;
    }
    catch (Exception ex)
    {
        WriteErrorLog(ex.Message, ex.StackTrace, "OnStart");
    }
}

private void OnElapsedTime(object sender, ElapsedEventArgs e)
{
    try{ /* update database table */}
    catch (Exception exp){ ...}
}
4

1 に答える 1

3

Windows サービスは、UI インタラクション用ではありません。通常のウィンドウ (winform) と比較して、カーネルとの相互作用が異なります。つまりMessageBox.Show("something")、Windows サービス内では何も生成されません。

Keyboard hooksを調べる必要があります。

C# でキーボード フックを設計します。あなたはグーグルでたくさん見つけるでしょう。Windows Service OnStart 内に配置します。サービスを展開します。

いくつかの優れた C# キーボード フック:

したがって、これらは押されたキーをトラップするのに役立ちます。次に、どのキーが押されたかを簡単に確認して、アクションを実行できます。タイマー制御さえ必要ありません。

さらに、Windows サービス内でキーを押したときに何らかのタスクを実行することは非常に悪い考えです。誤って何度も押してロジックを何度も実行する可能性があるためです。

あなたがすべきことは、コードをWindowsサービスに展開することです。Windows タスク スケジューラを使用して呼び出します。

これは、タスクをスケジュールする方法です

于 2013-05-02T13:37:34.667 に答える