高手请进:如何获得外部程序的菜单项内容?(UP有分)
我在做一个项目,需要跟据外部程序所选择的菜单项动作,来在本程序内执行相应的响应.
我做了个全局的HOOK,可以截获菜单的点击的左右键事件,可以知道点击的是菜单,但是却始终区分不出点击了菜单哪一项.
后来想靠取得的内容来区分,但是别的对象比如BUTTON,LISTVIEW等都可以取到内容,只有菜单的取不到.
我想请问,为什么菜单的内容取不到?有没有什么办法可以取得到?或者说,可以区分出点击了哪一项菜单?
具体HOOK内容实现如下:
function Hookproc(iCode: Integer; wparam, lparam: LongInt): lresult; stdcall;
var PEvt: ^EVENTMSG;
FocusWnd: HWND;
aName: array [0..255] of char;
rPos: TPoint;
ahWnd:THandle;
begin
if iCode<0 then begin
result:= CallNextHookEx(haHook,iCode,wparam,lparam);
exit;
end;
if (iCode = HC_ACTION) then
begin
GetCursorPos(rPos);
ahWnd:=WindowFromPoint(rPos);
GetClassName(ahWnd,aName, 256);
if trim(aName)='#32768' then //是否是菜单?
form1.Label2.Caption :='选中的是菜单'
else
form1.Label2.Caption :=aName;
GetWindowText(ahWnd,aName,255); //获取该类名称.
form1.Label3.Caption :=aName;
FocusWnd:=GetActiveWindow;
if FocusWnd= IE_HWND then begin //IE_HWND为指定窗体句柄.
pEvt := Pointer(DWord(lParam)); //取鼠标结构.
if (pEvt.message = WM_LBUTTONDOWN) or (pEvt.message = WM_RBUTTONDOWN) then
begin
if pEvt.message = WM_LBUTTONDOWN then
form1.Label1.Caption :='左键按下'
else
form1.Label1.Caption := '右键按下';
end;
end;
end;
result:= CallNextHookEx(haHook,iCode,wparam,lparam);
end;
请教高手指点.谢谢!