通过下面这个语句,使菜单弹出来了,然后查找弹出菜单的句柄(TApi),对其进行操作。但是现在问题是,执行了01句之后,操作系统不返回控制权,直到我手动点击菜单,那么这样后面的03、04就没有办法执行了。要怎么办呢?
01 SApi = SendMessage(CApi, BM_CLICK, 0, ByVal 0&)
02    
03 TApi = FindWindowEx(0, 0, "#32768", "")
04 SApi = SendMessage(TApi, WM_COMMAND, 0, ByVal 0&)

解决方案 »

  1.   

    "#32768 "  QQ的特征码  QQ可不是怎么好盗的啊~!
      

  2.   

    首先要说的#32768并不是QQ的特征码
    而是菜单类名
    不相信的可以自己试试:在窗口中自己建立一个弹出菜单。然后用GetCursorPos获得鼠标坐标(此时鼠标要指着弹出来的菜单),接着用WindowFromPoint获得鼠标下面的窗口,最后用GetClassName来获得类名,看是不是#32768楼主的代码是查找句柄,这样一般不会有返回
    试试换查找菜单的代码看看
      

  3.   

    ==========
    楼主的代码是查找句柄,这样一般不会有返回 
    试试换查找菜单的代码看看
    ==========
    可以的,如果系统中当前只有一个菜单的话,用Api=FindWindowEx(0,0,"#32768","")是可以找到菜单的句柄的。我问题的主要目的是用SendMessage之后,程序会把管制权给WINDOWS;然而用PostMessage就不会了。
      

  4.   

    如果是这样的话,那是不是传递消息有误啊?WM_COMMAND消息的wParam
    高16位代表通知消息、低16位代表控件ID
    lParam代表控件句柄例如你点击了一个ID号为10、句柄为99999的组合框(ComboBox)的小箭头,那么在下拉列表显示出来后系统会发送消息:
    SendMessage 窗口句柄, WM_COMMAND, (CBN_DROPDOWN * &H10000) Or 10, ByVal 99999&
    当组合框收起下拉列表的时候,系统又会发送消息:
    SendMessage 窗口句柄, WM_COMMAND, (CBN_DROPUP * &H10000) Or 10, Byval 99999&
    (注:也可能用PostMessage,用SPY++看看就知道了)你的程序中wParam的值为0,是不是没有找到相对应的控件???
    如果你要找的那个程序,是用VB做的话,那么VB的所有控件都默认没有ID的,也就是所有控件的ID都为0
    如果是MFC或者Win32或者其他程序,一般都会有指定ID号的(连菜单也不例外)SendMessage(TApi, WM_COMMAND, 0, ByVal 0&)
    如果对方的程序在处理WM_COMMAND的时候,需要用到参数wParam或者lParam,而你给它传递了0值,所以导致程序处理失败,没有返回~或者简单点,你用SPY++来查看你正常点击该菜单时候所发生的消息,然后自己加以修改成适合自己的!
    以上纯属个人意见~顺便帮你顶顶让高手帮帮你~我还有个问题,这个程序是你自己做的还是其他程序??如果是自己做的就不用搞那么复杂了~~~~~
      

  5.   

    尝试一下用GetWindowLong(TApi, GWL_ID)来获得它的ID号,看有没有东东!