Das ist glaube ich gar nicht so einfach.
Auf jeden Fall mußt Du in Deiner Applikation mit 'SetWindowsHookEx' einen Hook des Typs 'WH_KEYBOARD' anlegen, nachdem Du die DLL mit Deinen Hookprozeduren geladen hast. In dessen Hookprozedur testest Du dann die Tastendrücke und wenn das Wort getippt wurde, dann zeigst Du das Popupmenü an. Auf jeden Fall solltest Du am Ende der Keyboard-Hookprozedur 'CallNextHookEx' aufrufen, um die Tastendrücke auch weiterzugeben.
Deine Applikation muß natürlich die ganze Zeit weiterlaufen, z.B. in der Art einer Schleife: 'while(!FinishHooks()) sleep10;', wobei 'FinishHooks()' genauso wie die Hookprozeduren in Deiner DLL ist und eine DLL-interne Variable 'BOOL b_finished' abfragt.
Um das ganze auch wieder zu beenden könntest Du im Popupmenü einen Menüpunkt 'Ende' haben, der z.B. eine ID 'ID_MYPOPUP_END_APPL' hat. Du installierst einen 2. Hook, der vom Typ 'WH_MSGFILTER' ist und dessen Hookprozedur bei Empfang dieser ID 'b_finished' auf 'TRUE' setzt. Alle anderen ID's die von Deinem Popupmenü kommen werden auch dort empfangen und bearbeitet.
Nach Beendigung der while-Schleife mußt Du die Hooks dann wieder mit 'UnhookWindowsHookEx' deinstallieren.
Das ganze ist nicht getestet und da es schon eine Weile her ist, daß ich mit Hooks gearbeitet habe bin ich mir bei meiner Lösung auch nicht 100%ig sicher. Ich bin mir auch nicht sicher, ob Du die Hookprozeduren wirklich in eine DLL auslagern mußt, aber so in der Art müßte es gehen.