모든 메뉴 항목의 텍스트를 가져오고 싶습니다. 그것은 here에서 top-level menu
(용어 위대한 작품,하지만 난 그것을 sub-menu items
작업을 얻는 방법을 이해하지 않습니다 예를 들어SubMenuItem 얻기 다른 창에서 방금 클릭했습니다.
나는 다음과 같은 메뉴 구조가 있습니다.
- 파일
- 열기
-
을
- 프로젝트
- 해결책
,
- 닫기
- 열기
- 종료 내가
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
기능이 작동하지 않습니다 작동하지 않습니다 잘못된 처리기를 반환하고 모두 GetMenu
및 GetSubMenu
을 반환합니다 (기본적으로 하위 메뉴를 클릭 할 때 탐색 할 앵커가 없으며 Point로 메뉴 항목을 가져 오는 기능을 찾을 수 없습니다. WindowFromPoint
등. MenuItemFromPoint
아마도 -1을 반환합니다. 내 윈도우 처리기가 잘못 되었기 때문에).
다른 WinAPI 기능이 있습니까?
[UI 자동화] (http://msdn.microsoft.com/en-us/library/ms747327.aspx)를 사용하십시오. 그것이 바로 그 때문입니다. – IInspectable
감사합니다 !!! 이것은 커다란 충고이며, 당신의 접근 방식은 훨씬 좋습니다. – DarkWalker