var
uHWND : HWND;
begin
uHWND := $001D0502;
is isMenu(uHWND) then showmessage('it's menu.') else showmessage('it isn't menu.');
end;这样有什么错的地方? 任何句柄都返回FALSE.
谢谢..

解决方案 »

  1.   

    var
      i:Hwnd;
    begin
      i := mainmenu1.Handle;
      showmessage(inttostr(i));
      if ismenu(i) then
       showmessage('1111');
    end;
    我的可以正常运行啊!
      

  2.   

    每一次运行之后,可能MENU的Hmenu都会变,是不是楼住用的HAndle是上一次运行时的HANDLE啊
      

  3.   

    我是用SPY抓的系统或外部程序的菜单的HWND,不是本程序的.
    比如桌面右键菜单,开始菜单,金山词霸的取词框(这些在XP下都有阴影.应该都是menus).
    但是都isMenu()都return false....求其解...
      

  4.   

    uHWND := $001D0502;// 你这个是怎么得到的???
    // 还有你是在这个菜单弹出的<或者存在的时候>同时运行IsMenu判断的么
      

  5.   

    比如金山词霸的取词栏,它下面有阴影的,可以说明它是菜单窗口,把它定在桌面上,然后用SPY抓句柄.
    还有我遍历了所有系统isWindowVisible句柄,一直用timer判断所有的isMenu(HWND),都没有返回True的.求解呀~
      

  6.   

    有阴影的不一定是菜单,菜单也可以没有阴影。
    自己画阴影就可以啊,
    取词栏,你是不是说的屏幕取词后的那块区域,那不是MENU
      

  7.   

    干吗非要是MENU??
    不一定的
    你不如直接返回HANDLE的TEXT测试下
      

  8.   

    IsMenu

    你可以用自己的程序里测试下如果返回0,那肯定就是你HANDLE没找对
      

  9.   

    我是用EnumWindows(@EnumWindowsProc, Param);取所有系统进程的句柄的,
    但是那个取到的Popupmenu1的hwnd和showmessage(inttostr(popupmenu1.handle));
    不一样. 这个有什么区别吗?
    谢谢.
      

  10.   

    自己搞定了,只要判断style有没有POPUP属性就行了.谢谢各位了.