idan_jl, in case you want to try to do this just for learning you should look into smaller bits and start very basic. Don't set off to create application that does everything if you know nothing, one small task at a time, this usually also goes for what you ask from others in return of nothing. Your initial request was using Remoting, there exist numerous tutorials and code examples for this on web. It is not difficult to create a remoting set and test it on local machine to send for example the string "hello remoting". You need a screenshot of desktop, it is easy find and learn many different codes that do this. Combine these two and you are able to get image of remote desktop, send it to client and view it, there you have the little "spy window" ready with little effort.
I have created a basic client-server remoting solution that does it, the solution runs both client and server on local machine now, "localhost" is also the address of the remoting object. It is tested and works in local network by changing the object address to different machine name (for example "tcp://mycomp/..."), of cource the server app must run on other computer too. Consider it a learning project, and you can build further on it. It should not be difficult to understand the code and learn what it does, and in that process perhaps see if there could be options and design tradeoffs. The desktop image is retrieved by click of button, perhaps you want to use a timer to get new image every second or so?
You might notice the mouse cursor is not visible in the screen image? The location is available on remote machine with System.Windows.Forms.Cursor.Position, you can both get and set this value of Point, this info can also be used to draw a cursor image on top of the screen image at correct location. Mouse clicks I think you have to find Win32 pInvoke code. Keyboard presses can be sent with SendKeys class. So here is a number of tips for your further research and development.