1

我想关闭一个自动弹出的对话框,但我在让它工作时遇到了一些麻烦。经过几年的有限使用,我的 Win32 编程有点生疏了。

我正在使用 FindWindowEx 来获取对话框和我想要单击的按钮的句柄。我的印象是,使用 wParam 参数中的按钮句柄向对话框发送 WM_COMMAND 就可以了。

Window window = Window.FindWindow("TSomeDialog", null);
Window cancelButton = Window.FindWindow("TButton", "Cancel", window);

Message message = Message.Create(window.HWnd, 0x0111, cancelButton.HWnd, IntPtr.Zero);
PostMessage(message);

public void PostMessage(Message message)
{
    // Win32 API import
    PostMessage(message.HWnd, message.Msg, message.WParam, message.LParam);
}

Window 是一个实现 IWin32Window 并包装了一些 Win32 API 调用的类。我已经内联了 WM_COMMAND (0x111) 的常量。

我究竟做错了什么?:)

4

3 回答 3

2

好吧,根据 WM_COMMAND 的文档,lParam 应该是控件窗口的句柄(看起来你是在 wParam 中传递它)。

wParam 的高位字应等于 BN_CLICKED,其低位字应等于控件的标识符。

(您可以使用带有 GWL_ID 的 GetWindowLong 来检索它,但可能是它的 IDCANCEL。)

于 2009-06-12T14:05:04.743 回答
0

为什么不直接发送带有 SC_CLOSE 参数的 WM_SYSCOMMAND 消息?那应该关闭窗口。

于 2009-06-12T14:00:27.280 回答
0

为什么不发送 WM_CLOSE 消息呢?

于 2009-06-12T14:00:36.750 回答