When you say “non-interactive”, does this mean the remote machines will not have users sitting at their terminals? Or do you mean there will be users running programs, but your RDP session will be passively copying whatever they’re doing to your application?
If it’s the latter, I don’t think the Remote Desktop Protocol allows for such “passive monitoring” of an active local session. But I’m no expert on RDP, so I could be wrong.
If you do mean you want to embed actual full-fledged RDP sessions into your application, but you won’t be interacting with them, you could try to create such an implementation, but it won’t be easy. A starting point might be to use the code of an existing RDP client such as rdesktop or FreeRDP.
One problem with that is the possible difficulty of doing your own implementation based on another application’s code: you will likely end up re-inventing many wheels.
Another possible problem is the legal side of it. According to Wikipedia, “Microsoft requires third-party implementations to license the relevant RDP patents”, and I’m not sure how that applies to your case.
On the other hand, if all you want is video capture of the remote machines, and displaying that video (or saving it) on your machine, it will probably be easier to stick to live streaming. Keep in mind that live video streaming is a subset of RDP, so you will be dealing with a smaller set of requirements and complexities.
If you wish to try this, the company I work for has a Multimedia SDK that includes, among other things, a Screen Capture video filter and a Video Capture Control. These 2 objects (the filter and the control) can be used together at the remote machines as follows:
- The Screen Capture filter is configured to capture the desired area (part or all of the screen)
- The Video Capture control streams the video to the network, enabling you to receive it in your monitoring application.
The SDK also includes components to receive the video at the other side and either display it or save it (or both).
You can try the SDK using the free evaluation of LEADTOOLS Multimedia from this page. There are C++ demos that ship with the SDK to show how to implement both sides:
- Remote machine: LEADTOOLS\Examples\Multimedia\ltmm\Cpp\NetServer
- Monitoring side: LEADTOOLS 20\Examples\Multimedia\ltmm\Cpp\NetClient
There’s also free technical support through email and chat during the evaluation.