已知一按钮ID,如何用sendmessage来模拟点击它?
下面怎么不对??
SendMessage Form1.hwnd, WM_COMMAND, GetWindowLong(Command2.hwnd, GWL_STYLE), 0&

解决方案 »

  1.   

    Private Const BM_CLICK = &HF5
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    '模拟单击Command2
    Private Sub Command1_Click()
        SendMessage Command2.hwnd, BM_CLICK, 0, ByVal 0&'最后一个参数byref传递也可
    End SubPrivate Sub Command2_Click()
        MsgBox "test"
    End Sub
      

  2.   

    在http://expert.csdn.net/Expert/topic/2597/2597823.xml?temp=.3224756
    中我已经回复过你了。你是一定要用WM_COMMAND模拟按钮点击吗?//SendMessage Form1.hwnd, WM_COMMAND, GetWindowLong(Command2.hwnd, GWL_STYLE), 0&
    你的代码实在是有点莫名奇妙啊(Form1.hwnd应该是窗体的句柄吧)你是想要设置窗口风格吗?
    是的话,应该使用setwindowlong,而不是sendmessage
      

  3.   

    简单点的就用SendMessage 发送 BM_CLICK消息也可以先用api函数SetCursorPos模拟鼠标移动到指定点(这步也可以通过发送WM_MOUSEMOVE消息实现),然后,用sendmessage给指定按钮接连发出两条消息(先发出WM_LBUTTONDOWN接着发出WM_LBUTTONUP 消息)模拟一次鼠标单击(这也是普遍的做法),常数声明如下:Public Const WM_MOUSEMOVE = &H200
    Public Const WM_LBUTTONDOWN = &H201
    Public Const WM_LBUTTONUP = &H202
      

  4.   

    参考,应该对你有帮助:
    http://vbclass.y365.com/jishu/yaokong.htm
      

  5.   

    SendMessage Command2.hwnd, BM_CLICK, 0, ByVal 0&
    发送BM_CLICK要知道按钮HWND吧?我想在知道按钮ID的情况下实现,可以吗?
      

  6.   

    明白了,你是不知道如何获得按钮的hwnd,这样:
    先用findwindow获得按钮所在窗体窗口的句柄,再用findwindowex获得按钮的句柄
      

  7.   

    呵呵,谢谢你我知道如何获得按钮的hwnd,只是想问问仅通过按钮ID可以实现吗?
      

  8.   

    老兄说的ID是不是指知道按钮的名字(字符串),然后去法消息啊,如果这样可以做到,
    我将上面一位仁兄的代码改了一下(偷点懒)
    Option ExplicitPrivate Const BM_CLICK = &HF5
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    '模拟单击Command2
    Private Sub Command1_Click()
       Dim strCmdID As String
       strCmdID = "Command2"
        SendMessage Me.Controls(strCmdID).hwnd, BM_CLICK, 0, ByVal 0&
    End SubPrivate Sub Command2_Click()
        MsgBox "test"
    End Sub
      

  9.   

    要用WM_COMMAND模拟按钮点击,可以吗?