Take screenshots quickly on Windows by communicating directly with native API's.
Did I mention that it's DPI aware too?
Using this repo. The numbers below were taken over 1000 runs, each at 2560x1440*, outputing bmp
.
Library | Save to buffer | Save to file |
---|---|---|
windows-ss | 52ms | 51ms |
screenshot-desktop | 152ms | 141ms |
desktop-screenshot | n/a | 63ms** |
* Except for desktop-screenshot
, it ran at 1706x960 as it's DPI unaware.
** Times are relative to lower resolution of 1706x960. If interpolated back to 1440p according to a DPI of 1.5, 63 * (1.5 ^ 2) = 141ms
npm i windows-ss
IMPORTANT: You'll need .NET 4.5 or .NET Core installed, as this library depends on
edge-js
. Refer here for more info regarding installation.
import { capturePrimaryMonitor } from 'windows-ss';
await capturePrimaryMonitor({
// The format of the returned Buffer & saved file.
format: 'png',
// How much to carve off the edges. (Left, Top, Right, Bottom)
crop: {
left: 0,
top: 0,
right: 0,
bottom: 0,
},
// The bounds where the screen will be captured. (Left, Top, Right, Bottom)
bounds: {
left: 0,
top: 0,
right: 0,
bottom: 0,
},
// The file the screenshot will be saved to.
save: './ss.png',
});
Returns information about the the currently connected monitors.
- n/a
Promise<MonitorInfo[]>
——MonitorInfo[]
- An array of
MonitorInfo
s gotten from the current system.
- An array of
- n/a
import { getMonitorInfos, getMonitorInfosSync } from 'windows-ss';
await getMonitorInfos();
getMonitorInfosSync();
/*
// Example output
[
{
monitor: { left: 0, top: 0, right: 2560, bottom: 1440 },
workArea: { left: 0, top: 0, right: 2560, bottom: 1380 },
deviceName: '\\\\.\\DISPLAY1'
},
{
monitor: { left: 304, top: -1080, right: 2224, bottom: 0 },
workArea: { left: 304, top: -1080, right: 2224, bottom: -40 },
deviceName: '\\\\.\\DISPLAY2'
}
]
*/
Captures a screenshot of the monitor matching the device index.
deviceIndex: number
- Index of monitor according to Windows.
- (Optional)
config: Configuration
- Additional options for capturing the screenshot.
Promise<Buffer | null>
——Buffer | null
- The binary image data of the screenshot, with the format specified in
options.format
.null
is returned instead ifsave
was passed into theconfig
parameter.
- The binary image data of the screenshot, with the format specified in
import { captureMonitorByIndex, captureMonitorByIndexSync, getMonitorInfos } from 'windows-ss';
const monitorInfos = await getMonitorInfos();
await captureMonitorByIndex(monitorInfos.length - 1);
captureMonitorByIndexSync(0);
Captures a screenshot of the monitor matching the device name.
deviceName: string
- Name of monitor according to Windows.
- (Optional)
config: Configuration
- Additional options for capturing the screenshot.
Promise<Buffer | null>
——Buffer | null
- The binary image data of the screenshot, with the format specified in
options.format
.null
is returned instead ifsave
was passed into theconfig
parameter.
- The binary image data of the screenshot, with the format specified in
import { captureMonitorByName, captureMonitorByNameSync, getMonitorInfos } from 'windows-ss';
const monitorInfos = await getMonitorInfos();
await captureMonitorByName(monitorInfos[0].deviceName);
captureMonitorByNameSync(String.raw`\\.\DISPLAY1`);
Captures a screenshot of the primary monitor.
- (Optional)
config: Configuration
- Additional options for capturing the screenshot.
Promise<Buffer | null>
——Buffer | null
- The binary image data of the screenshot, with the format specified in
options.format
.null
is returned instead ifsave
was passed into theconfig
parameter.
- The binary image data of the screenshot, with the format specified in
import { capturePrimaryMonitor, capturePrimaryMonitorSync } from 'windows-ss';
await capturePrimaryMonitor();
capturePrimaryMonitorSync();
Captures a screenshot of the window matching the title.
title: string
- Title of window.
- (Optional)
config: Configuration
- Additional options for capturing the screenshot.
Promise<Buffer | null>
——Buffer | null
- The binary image data of the screenshot, with the format specified in
options.format
.null
is returned instead ifsave
was passed into theconfig
parameter.
- The binary image data of the screenshot, with the format specified in
import { captureWindowByTitle, captureWindowByTitleSync } from 'windows-ss';
await captureWindowByTitle('Task Manager');
captureWindowByTitleSync('Notepad');
Captures a screenshot of the currently active/focused window.
- (Optional)
config: Configuration
- Additional options for capturing the screenshot.
Promise<Buffer | null>
——Buffer | null
- The binary image data of the screenshot, with the format specified in
options.format
.null
is returned instead ifsave
was passed into theconfig
parameter.
- The binary image data of the screenshot, with the format specified in
import { captureActiveWindow, captureActiveWindowSync } from 'windows-ss';
await captureActiveWindow();
captureActiveWindowSync();
Contains options that can be provided by the user when taking a screenshot.
-
(Optional)
format: string
— The format of the returned buffer & saved file.- Default —
'png'
- Valid Values
'png'
'jpg'
'jpeg'
'bmp'
'emf'
'exif'
'gif'
'icon'
'tiff'
'wmf'
- Default —
-
(Optional)
crop: PlainRectangle
— How much to carve off the edges. -
(Optional)
bounds: PlainRectangle
— The bounds where the screen will be captured. -
(Optional)
save: string
— The path to where the screenshot will be saved to.-
Note: If this property is not provided, the screenshot is simply returned as a Buffer.
-
Contains a description of a monitor.
monitor: PlainRectangle
— The resolution of the entire monitor.workArea: PlainRectangle
— The resolution of the entire monitor excluding the taskbar.deviceName: string
— The device name of the monitor.
Contains properties to form a plain rectangle.
-
left: number
— The left edge of the rectangle.-
IMPORTANT: This must be of
int
type, meaning no decimals. Else, it will fail applying configuration.
-
-
top: number
— The top edge of the rectangle.-
IMPORTANT: This must be of
int
type, meaning no decimals. Else, it will fail applying configuration.
-
-
right: number
— The right edge of the rectangle.-
IMPORTANT: This must be of
int
type, meaning no decimals. Else, it will fail applying configuration.
-
-
bottom: number
— The bottom edge of the rectangle.-
IMPORTANT: This must be of
int
type, meaning no decimals. Else, it will fail applying configuration.
-
Thrown when no match can be found with the provided arguments.
- (Inherited)
paramName: string
- (Inherited)
name: string
- (Inherited)
stack: string
- (Inherited)
raw: CSException
Thrown when an invalid amount of arguments were provided.
- (Inherited)
paramName: string
- (Inherited)
name: string
- (Inherited)
stack: string
- (Inherited)
raw: CSException
Thrown when an invalid Configuration
object was provided.
- (Inherited)
paramName: string
- (Inherited)
name: string
- (Inherited)
stack: string
- (Inherited)
raw: CSException
Based on C#'s ArgumentException
.
Based on C#'s SystemException
.
ClientError
- An internal wrapper for
Error
- An internal wrapper for
raw: CSException
- The
InnerException
property of the rawError
object thrown byedge-js
- The
- (Inherited)
name: string
- (Inherited)
stack: string
All contributions are welcome. File an issue if you find something wrong, & a pull request if you can fix it.
MIT.