2014-11-07 4 views
0

모든 메뉴 항목의 텍스트를 가져오고 싶습니다. 그것은 here에서 top-level menu (용어 위대한 작품,하지만 난 그것을 sub-menu items 작업을 얻는 방법을 이해하지 않습니다 예를 들어SubMenuItem 얻기 다른 창에서 방금 클릭했습니다.

나는 다음과 같은 메뉴 구조가 있습니다.

  1. 파일
    1. 열기
      1. 프로젝트
      2. 해결책
    2. ,
    3. 닫기
  2. 종료
  3. 내가 File을 탐색 할 수 있도록하려면

->Open ->Solution 그것에 사용자가 클릭 텍스트 '솔루션을 얻을 때'. 여기

(나는 File 클릭) 최상위 메뉴의 코드입니다

   MSLLHOOKSTRUCT ms = new MSLLHOOKSTRUCT(); 
       ms = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT)); 
       IntPtr win = WindowFromPoint(ms.pt); 

       IntPtr menu = GetMenu(win); 
       int menuItem = MenuItemFromPoint(win, menu, ms.pt); 
       IntPtr subMenu = GetSubMenu(menu, menuItem); // this is not used for top level and is useless for submenus 

       StringBuilder menuName = new StringBuilder(0x20); 
       GetMenuString(menu, (uint)menuItem, menuName, 0x20, (uint)ModifyMenu.MF_BYPOSITION); 

하지만 Open 또는 Solution 하위 메뉴를 클릭하면이 WindowFromPoint becase, 심지어 GetSubMenu 기능이 작동하지 않습니다 작동하지 않습니다 잘못된 처리기를 반환하고 모두 GetMenuGetSubMenu을 반환합니다 (기본적으로 하위 메뉴를 클릭 할 때 탐색 할 앵커가 없으며 Point로 메뉴 항목을 가져 오는 기능을 찾을 수 없습니다. WindowFromPoint 등. MenuItemFromPoint 아마도 -1을 반환합니다. 내 윈도우 처리기가 잘못 되었기 때문에).

다른 WinAPI 기능이 있습니까?

+1

[UI 자동화] (http://msdn.microsoft.com/en-us/library/ms747327.aspx)를 사용하십시오. 그것이 바로 그 때문입니다. – IInspectable

+0

감사합니다 !!! 이것은 커다란 충고이며, 당신의 접근 방식은 훨씬 좋습니다. – DarkWalker

답변

0

MSDN 문서 "MenuItemFromPoint function"에 오류가 있습니다. 매개 변수 "ptScreen"의 경우 화면 좌표를 사용해야하지만 클라이언트 좌표는 사용하지 않아야합니다.