如何得到某个窗口的主菜单的全部菜单项?(50分)

  • 主题发起人 主题发起人 ildg
  • 开始时间 开始时间
I

ildg

Unregistered / Unconfirmed
GUEST, unregistred user!
正在运行的某个程序的某个窗口,<br>知道他的句柄,怎么得到它的主菜单的所有项?<br>————只要取得标题就ok了。<br>
 
<br>for i := 0 to MainMenu1.Items.Count -1 do<br><br>begin<br><br>if UserLevel &lt; MainMenu1.Items.Tag then<br><br>MainMenu1.Items.Visible := False<br><br>else<br><br>MainMenu1.Items.Visible := True;<br><br>for j := 0 to MainMenu1.Items.Count -1 do <br><br>if UserLevel &lt; MainMenu1.Items.Items[j].Tag then<br><br>MainMenu1.Items.Items[j].Visible := False<br><br>else <br><br>MainMenu1.Items.Items[j].Visible := True;<br><br>end;<br><br>看看这个例子吧
 
http://www.newhua.com/soft/15963.htm<br>这个工具源码中的菜单部分代码:<br><br>type<br>&nbsp; THandleType = (Window,MenuItem);<br><br>&nbsp; PWindowInfo = ^TWindowInfo;<br>&nbsp; TWindowInfo = record<br>&nbsp; &nbsp; bEnabled &nbsp; &nbsp;: Boolean;<br>&nbsp; &nbsp; sText &nbsp; &nbsp; &nbsp; : String;<br>&nbsp; &nbsp; sClassName &nbsp;: String;<br>&nbsp; end;<br><br>&nbsp; PMenuItemInfo = ^TMenuItemInfo;<br>&nbsp; TMenuItemInfo = record<br>&nbsp; &nbsp; bEnabled &nbsp; &nbsp;: Boolean;<br>&nbsp; &nbsp; sCaption &nbsp; &nbsp;: String;<br>&nbsp; &nbsp; bSubMenu &nbsp; &nbsp;: Boolean;<br>&nbsp; end;<br><br>&nbsp; PHandleInfo = ^THandleInfo;<br>&nbsp; THandleInfo = record<br>&nbsp; &nbsp; Hwnd &nbsp; &nbsp; &nbsp; &nbsp;: HWnd;<br>&nbsp; &nbsp; HandleType &nbsp;: THandleType;<br>&nbsp; &nbsp; HandleInfo &nbsp;: Pointer;<br>&nbsp; end;<br><br>function GetSubMenuItems(AHWnd:HWnd):Boolean;<br>//取得子菜单<br>var<br>&nbsp; i &nbsp; &nbsp; &nbsp; &nbsp; : Integer;<br>&nbsp; hMenu &nbsp; &nbsp; : HWND;<br>&nbsp; tn &nbsp; &nbsp; &nbsp; &nbsp;: TTreeNode;<br>&nbsp; ctn &nbsp; &nbsp; &nbsp; : TTreeNode;<br>&nbsp; hi &nbsp; &nbsp; &nbsp; &nbsp;: PHandleInfo;<br>begin<br>&nbsp; if GetMenuItemCount(AHwnd)&gt;0 then<br>&nbsp; &nbsp; with FrmWindowView do<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; ctn &nbsp; &nbsp; &nbsp; := &nbsp;ndParent;<br>&nbsp; &nbsp; &nbsp; for i:=0 to GetMenuItemCount(AHwnd)-1 do<br>&nbsp; &nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; &nbsp; hMenu:=GetSubMenu(AHWnd,i);<br>&nbsp; &nbsp; &nbsp; &nbsp; New(hi);<br>&nbsp; &nbsp; &nbsp; &nbsp; hi.HandleType &nbsp;:= &nbsp;MenuItem;<br>&nbsp; &nbsp; &nbsp; &nbsp; hi.Hwnd &nbsp; &nbsp; &nbsp; &nbsp;:= &nbsp;hMenu;<br>&nbsp; &nbsp; &nbsp; &nbsp; hi.HandleInfo &nbsp;:= &nbsp;GetSubMenuItemInfo(AHWnd,i);<br>&nbsp; &nbsp; &nbsp; &nbsp; tn:=tv.Items.AddChildObject(ndParent,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PMenuItemInfo(hi.HandleInfo).sCaption,hi);<br>&nbsp; &nbsp; &nbsp; &nbsp; ndParent &nbsp;:= &nbsp;tn;<br>&nbsp; &nbsp; &nbsp; &nbsp; GetSubMenuItems(hMenu);<br>&nbsp; &nbsp; &nbsp; &nbsp; ndParent &nbsp;:= &nbsp;ctn;<br>&nbsp; &nbsp; &nbsp; end;<br>&nbsp; &nbsp; &nbsp; ndParent &nbsp;:= &nbsp;ctn;<br>&nbsp; &nbsp; &nbsp; Result:=True;<br>&nbsp; &nbsp; end<br>&nbsp; else<br>&nbsp; &nbsp; Result:=False;<br>end;<br><br>function GetWindowMenu(AHwnd:HWnd):Boolean;<br>//取得菜单<br>var<br>&nbsp; hMainMenu : HWND;<br>&nbsp; tn &nbsp; &nbsp; &nbsp; &nbsp;: TTreeNode;<br>&nbsp; ctn &nbsp; &nbsp; &nbsp; : TTreeNode;<br>&nbsp; hi &nbsp; &nbsp; &nbsp; &nbsp;: PHandleInfo;<br>begin<br>&nbsp; hMainMenu:=GetMenu(AHwnd);<br>&nbsp; if (hMainMenu&gt;0) and (GetMenuItemCount(hMainMenu)&gt;0) then<br>&nbsp; &nbsp; with FrmWindowView do<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; New(hi);<br>&nbsp; &nbsp; &nbsp; hi.HandleType &nbsp;:= &nbsp;MenuItem;<br>&nbsp; &nbsp; &nbsp; hi.Hwnd &nbsp; &nbsp; &nbsp; &nbsp;:= &nbsp;AHwnd;<br>&nbsp; &nbsp; &nbsp; hi.HandleInfo &nbsp;:= &nbsp;nil;<br>&nbsp; &nbsp; &nbsp; tn &nbsp; &nbsp; &nbsp; &nbsp;:= &nbsp;tv.Items.AddChildObject(ndParent,AOptions.SMenu,hi);<br>&nbsp; &nbsp; &nbsp; ctn &nbsp; &nbsp; &nbsp; := &nbsp;ndParent;<br>&nbsp; &nbsp; &nbsp; ndParent &nbsp;:= &nbsp;tn;<br>&nbsp; &nbsp; &nbsp; GetSubMenuItems(hMainMenu);<br>&nbsp; &nbsp; &nbsp; ndParent &nbsp;:= &nbsp;ctn;<br>&nbsp; &nbsp; &nbsp; Result:=True;<br>&nbsp; &nbsp; end<br>&nbsp; else<br>&nbsp; &nbsp; Result:=False;<br>end;
 
非常感谢肥羊,那个东东是你做的吗?<br>真棒~
 
后退
顶部