在Windows 10(WPF)

时间:2016-06-08 17:02:10

标签: c# wpf winapi

告诉我该怎么做,我不知道在哪里寻找答案。

我有一个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平板电脑上运行。

1 个答案:

答案 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;
    }

}