du kannst auch TObject nehmen und mit AllocateHWnd ein unsichtbares Fenster erzeugen, und die Nachrichten dafür dann an deine Procedure schicken. Allerdings funktioniert das nicht in einer Consolenanwendung wenn du dort die Windowmessages nicht verarbeitest (Nachrichtenschleife). Also in einer standardconsolenanwendung kannst du dein Object mit den Messages vergessen (außer du machst es in nem Thread, oder machst dem Programmierer begreiflich warum er in einer Konsolenanwendung jedesmal eine Nachrichtenschleife braucht)
Hier findest du den Ansatz:
http://www.delphipraxis.net/internal...=391495#391495
da war Jens wohl schneller, aber das Problem mit der Konsolenanwendung besteht und wird auch nicht einfach so verschwinden.