我开发了一个 C# WinForms 应用程序,用户通过 MIDI 连接设备提供输入。用户将长时间不使用键盘或鼠标。
当我收到一条 MIDI 消息时,我可以做些什么来“告诉”系统这算作用户活动(即按键)。如果正在使用 MIDI 设备,我不希望出现屏幕保护程序或时间锁定。
我认为我的请求与我见过的其他请求不同,因为他们希望在其应用程序的整个生命周期内禁用屏幕保护程序,而我只想将收到的 MIDI 输入计为用户交互性。
当我收到 MIDI 输入来表示系统用户活动时,我可以调用什么东西吗?
我开发了一个 C# WinForms 应用程序,用户通过 MIDI 连接设备提供输入。用户将长时间不使用键盘或鼠标。
当我收到一条 MIDI 消息时,我可以做些什么来“告诉”系统这算作用户活动(即按键)。如果正在使用 MIDI 设备,我不希望出现屏幕保护程序或时间锁定。
我认为我的请求与我见过的其他请求不同,因为他们希望在其应用程序的整个生命周期内禁用屏幕保护程序,而我只想将收到的 MIDI 输入计为用户交互性。
当我收到 MIDI 输入来表示系统用户活动时,我可以调用什么东西吗?
Here's a CodeProject project that appears to do this:
http://www.codeproject.com/KB/cs/ScreenSaverControl.aspx
Looks like you can just call his SetScreenSaverTimeout(GetScreenSaverTimeout())
method every time you receive MIDI input.
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);
}
示例代码以及进一步阅读来自此开发人员融合线程。