Try duplicating the window class and window name that receives the messages - then P3XRCtl may send the messages directly to you without the TV app running. In other words, P3XRCtl may just do a simple FindWindow() on a known window name/class.
Another way to avoid a global hook is to inject a dll into the TV app and "subclass" the windows procedure of the target window - so you're only hooking the one instance.
wha, I can't believe a simple trick like that actually worked :D
I tried it earlier but I didn't set the window class name to the same, but now I did and I'm getting the messages the normal way.
This instantly solves all the hooking and threadid problems and without running the normal tv app at all.
Sir I salute you ^^