I'd start poking at things like this
FreeRDP · GitHub[
^] and see how they do it .. Obviously transmitting full screens could be problematic, so being able to identify differential areas could be a technique.
There used to be a lot of information and code for VNC as well, might be worth trawling the net for
You might end up writing the guts in C++ for instance, since iirc, it was easier to access the Win32 Screen/Desktop APIs, rather than using Interop/P-Invoke from C#