public void SendKeyUp(string key) { try { InitDisplay(); key = ConvertJavaScriptKeyToX11Key(key); var keySim = LibX11.XStringToKeysym(key); if (keySim == IntPtr.Zero) { Logger.Write($"Key not mapped: {key}"); return; } var keyCode = LibX11.XKeysymToKeycode(Display, keySim); if (EnvironmentHelper.Is64) { LibXtst.XTestFakeKeyEvent(Display, keyCode, false, 0); } else { LibXtst_32.XTestFakeKeyEvent(Display, keyCode, false, 0); } LibX11.XSync(Display, false); } catch (Exception ex) { Logger.Write(ex); } }
public void SetSelectedScreen(int screenNumber) { if (screenNumber == SelectedScreen) { return; } try { if (GetScreenCount() >= screenNumber + 1) { SelectedScreen = screenNumber; } else { SelectedScreen = 0; } var width = LibX11.XDisplayWidth(Display, SelectedScreen); var height = LibX11.XDisplayHeight(Display, SelectedScreen); CurrentScreenBounds = new Rectangle(0, 0, width, height); CaptureFullscreen = true; Init(); ScreenChanged?.Invoke(this, CurrentScreenBounds); } catch (Exception ex) { Logger.Write(ex); } }
private Bitmap GetX11Screen() { var currentFrame = new Bitmap(CurrentScreenBounds.Width, CurrentScreenBounds.Height, PixelFormat.Format32bppArgb); var window = LibX11.XRootWindow(Display, _x11Screens[SelectedScreen]); var imagePointer = LibX11.XGetImage(Display, window, 0, 0, CurrentScreenBounds.Width, CurrentScreenBounds.Height, ~0, 2); var image = Marshal.PtrToStructure <LibX11.XImage>(imagePointer); var bd = currentFrame.LockBits(new Rectangle(0, 0, CurrentScreenBounds.Width, CurrentScreenBounds.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); unsafe { byte *scan1 = (byte *)bd.Scan0.ToPointer(); byte *scan2 = (byte *)image.data.ToPointer(); var bytesPerPixel = Bitmap.GetPixelFormatSize(currentFrame.PixelFormat) / 8; var totalSize = bd.Height * bd.Width * bytesPerPixel; for (int counter = 0; counter < totalSize - bytesPerPixel; counter++) { scan1[counter] = scan2[counter]; } } currentFrame.UnlockBits(bd); LibX11.XDestroyImage(imagePointer); return(currentFrame); }
public void SendMouseMove(double percentX, double percentY, Viewer viewer) { try { InitDisplay(); var screenBounds = viewer.Capturer.CurrentScreenBounds; if (EnvironmentHelper.Is64) { LibXtst.XTestFakeMotionEvent(Display, LibX11.XDefaultScreen(Display), screenBounds.X + (int)(screenBounds.Width * percentX), screenBounds.Y + (int)(screenBounds.Height * percentY), 0); } else { LibXtst_32.XTestFakeMotionEvent(Display, LibX11.XDefaultScreen(Display), screenBounds.X + (int)(screenBounds.Width * percentX), screenBounds.Y + (int)(screenBounds.Height * percentY), 0); } LibX11.XSync(Display, false); } catch (Exception ex) { Logger.Write(ex); } }
public void SendMouseButtonAction(int button, ButtonAction buttonAction, double percentX, double percentY, Viewer viewer) { try { var isPressed = buttonAction == ButtonAction.Down; // Browser buttons start at 0. XTest starts at 1. var mouseButton = (uint)(button + 1); InitDisplay(); SendMouseMove(percentX, percentY, viewer); if (EnvironmentHelper.Is64) { LibXtst.XTestFakeButtonEvent(Display, mouseButton, isPressed, 0); } else { LibXtst_32.XTestFakeButtonEvent(Display, mouseButton, isPressed, 0); } LibX11.XSync(Display, false); } catch (Exception ex) { Logger.Write(ex); } }
public void SetSelectedScreen(string displayName) { if (displayName == SelectedScreen) { return; } try { if (_x11Screens.ContainsKey(displayName)) { SelectedScreen = displayName; } else { SelectedScreen = _x11Screens.Keys.First(); } var width = LibX11.XDisplayWidth(Display, _x11Screens[SelectedScreen]); var height = LibX11.XDisplayHeight(Display, _x11Screens[SelectedScreen]); CurrentScreenBounds = new Rectangle(0, 0, width, height); CaptureFullscreen = true; ScreenChanged?.Invoke(this, CurrentScreenBounds); } catch (Exception ex) { Logger.Write(ex); } }
public double GetVirtualScreenHeight() { double height = 0; for (var i = 0; i < GetScreenCount(); i++) { height += LibX11.XHeightOfScreen(LibX11.XScreenOfDisplay(Display, i)); } return(height); }
public double GetVirtualScreenWidth() { double width = 0; for (var i = 0; i < GetScreenCount(); i++) { width += LibX11.XWidthOfScreen(LibX11.XScreenOfDisplay(Display, i)); } return(width); }
public void SendLeftMouseUp(double percentX, double percentY, Viewer viewer) { try { SendMouseMove(percentX, percentY, viewer); LibXtst.XTestFakeButtonEvent(Display, 1, false, 0); LibX11.XSync(Display, false); } catch (Exception ex) { Logger.Write(ex); } }
private void InitDisplay() { try { if (Display == IntPtr.Zero) { Display = LibX11.XOpenDisplay(null); } } catch (Exception ex) { Logger.Write(ex); } }
public void SendRightMouseDown(double percentX, double percentY, Viewer viewer) { try { InitDisplay(); SendMouseMove(percentX, percentY, viewer); LibXtst.XTestFakeButtonEvent(Display, 3, true, 0); LibX11.XSync(Display, false); } catch (Exception ex) { Logger.Write(ex); } }
public void Init() { try { var defaultScreen = LibX11.XDefaultScreen(Display); SetSelectedScreen(defaultScreen); CurrentFrame = new Bitmap(CurrentScreenBounds.Width, CurrentScreenBounds.Height, PixelFormat.Format32bppArgb); PreviousFrame = new Bitmap(CurrentScreenBounds.Width, CurrentScreenBounds.Height, PixelFormat.Format32bppArgb); } catch (Exception ex) { Logger.Write(ex); } }
public uint SendLeftMouseDown(double percentX, double percentY, Viewer viewer) { try { SendMouseMove(percentX, percentY, viewer); LibXtst.XTestFakeButtonEvent(Display, 1, true, 0); LibX11.XSync(Display, false); return(0); } catch (Exception ex) { Logger.Write(ex); return(1); } }
public Rectangle GetVirtualScreenBounds() { int width = 0; for (var i = 0; i < GetScreenCount(); i++) { width += LibX11.XWidthOfScreen(LibX11.XScreenOfDisplay(Display, i)); } int height = 0; for (var i = 0; i < GetScreenCount(); i++) { height += LibX11.XHeightOfScreen(LibX11.XScreenOfDisplay(Display, i)); } return(new Rectangle(0, 0, width, height)); }
public void SendMouseMove(double percentX, double percentY, Viewer viewer) { try { LibXtst.XTestFakeMotionEvent(Display, viewer.Capturer.GetSelectedScreenIndex(), (int)(viewer.Capturer.CurrentScreenBounds.Width * percentX), (int)(viewer.Capturer.CurrentScreenBounds.Height * percentY), 0); LibX11.XSync(Display, false); } catch (Exception ex) { Logger.Write(ex); } }
public uint SendMouseMove(double percentX, double percentY, Viewer viewer) { try { var capturer = new X11Capture(Display); LibXtst.XTestFakeMotionEvent(Display, viewer.Capturer.SelectedScreen, (int)(viewer.Capturer.CurrentScreenBounds.Width * percentX), (int)(viewer.Capturer.CurrentScreenBounds.Height * percentY), 0); LibX11.XSync(Display, false); } catch (Exception ex) { Logger.Write(ex); } return(0); }
public void SendRightMouseUp(double percentX, double percentY, Viewer viewer) { try { InitDisplay(); SendMouseMove(percentX, percentY, viewer); if (EnvironmentHelper.Is64) { LibXtst.XTestFakeButtonEvent(Display, 3, false, 0); } else { LibXtst_32.XTestFakeButtonEvent(Display, 3, false, 0); } LibX11.XSync(Display, false); } catch (Exception ex) { Logger.Write(ex); } }
public void SendMouseWheel(int deltaY, Viewer viewer) { try { if (deltaY > 0) { LibXtst.XTestFakeButtonEvent(Display, 4, true, 0); LibXtst.XTestFakeButtonEvent(Display, 4, false, 0); } else { LibXtst.XTestFakeButtonEvent(Display, 5, true, 0); LibXtst.XTestFakeButtonEvent(Display, 5, false, 0); } LibX11.XSync(Display, false); } catch (Exception ex) { Logger.Write(ex); } }
public void SendKeyUp(string key, Viewer viewer) { try { key = ConvertJavaScriptKeyToX11Key(key); var keySim = LibX11.XStringToKeysym(key); if (keySim == null) { Logger.Write($"Key not mapped: {key}"); return; } var keyCode = LibX11.XKeysymToKeycode(Display, keySim); LibXtst.XTestFakeKeyEvent(Display, keyCode, false, 0); LibX11.XSync(Display, false); } catch (Exception ex) { Logger.Write(ex); } }
public void SendMouseWheel(int deltaY) { try { InitDisplay(); if (deltaY > 0) { LibXtst.XTestFakeButtonEvent(Display, 4, true, 0); LibXtst.XTestFakeButtonEvent(Display, 4, false, 0); if (EnvironmentHelper.Is64) { LibXtst.XTestFakeButtonEvent(Display, 4, true, 0); LibXtst.XTestFakeButtonEvent(Display, 4, false, 0); } else { LibXtst_32.XTestFakeButtonEvent(Display, 4, true, 0); LibXtst_32.XTestFakeButtonEvent(Display, 4, false, 0); } } else { if (EnvironmentHelper.Is64) { LibXtst.XTestFakeButtonEvent(Display, 5, true, 0); LibXtst.XTestFakeButtonEvent(Display, 5, false, 0); } else { LibXtst_32.XTestFakeButtonEvent(Display, 5, true, 0); LibXtst_32.XTestFakeButtonEvent(Display, 5, false, 0); } } LibX11.XSync(Display, false); } catch (Exception ex) { Logger.Write(ex); } }
public void Dispose() { LibX11.XCloseDisplay(Display); }
public void Dispose() { LibX11.XCloseDisplay(Display); GC.SuppressFinalize(this); }
public KeyboardMouseInputLinux() { Display = LibX11.XOpenDisplay(null); }
public X11Input() { Display = LibX11.XOpenDisplay(null); }
public ScreenCapturerLinux() { Display = LibX11.XOpenDisplay(null); Init(); }
public int GetScreenCount() { return(LibX11.XScreenCount(Display)); }
public X11Capture() { Display = LibX11.XOpenDisplay(null); Init(); }