我开发了一个C#WinForms应用程序,用户通过MIDI连接设备提供输入。用户将长时间不使用键盘或鼠标。
当我收到MIDI信息时,我能做些什么来“告诉”系统这被视为用户活动(即按键)。如果正在使用MIDI设备,我不希望屏幕保护程序或时间锁定。
我认为我的请求与我见过的其他请求不同,因为他们想要在应用程序的生命周期中禁用屏幕保护程序,我只希望我收到的MIDI输入计为用户交互性。
当我收到MIDI输入以表示系统用户活动时,是否可以调用某些内容?
答案 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.