备用输入设备(Midi)不会阻止Winforms应用程序中的屏幕保护程序

时间:2010-03-26 00:27:20

标签: c# windows winforms screensaver

我开发了一个C#WinForms应用程序,用户通过MIDI连接设备提供输入。用户将长时间不使用键盘或鼠标。

当我收到MIDI信息时,我能做些什么来“告诉”系统这被视为用户活动(即按键)。如果正在使用MIDI设备,我不希望屏幕保护程序或时间锁定。

我认为我的请求与我见过的其他请求不同,因为他们想要在应用程序的生命周期中禁用屏幕保护程序,我只希望我收到的MIDI输入计为用户交互性。

当我收到MIDI输入以表示系统用户活动时,是否可以调用某些内容?

2 个答案:

答案 0 :(得分:2)

这是一个似乎执行此操作的CodeProject项目:

http://www.codeproject.com/KB/cs/ScreenSaverControl.aspx

看起来每次收到MIDI输入时都可以调用他的SetScreenSaverTimeout(GetScreenSaverTimeout())方法。

答案 1 :(得分:0)

Windows在激活屏幕保护程序或监视节电保护程序之前向每个窗口发送消息,您只需要阻止屏幕更改就可以吞下这些消息。

const int WM_SYSCOMMAND = 0x0112, SC_SCREENSAVE = 0xF140, SC_MONITORPOWER = 0xF170;
protected override void WndProc(ref Message m)
{
    if( m.Msg == WM_SYSCOMMAND ) //Intercept System Command
    {
        if( m.WParam.ToInt32() == SC_SCREENSAVE || m.WParam.ToInt32() == SC_MONITORPOWER )
        { 
            //Intercept ScreenSaver and Monitor Power Messages
            //MessageBox.Show("Reached SC/PowerCondition");
            return; // 
        }
    }   
    base.WndProc(ref m);
}

示例代码以及进一步阅读来自this developer fusion thread.