我再spy++中查看notepad的右键弹出菜单消息时,发现有WM_ENTERIDLE
WM_ENTERIDLE fuSource:MSGF_MENU hwnd:000705B6
1.msdn上说:WM_ENTERIDLE消息的wParam表示:指名消息是否是正在被显示的对话框或菜单进入空闲状态的结果,它是下列值中的一个:
MSGF_DIALOGBOX:因为对话框正被显示,系统正空闲。
MSGF_MENU:因为菜单正被显示,系统正空闲。
lParam参数表示:如果wParam为MSGF_DIALOGBOX,则为含有对话框的句柄;如果wParam为MSGF_MENU,则为包含正被显示菜单的窗口的句柄。
按照这个理解hwnd:000705B6应该是notepad的那个edit的句柄,但是spy++里查看那个edit句柄并不是000705B6
这个消息的hwnd:000705B6到底是谁的句柄呢? 2.
还有就是如何才能得到右键弹出的那个菜单的句柄呢?有经验的讨论讨论啊!

解决方案 »

  1.   

    1. Menu hwnd ?
    2. 你上面不都说了说了吗?WM_ENTERIDLE消息.WM_ENTERIDLE 消息的时候拿这个窗口句柄与鼠标下的窗口句柄进行比较WindowFromPoint();
      

  2.   

    welcome to discuss  
      

  3.   


    我用如下代码打印出句柄: HWND hWnd = FindWindow("Notepad",NULL);
    HWND hedit = FindWindowEx(hWnd,NULL, "Edit",NULL); POINT pt;
    pt.x = 35;
    pt.y = 282; if (ClientToScreen(hedit,&pt))
    {
    HWND hwnd11 = NULL;
    if(hwnd11 = WindowFromPoint(pt))
    {
    printf("handle: %x",hwnd11);
    }
    }结果就是edit的句柄, 不是(WM_ENTERIDLE fuSource:MSGF_MENU hwnd:000705B6)这个消息显示的句柄,而且WM_ENTERIDLE消息里的那个句柄 每次右键弹出菜单时 都是不一样的  是在搞不懂这是谁的句柄了.
      

  4.   

    可以通过SHGetMenu() 从菜单窗口句柄HWND 获取到HMENU
      

  5.   

    可以通过SHGetMenu() 从菜单窗口句柄HWND 获取到HMENU
      

  6.   

    可以通过SHGetMenu() 从菜单窗口句柄HWND 获取到HMENU 
      

  7.   

    这个函数好像只有wince能用吧
      

  8.   

    WM_ENTERIDLE不是标准Windows消息,在别的程序中这个消息可以有其它含义
      

  9.   

    怎么不是标准消息,你查了MSDN了么?MFC里就用了WM_ENTERIDLE做菜单和工具栏(对话条)的空闲刷新操作。
      

  10.   

    WM_ENTERIDLE是MFC定义的消息,不属于Windows的一部分。
      

  11.   

    SHGetMenu 是哪儿的?  msdn中木有找到
      

  12.   


    我认为属于 windows消失
    摘自 msdn 

    Res
    You can suppress the WM_ENTERIDLE message for a dialog box by creating the dialog box with the DS_NOIDLEMSG style. Requirements 
      Windows NT/2000/XP: Included in Windows NT 3.1 and later.
      Windows 95/98/Me: Included in Windows 95 and later.
      Header: Declared in Winuser.h; include Windows.h.
      

  13.   

    看错了,看成了WM_KICKIDLE了……这个文档里面说消息参数菜单的所有者,这个所有者是TrackPopupMenu的参数,不可能是Edit,因为Edit不会处理WM_COMMAND。应该是框架的窗口句柄。菜单句柄可以在WM_INITMENUPOPUP这里抓
      

  14.   

    记事本点击右键的时候没有WM_INITMENUPOPUP,后来只能通过WM_MENUSELECT消息获得菜单句柄了你说WM_ENTERIDLE的句柄参数是框架的句柄,spy++看记事本只有edit和notepad两个控件啊,而且这个消息的句柄参数每次右击鼠标时都是不一样的。
      

  15.   

    win32 menu 左右键移动 没看到这个消息