А нафига тебе каркулятор с твоим меню?
Конспирация батенька ) Это так для примера просто взято. А вообще, переделал так:
{*в программе: *}
...
procedure TForm1.Button1Click(Sender: TObject);
begin
  TheHWND:= FindWindow(Nil,'Калькулятор!');
    if TheHWND <> 0 then TheHMENU:= GetMenu(TheHWND)
    else MessageBox(0,'Can`t find Calc window!','Error!',mb_iconhand);
  myPopUPMenu:= CreatePopUpmenu();
  InsertMenu(myPopUpMenu,0,MF_BYPOSITION,ID_MENU_1,'MenuItem1');
  InsertMenu(myPopUpMenu,1,MF_BYPOSITION,ID_MENU_2,'MenuItem2');
  InsertMenu(myPopUpMenu,2,MF_BYPOSITION,ID_MENU_3,'MenuItem3');
  AppendMenu(TheHMENU,MF_POPUP, myPopUpMenu,'Test');
  SetMenuHandler();
end;
В DLL вынесен hook:
{*в dll: *}
function MenuHandler(nCode, wParam, lParam: integer): lResult; stdcall;
begin
  if nCode = MSGF_MENU then
  begin
    mhMSGStruct:= PMSG(lParam)^;
    case mhMSGStruct.message of
    WM_LBUTTONDOWN:
      begin
        if (GetMenu(mhMSGStruct.hwnd) = GetMenu(FindWindow(Nil,'Калькулятор'))) then
         begin
           messagebox(0,PChar(inttostr(lo(mhMSGStruct.wParam))),'foo',mb_iconhand);
           result:= CallNextHookEx(mhHandle,nCode,wParam,lParam);
           Exit;
         end;
      end;
    else
      begin
        result:= CallNextHookEx(mhHandle,nCode,wParam,lParam);
        Exit;
      end;
    end;
  end;
  result:= CallNextHookEx(mhHandle,nCode,wParam,lParam);
end;
function SetMenuHandler(): boolean; stdcall;
begin
  mhHandle:= SetWindowsHookEx(WH_MSGFILTER, @MenuHandler, hInstance,0);
  if (mhHandle <> 0) then result:= false else
  result:= true;
end;
Меню добавляется, хук ловит клики мышью, но проблема в том, что после обработки 
сообщения WM_LButtonDown оно попадет и в Calc, т.е допустим мое меню открылось и 
перекрыло собой пару кнопок, так вот, после щелчка по пункту моего меню, хук его ловит,
но ловит этот щелчек и Сalc, и нажимается кнопка которую перекрыло собой мой меню, 
как будто оно прозрачное. Как от этого избавиться. Нужно что бы на клики по меню,
срабатывал только обработчик моего меню. )
Посмотрю  WM_MEASUREITEM, что то похоже но не знаю...