簡體   English   中英

RadWindow WPF中的WndProc

[英]WndProc in RadWindow WPF

我正在嘗試檢測WPF應用程序中的Windows注銷或關機。 有人可以幫忙嗎?

xaml.cs

private static int WM_QUERYENDSESSION = 0x11;
private static bool systemShutdown = false;
public static event Microsoft.Win32.SessionEndingEventHandler SessionEnding;

protected virtual void WndProc(ref System.Windows.Forms.Message m)
{
    if (m.Msg == WM_QUERYENDSESSION)
    {
        MessageBox.Show("queryendsession: this is a logoff, shutdown, or reboot");
        systemShutdown = true;
    }

    // If this is WM_QUERYENDSESSION, the closing event should be  
    // raised in the base WndProc.  
    base.WndProc(ref m);  //Error

} //WndProc

錯誤:RadWindow不包含“ WndProc”的定義

RadWindow加載后,您應該能夠獲得對父WPF窗口的引用並創建Win32掛鈎:

public class MyRadWindow : RadWindow
{
    public MyRadWindow()
    {
        Loaded += MyRadWindow_Loaded;
    }

    private void MyRadWindow_Loaded(object sender, System.Windows.RoutedEventArgs e)
    {
        System.Windows.Window wpfWindow = this.ParentOfType<System.Windows.Window>();
        HwndSource source = HwndSource.FromHwnd(new WindowInteropHelper(wpfWindow).Handle);
        source.AddHook(new HwndSourceHook(WndProc));
    }

    private const int WM_QUERYENDSESSION = 0x11;
    private static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
    {
        if (msg == WM_QUERYENDSESSION)
        {
            //...
        }

        return IntPtr.Zero;
    }

    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM