告诉我该怎么做,我不知道在哪里寻找答案。
我有一个WPF应用程序,可以使用AForge使用平板电脑的相机。当用户通过键盘快捷键锁定系统" Win + L" - 相机不再使用(指示灯熄灭),因为我通过下面的事件控制了这个过程。
private void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
{
switch (e.Reason)
{
case SessionSwitchReason.SessionLock: StopCam(); break;
case SessionSwitchReason.SessionUnlock:
if (this.Window.WindowState != WindowState.Minimized)
{
StartCam();
}
break;
}
}
如果用户按下屏幕锁定按钮(通常在平板电脑的顶部),我的相机不会关闭(指示灯点亮)。如何跟踪此事件?
P.S。我的WPF应用程序将在Windows 10平板电脑上运行。
答案 0 :(得分:1)
也许我有一个解决方案。此代码适用于PC但我没有在平板电脑上进行测试(因为我没有)。您需要使用System.Windows.Interop;
添加public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
source.AddHook(WndProc);
}
private const int WM_SYSCOMMAND = 0x0112;
private const int SC_MONITORPOWER = 0xf170;
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == WM_SYSCOMMAND)
{
if (wParam.ToInt32() == SC_MONITORPOWER)
{
switch (lParam.ToInt32())
{
case -1:
this.listBox1.Items.Add("display is powering on");
break;
case 2:
this.listBox1.Items.Add("display is being shut off");
break;
}
}
}
return IntPtr.Zero;
}
}