Пример #1
0
        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);
            }
        }
Пример #2
0
 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);
     }
 }
Пример #3
0
        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);
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        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);
            }
        }
Пример #6
0
 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);
     }
 }
Пример #7
0
        public double GetVirtualScreenHeight()
        {
            double height = 0;

            for (var i = 0; i < GetScreenCount(); i++)
            {
                height += LibX11.XHeightOfScreen(LibX11.XScreenOfDisplay(Display, i));
            }
            return(height);
        }
Пример #8
0
        public double GetVirtualScreenWidth()
        {
            double width = 0;

            for (var i = 0; i < GetScreenCount(); i++)
            {
                width += LibX11.XWidthOfScreen(LibX11.XScreenOfDisplay(Display, i));
            }
            return(width);
        }
Пример #9
0
 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);
     }
 }
Пример #10
0
 private void InitDisplay()
 {
     try
     {
         if (Display == IntPtr.Zero)
         {
             Display = LibX11.XOpenDisplay(null);
         }
     }
     catch (Exception ex)
     {
         Logger.Write(ex);
     }
 }
Пример #11
0
 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);
     }
 }
Пример #12
0
 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);
     }
 }
Пример #13
0
 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);
     }
 }
Пример #14
0
        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));
        }
Пример #15
0
 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);
     }
 }
Пример #16
0
 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);
 }
Пример #17
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);
     }
 }
Пример #18
0
 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);
     }
 }
Пример #19
0
        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);
            }
        }
Пример #20
0
 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);
     }
 }
Пример #21
0
 public void Dispose()
 {
     LibX11.XCloseDisplay(Display);
 }
Пример #22
0
 public void Dispose()
 {
     LibX11.XCloseDisplay(Display);
     GC.SuppressFinalize(this);
 }
Пример #23
0
 public KeyboardMouseInputLinux()
 {
     Display = LibX11.XOpenDisplay(null);
 }
Пример #24
0
 public X11Input()
 {
     Display = LibX11.XOpenDisplay(null);
 }
Пример #25
0
 public ScreenCapturerLinux()
 {
     Display = LibX11.XOpenDisplay(null);
     Init();
 }
Пример #26
0
 public int GetScreenCount()
 {
     return(LibX11.XScreenCount(Display));
 }
Пример #27
0
 public X11Capture()
 {
     Display = LibX11.XOpenDisplay(null);
     Init();
 }