This repository contains the Server part of the school project due for the Programmazione di Sistema class at Politecnico di Torino, Master of Science in Computer Engineering.
The Client part can be found here.
The project consists in a client-server solution for remote control of one or more Windows machines. The system is made of two parts: a server, written in C++, and a client, written in C#.
The server shall:
- expose a socket and listen for a client on a specific port. No security is required for the communication between the two peers.
- obtain the list of all the running applications having a graphical user interface and their processes
- get the icon associated to each running application
- know which application is currently on focus
- send, to the application currently on focus, key combinations made of none or more modifiers (CTRL / ALT / SHIFT) followed by the corresponding keycode (a / b / c /... / 1 / 2 / 3 / ... / BACKSPACE / DEL / ESC / ...)
- send the list of running application to the client, as soon as the connection is accepted, and next send all the important events occurring on the server machine, such as change of focus, closing of an application, starting of a new application
- have a minimal graphical user interface living in the system tray area
The client shall:
- have a graphical user interface
- get the list of applications running on the server, the full name of the process and the associated icon (if available)
- receive a notification whenever the above-mentioned list or focus change
- visualize a graphical summary of the server's current activities and the percentage of time each application has been on focus
- send a key combination to the application currently on focus on the server
- [OPTIONAL] be able to connect to many servers, visualize their statistics and send key combinations to all the servers currently running a specific application (e.g. "send CTRL-X to all the server running Firefox")