Remote Control Application
Overview
This project provides a Python-based remote control application that allows users to remotely control another computer's mouse and keyboard and view its screen in real-time. It uses sockets for communication, OpenCV for screen display, and pynput
for capturing and simulating mouse and keyboard events.
Features
- Remote Mouse and Keyboard Control: Capture and replay mouse movements, clicks, scrolls, and keyboard presses/releases.
- Real-time Screen Sharing: Capture and display the screen in real-time.
- Client-Server Architecture: Connects a client to a server using a base64-encoded code representing the IP and port.
Prerequisites
- Python 3.x
- Poetry for managing dependencies
You can install Poetry by following the instructions on the Poetry installation page.
Installation
-
Clone the repository:
git clone https://github.com/your-username/remote-control.git
cd remote-control
-
Install the dependencies using Poetry:
poetry install
-
Activate the virtual environment:
poetry shell
Usage
Running the Server
To start the server, run:
poetry run python remote_control.py -s
The server will display a code which can be used by the client to connect.
Running the Client
To start the client, run:
poetry run python remote_control.py -c <code>
Replace <code>
with the code provided by the server.
Interactive Mode
If no arguments are provided, the script will prompt you to choose between running as a server or client:
poetry run python remote_control.py
Follow the prompts to run the application.
Code Structure
ActionReplayer
Class
Handles the replaying of mouse and keyboard events.
-
Attributes:
screen_width
, screen_height
: Screen dimensions.events
: List of events to replay.kController
: Keyboard controller.mController
: Mouse controller.
-
Methods:
get_key(key_str)
: Converts a key string to a pynput
key object.replay(event)
: Replays a single event.
ActionRecorder
Class
Handles the recording of mouse and keyboard events.
-
Attributes:
screen_width
, screen_height
: Screen dimensions.mController
: Mouse controller.mouse
: Mouse event handler.kController
: Keyboard controller.keyboard
: Keyboard event handler.
-
Methods:
on_move(x, y)
: Handles mouse move events.on_click(x, y, button, pressed)
: Handles mouse click events.on_scroll(x, y, dx, dy)
: Handles mouse scroll events.on_press(key)
: Handles key press events.on_release(key)
: Handles key release events.
ScreenReplayer
Class
Handles the display of screen data.
- Methods:
display_image(image_data)
: Displays the received screen data.stop()
: Stops the screen display.
ScreenRecorder
Class
Captures and encodes the screen.
- Static Methods:
get_screen_image()
: Captures the screen and returns the encoded image data.
Host
Class
Manages the server-side of the connection.
-
Attributes:
mouse
, keyboard
, screen
: Sockets for mouse, keyboard, and screen data.
-
Methods:
create_socket(port)
: Creates and binds a socket to a given port.connect_socket(server_socket)
: Listens for and accepts a connection.show_screen(screen_replayer)
: Continuously receives and displays screen data.handle_mouse(data)
: Handles mouse data received from the client.handle_keyboard(data)
: Handles keyboard data received from the client.
Client
Class
Manages the client-side of the connection.
-
Attributes:
mouse
, keyboard
, screen
: Sockets for mouse, keyboard, and screen data.
-
Methods:
create_socket(ip, port)
: Creates a socket and connects it to a given IP and port.screen_share()
: Continuously captures and sends screen data.handle_mouse()
: Continuously receives and replays mouse events.handle_keyboard()
: Continuously receives and replays keyboard events.
License
This project is licensed under the MIT License.
Acknowledgments
This project uses the following libraries and resources:
- OpenCV for image processing.
- pynput for capturing and controlling input devices.
- Pillow for image manipulation.
- pyautogui for screen size and resolution detection.
Feel free to customize this README file further based on your needs and any additional features you may add to the project.