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 交互。与普通窗口(winforms)相比,它们与内核的交互方式不同。即MessageBox.Show("something")不会在 Windows 服务中产生任何东西。

您需要查看Keyboard hooks

用 C# 设计一个键盘钩子。你会在谷歌上找到很多。将其放在 Windows Service OnStart 中。并部署您的服务。

一些不错的 C# keyBoard Hooks:

因此,这些将帮助您捕获按下的键。然后您可以轻松检查按下了什么键并执行您的操作。你甚至不需要定时器控制。

此外,在 Windows 服务中按下某个键时执行某些任务是一个非常糟糕的主意,因为您可能会一次又一次地运行您的逻辑,不小心一次又一次地按下。

您应该做的是,将您的代码部署在 Windows 服务中。并通过 Windows 任务计划程序调用它。

是您可以安排任务的方式

于 2013-05-02T13:37:34.667 回答