对于photoshop cs版本我用getmenustring和MF_BYPOSITION,能遍历得到所有菜单项。但在CS2版本上无法成功。不知道为什么,哪位能帮忙给个方法或思路?

解决方案 »

  1.   

    photoshop cs2开始能自定义菜单,现在我想遍历当前所有菜单项,如果实现?
      

  2.   


    void PrintMenu(FILE *fp, HMENU hMenu, int lvl)
    {
    int n = GetMenuItemCount(hMenu); MENUITEMINFOA info;
    info.cbSize = sizeof(info);
    info.fMask = MIIM_FTYPE|MIIM_STRING|MIIM_SUBMENU; for (int i=0; i<n; i++)
    {
    char buf[64] = "                              ";

    info.dwTypeData = buf+lvl;
    info.cch = 64 - lvl;
    GetMenuItemInfoA(hMenu, i, TRUE, &info); if (info.fType == MFT_STRING)
    {
    fprintf(fp, "%s\n", buf);
    }
    else if (info.fType == MFT_SEPARATOR)
    {
    fprintf(fp, "%s-----------\n", buf);
    } if (info.hSubMenu)
    PrintMenu(fp, info.hSubMenu, lvl+2);
    }
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
    HWND hWnd = FindWindow(_T("Photoshop"), NULL);
    HMENU hMenu = GetMenu(hWnd); FILE *fp = fopen("menu.txt", "w");
    PrintMenu(fp, hMenu, 0);
    fclose(fp); return 0;
    }
    爬了一下 好像可以. CS2
      

  3.   

    我说了,cs能这样得到,cs 2后是采用owendraw方式的,无法得到。
    owenerdraw方式自绘菜单,现在利用wm_drawitem消息得到菜单项的指针了,
    DRAWITEMSTRUCT * lp2 
    能得到菜单项的id了
    WORD id = LOWORD(lp2->itemID);
    菜单绘上去的文本怎么得到呢?
      

  4.   

    hotpos:你的程序我在cs中能获取,在cs2中只能得到第一层的菜单。即文件、编辑等。下层菜单内容都无法获取,你真的在cs2中测试得到?
      

  5.   

    你可以通过PHOTOSHOP的COM对象来获取.........,这个接口应该是公开的。
      

  6.   

    哪个ps com接口中的哪个属性或方法?