模拟在C#中单击另一个窗口中的按钮

时间:2009-06-12 13:50:57

标签: c# winapi button sendmessage

我想关闭一个自动弹出的对话框,但是我在使用它时遇到了一些麻烦。经过几年的有限使用后,我的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)内联了常量。

我做错了什么? :)

3 个答案:

答案 0 :(得分:2)

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

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

(你可以使用GetWindowLong和GWL_ID来检索它,但可能是它的IDCANCEL。)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

为什么不发送WM_CLOSE消息?