是否有可能在C#中捕获任何非特定的输入事件?

时间:2009-12-08 00:08:24

标签: c# wpf events

我希望我的应用程序能够在一段时间内未检测到用户输入时显示某些信息(如欢迎/指令层)。无论如何让应用程序注册任何形式的用户输入(键盘,mousedown / move等)而不必为每个事件编写处理程序?

是否存在在将其解释为鼠标或键盘或其他设备之前发送的通用输入窗口消息?我想要的行为类似于Windows从键盘或鼠标输入的屏幕保护程序/睡眠中醒来。

我想避免像:

void SomeHandler(object sender, EventArgs e) { WakeUp(); }
...
this.KeyDown += SomeHandler;
this.MouseMove += SomeHandler;
this.SomeInputInteraction += SomeHandler;

3 个答案:

答案 0 :(得分:2)

GetLastInputInfo Function可能就是你要找的东西。它检索最后一次输入事件的时间。

答案 1 :(得分:0)

也许这篇关于 CodeProject 的文章会help你。它是关于使用WPF在一段时间不活动后自动注销。

希望这有帮助。

答案 2 :(得分:0)

我不知道这是否适用于WPF,但这可能会有所帮助:

public class DetectInput : IMessageFilter
{
    public bool PreFilterMessage(ref Message m)
    {

        if (   m.Msg == (int)WindowsMessages.WM_KEYDOWN 
            || m.Msg == (int)WindowsMessages.WM_MOUSEDOWN  
            // add more input types if you want
            )
        {
            // Do your stuff here
        }

        return false;
    }
}

并在程序中:

Application.AddMessageFilter(new DetectInput ()); // Must come before Run
Application.Run(YourForm);