我想关闭一个自动弹出的对话框,但是我在使用它时遇到了一些麻烦。经过几年的有限使用后,我的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)内联了常量。
我做错了什么? :)
答案 0 :(得分:2)
好吧,根据WM_COMMAND的文档,lParam应该是控件窗口的句柄(看起来你在wParam中传递它)。
wParam应该使其高阶字等于BN_CLICKED,其低阶字等于控件的标识符。
(你可以使用GetWindowLong和GWL_ID来检索它,但可能是它的IDCANCEL。)
答案 1 :(得分:0)
为什么不发送带有SC_CLOSE参数的WM_SYSCOMMAND消息?这应该关闭窗口。
答案 2 :(得分:0)
为什么不发送WM_CLOSE消息?