http://www.newhua.com/soft/15963.htm<br>这个工具源码中的菜单部分代码:<br><br>type<br> THandleType = (Window,MenuItem);<br><br> PWindowInfo = ^TWindowInfo;<br> TWindowInfo = record<br> bEnabled : Boolean;<br> sText : String;<br> sClassName : String;<br> end;<br><br> PMenuItemInfo = ^TMenuItemInfo;<br> TMenuItemInfo = record<br> bEnabled : Boolean;<br> sCaption : String;<br> bSubMenu : Boolean;<br> end;<br><br> PHandleInfo = ^THandleInfo;<br> THandleInfo = record<br> Hwnd : HWnd;<br> HandleType : THandleType;<br> HandleInfo : Pointer;<br> end;<br><br>function GetSubMenuItems(AHWnd:HWnd):Boolean;<br>//取得子菜单<br>var<br> i : Integer;<br> hMenu : HWND;<br> tn : TTreeNode;<br> ctn : TTreeNode;<br> hi : PHandleInfo;<br>begin<br> if GetMenuItemCount(AHwnd)>0 then<br> with FrmWindowView do<br> begin<br> ctn := ndParent;<br> for i:=0 to GetMenuItemCount(AHwnd)-1 do<br> begin<br> hMenu:=GetSubMenu(AHWnd,i);<br> New(hi);<br> hi.HandleType := MenuItem;<br> hi.Hwnd := hMenu;<br> hi.HandleInfo := GetSubMenuItemInfo(AHWnd,i);<br> tn:=tv.Items.AddChildObject(ndParent,<br> PMenuItemInfo(hi.HandleInfo).sCaption,hi);<br> ndParent := tn;<br> GetSubMenuItems(hMenu);<br> ndParent := ctn;<br> end;<br> ndParent := ctn;<br> Result:=True;<br> end<br> else<br> Result:=False;<br>end;<br><br>function GetWindowMenu(AHwnd:HWnd):Boolean;<br>//取得菜单<br>var<br> hMainMenu : HWND;<br> tn : TTreeNode;<br> ctn : TTreeNode;<br> hi : PHandleInfo;<br>begin<br> hMainMenu:=GetMenu(AHwnd);<br> if (hMainMenu>0) and (GetMenuItemCount(hMainMenu)>0) then<br> with FrmWindowView do<br> begin<br> New(hi);<br> hi.HandleType := MenuItem;<br> hi.Hwnd := AHwnd;<br> hi.HandleInfo := nil;<br> tn := tv.Items.AddChildObject(ndParent,AOptions.SMenu,hi);<br> ctn := ndParent;<br> ndParent := tn;<br> GetSubMenuItems(hMainMenu);<br> ndParent := ctn;<br> Result:=True;<br> end<br> else<br> Result:=False;<br>end;