I have an application in C# which sends keys to another program. To do that I call SetForegroundWindow method before sending keys which works. Problem is when I am connected
This is very common problem. When you disconnect or minimize the RDP window, GUI context is lost. But you can keep RDP non-minimized (focus can be lost safely). In other words just turn full-screen mode off and switch to another window if you want to continue work locally.
In our company testing teams use master-slave approach: master host initiates remote connections and keeps them non-minimized until each GUI automation task is done.