代码之家  ›  专栏  ›  技术社区  ›  Thorarin

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

  •  1
  • Thorarin  · 技术社区  · 17 年前

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

    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_命令(0x111)的常量。

    我做错了什么?:)

    3 回复  |  直到 17 年前
        1
  •  2
  •   Peter Ruderman    17 年前

    根据WM_命令的文档,lParam应该是控件窗口的句柄(看起来像是在wParam中传递它)。

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

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

        2
  •  0
  •   Vincent McNabb    17 年前

    为什么不发送带有SC\U CLOSE参数的WM\U SYSCOMMAND消息?那应该会关上窗户。

        3
  •  0
  •   Thomas Levesque    17 年前

    为什么不发送WM_关闭消息呢?