首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WndProc in RadWindow WPF

WndProc in RadWindow WPF
EN

Stack Overflow用户
提问于 2019-02-22 09:52:48
回答 1查看 256关注 0票数 0

我试图在我的WPF应用程序中检测到Windows或关机。有人能帮忙吗?

xaml.cs

代码语言:javascript
复制
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”的定义

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-22 13:22:50

一旦加载了Win32,您应该能够获得对父WPF窗口的引用,并创建一个RadWindow钩子:

代码语言:javascript
复制
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;
    }

    ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54824389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档