大家好我现在能够通过GetSystemMenu得到主菜单,然后通过GetSubMenu得到子菜单的句柄,然后我要获得每一项的句柄然后SendMessage触发该项菜单启动。不知我的想法能否实现。或者有其他的不需要句柄的方法触发菜单的每一项。就是模拟鼠标点击菜单中的每一项这个意思啦~~谢谢大家啦~

解决方案 »

  1.   

    直接调用菜单的处理函数不就行了。
    如果真要模拟,SendMessage(hwnd,WM_COMMAND,...)
    wParam的高位设为0,低位设为菜单的ID,lParam设为NULL就行了。
      

  2.   

    mouse_event模拟鼠标动作???
      

  3.   


    请问一下怎样调用菜单的处理函数  在代码里面怎么实现?SendMessage(hwnd,WM_COMMAND,...)里面是WM_LBUTTONDOWN吗?
      

  4.   

    请问一下怎样调用菜单的处理函数 在代码里面怎么实现?
    ===============
    比如你的菜单处理函数是void CView::MyXXX();
    直接调用它不就行了。SendMessage(hwnd,WM_COMMAND,...)里面是WM_LBUTTONDOWN吗?
    ======================
    你点一下菜单,实际上它向菜单所在的主窗口发送了WM_COMMAND消息,菜单的处理函数也是通过响应WM_COMMAND消息来处理菜单的。和WM_LBUTTONDOWN没有关系。
    WM_COMMAND消息如果是来自菜单的话,wParam的高位为0,低位为菜单ID,lParam设为NULL就行了。
    写成这样:
    SendMessage(hwnd,WM_COMMAND,MAKEWPARAM(IDM_XXX,0),NULL);
      

  5.   


    谢谢你我现在做的是检测别人的软件的东东,所以没有办法得到MyXXX()不过你说的SendMessage的方法我在试,看起来会很奏效的。
      

  6.   

    如果是另外的进程只能用SendMessage了,不过,你如果得到人家菜单的ID呢?
      

  7.   


    因为是我自己createprocess的,所以能得到进程号,然后通过进程号得到窗口句柄号,然后通过GetSystemMenu得到主菜单的句柄,然后有一个GetMenuItemId的API,好像可以得到ID,我正在试验中。你看我这两天问的问题就知道了。就是这样一步一步走过来的。嘿嘿。
      

  8.   

    其实有个简单方法,你用VC打开那个EXE文件,如果是VS2005之类的,直接打开,如果是VC6,在打开方式上选Resource方式,你就可以看到这个EXE文件的资源了,也就能看到菜单ID了
      

  9.   


    不是啊  不是特定的exe  是要对每一个exe都能检测。你说的那个MFC的方法我略懂是我自己要可以选择加载的软件。