Sparkie,
Thanks for that - yes I've done it just as you have - the hook function is in a shared dll - as is the installHook function below...
ProcedureDLL.l installHook(hDLL, *hookFunction)
hHook = SetWindowsHookEx_(#WH_MSGFILTER, *hookFunction, hDLL, 0)
EndProcedure
ProcedureDLL.l MenuFilter ...