【问题标题】:Give a windows handle (Native), how to close the windows using C#?给一个窗口句柄(Native),如何使用 C# 关闭窗口?
【发布时间】:2012-03-01 15:44:46
【问题描述】:

给定一个窗口句柄,如何使用窗口句柄关闭窗口?

【问题讨论】:

    标签: c# wpf winforms pinvoke


    【解决方案1】:

    最简单的方法是使用 PInvoke 并使用 WM_CLOSE 执行 SendMessage

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    private static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
    
    private const UInt32 WM_CLOSE          = 0x0010;
    
    void CloseWindow(IntPtr hwnd) {
      SendMessage(hwnd, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
    }
    

    【讨论】:

    • 这对我来说大约有一半的时间。奇怪的是,有些资源管理器窗口没有关闭。相反,Explorer 的地址栏只是空白,窗口保持打开状态。
    • @AndrewRondeau,我知道这有点老了,但是,您描述的行为可能是您获取/关闭了错误的句柄,也许?
    【解决方案2】:

    不确定是否有其他方法,但您可以 PInvoke 以下内容:

                    // close the window using API        
                SendMessage(iHandle, WM_SYSCOMMAND, SC_CLOSE, 0);
    

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 第一个链接是CloseWindowStation 的 P/Invoke 声明,它服务于不同的目的。警告DestroyWindow 是它只适用于由同一线程创建的窗口。
      猜你喜欢
      • 1970-01-01
      • 2012-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      相关资源
      最近更新 更多