static public System.Drawing.Bitmap GetScreenshotOfWindowAsBitmap(IntPtr windowHandle) { SetProcessDPIAware(); var windowRect = new WinApi.Rect(); if (WinApi.GetWindowRect(windowHandle, ref windowRect) == IntPtr.Zero) { return(null); } int width = windowRect.right - windowRect.left; int height = windowRect.bottom - windowRect.top; var asBitmap = new System.Drawing.Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb); // Where from could we get the scale to apply to compute the rect in screen coordinates? Console.WriteLine("System.Drawing.Graphics.FromImage(asBitmap).DpiX: " + System.Drawing.Graphics.FromImage(asBitmap).DpiX); Console.WriteLine("System.Drawing.Graphics.FromHwnd(GetDesktopWindow()).DpiX: " + System.Drawing.Graphics.FromHwnd(WinApi.GetDesktopWindow()).DpiX); Console.WriteLine("System.Drawing.Graphics.FromHwnd(windowHandle).DpiX: " + System.Drawing.Graphics.FromHwnd(windowHandle).DpiX); System.Drawing.Graphics.FromImage(asBitmap).CopyFromScreen( windowRect.left, windowRect.top, 0, 0, new System.Drawing.Size(width, height), System.Drawing.CopyPixelOperation.SourceCopy); return(asBitmap); }
static void performTaskOnWindow(Request.TaskOnIdentifiedWindowStructure taskOnIdentifiedWindow) { var windowHandle = new IntPtr(taskOnIdentifiedWindow.windowId.WindowHandleFromInt); var windowRect = new WinApi.Rect(); if (WinApi.GetWindowRect(windowHandle, ref windowRect) == IntPtr.Zero) { return; } var inputSimulator = new WindowsInput.InputSimulator(); var task = taskOnIdentifiedWindow.task; if (task.BringWindowToForeground != null) { WinApi.SetForegroundWindow(windowHandle); WinApi.ShowWindow(windowHandle, WinApi.SW_RESTORE); } if (task.MoveMouseToLocation != null) { WinApi.SetCursorPos( task.MoveMouseToLocation.x + windowRect.left, task.MoveMouseToLocation.y + windowRect.top); } if (task.MouseButtonDown != null) { if (task.MouseButtonDown.MouseButtonLeft != null) { inputSimulator.Mouse.LeftButtonDown(); } if (task.MouseButtonDown.MouseButtonRight != null) { inputSimulator.Mouse.RightButtonDown(); } } if (task.MouseButtonUp != null) { if (task.MouseButtonUp.MouseButtonLeft != null) { inputSimulator.Mouse.LeftButtonUp(); } if (task.MouseButtonUp.MouseButtonRight != null) { inputSimulator.Mouse.RightButtonUp(); } } if (task.KeyboardKeyDown != null) { inputSimulator.Keyboard.KeyDown((WindowsInput.Native.VirtualKeyCode)task.KeyboardKeyDown.KeyboardKeyFromVirtualKeyCode); } if (task.KeyboardKeyUp != null) { inputSimulator.Keyboard.KeyUp((WindowsInput.Native.VirtualKeyCode)task.KeyboardKeyUp.KeyboardKeyFromVirtualKeyCode); } }