Remotely/Remotely_ScreenCast.Linux/Input/X11Input.cs
2021-07-29 07:53:49 -07:00

160 lines
4.7 KiB
C#

using Remotely_ScreenCast.Core.Input;
using Remotely_ScreenCast.Core.Utilities;
using Remotely_ScreenCast.Linux.X11Interop;
using Remotely_ScreenCast.Core;
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using Remotely_ScreenCast.Linux.Capture;
namespace Remotely_ScreenCast.Linux.Input
{
public class X11Input : IKeyboardMouseInput
{
public void SendKeyDown(string key)
{
try
{
var display = LibX11.XOpenDisplay(null);
var keySim = LibX11.XStringToKeysym(key);
if (keySim == null)
{
Logger.Write($"Key not mapped: {key}");
return;
}
var keyCode = LibX11.XKeysymToKeycode(display, keySim);
LibX11.XTestFakeKeyEvent(display, keyCode, true, 1);
LibX11.XSync(display, false);
//LibX11.XCloseDisplay(display);
}
catch (Exception ex)
{
Logger.Write(ex);
}
}
public void SendKeyUp(string key)
{
try
{
var display = LibX11.XOpenDisplay(null);
var keySim = LibX11.XStringToKeysym(key);
if (keySim == null)
{
Logger.Write($"Key not mapped: {key}");
return;
}
var keyCode = LibX11.XKeysymToKeycode(display, keySim);
LibX11.XTestFakeKeyEvent(display, keyCode, false, 1);
LibX11.XSync(display, false);
//LibX11.XCloseDisplay(display);
}
catch (Exception ex)
{
Logger.Write(ex);
}
}
public uint SendLeftMouseDown(double percentX, double percentY)
{
try
{
var display = LibX11.XOpenDisplay(null);
SendMouseMove(percentX, percentY);
LibX11.XTestFakeButtonEvent(display, 1, true, 1);
LibX11.XSync(display, false);
//LibX11.XCloseDisplay(display);
return 0;
}
catch (Exception ex)
{
Logger.Write(ex);
return 1;
}
}
public uint SendLeftMouseUp(double percentX, double percentY)
{
try
{
var display = LibX11.XOpenDisplay(null);
SendMouseMove(percentX, percentY);
LibX11.XTestFakeButtonEvent(display, 1, false, 1);
LibX11.XSync(display, false);
//LibX11.XCloseDisplay(display);
return 0;
}
catch (Exception ex)
{
Logger.Write(ex);
return 1;
}
}
public uint SendMouseMove(double percentX, double percentY)
{
try
{
var display = LibX11.XOpenDisplay(null);
var capturer = new X11Capture();
var width = capturer.GetVirtualScreenWidth();
var height = capturer.GetVirtualScreenHeight();
LibX11.XTestFakeMotionEvent(display, 0, (int)(width * percentX), (int)(height * percentY), 1);
LibX11.XSync(display, false);
//LibX11.XCloseDisplay(display);
}
catch (Exception ex)
{
Logger.Write(ex);
}
return 0;
}
public uint SendMouseWheel(int deltaY)
{
return 0;
}
public uint SendRightMouseDown(double percentX, double percentY)
{
try
{
var display = LibX11.XOpenDisplay(null);
SendMouseMove(percentX, percentY);
LibX11.XTestFakeButtonEvent(display, 3, true, 1);
LibX11.XSync(display, false);
//LibX11.XCloseDisplay(display);
return 0;
}
catch (Exception ex)
{
Logger.Write(ex);
return 1;
}
}
public uint SendRightMouseUp(double percentX, double percentY)
{
try
{
var display = LibX11.XOpenDisplay(null);
SendMouseMove(percentX, percentY);
LibX11.XTestFakeButtonEvent(display, 3, false, 1);
LibX11.XSync(display, false);
//LibX11.XCloseDisplay(display);
return 0;
}
catch (Exception ex)
{
Logger.Write(ex);
return 1;
}
}
}
}