diff --git a/src/robotjs.cc b/src/robotjs.cc index 3b688dff..44549a79 100644 --- a/src/robotjs.cc +++ b/src/robotjs.cc @@ -593,6 +593,28 @@ NAN_METHOD(getScreenSize) info.GetReturnValue().Set(obj); } +NAN_METHOD(captureScreen) +{ + MMSize displaySize = getMainDisplaySize(); + + MMBitmapRef bitmap = copyMMBitmapFromDisplayInRect(MMRectMake(0, 0, displaySize.width, displaySize.height)); + + uint32_t bufferSize = bitmap->bytesPerPixel * bitmap->width * bitmap->height; + Local buffer = Nan::NewBuffer((char*)bitmap->imageBuffer, bufferSize).ToLocalChecked(); + + Local obj = Nan::New(); + Nan::Set(obj, Nan::New("width").ToLocalChecked(), Nan::New(bitmap->width)); + Nan::Set(obj, Nan::New("height").ToLocalChecked(), Nan::New(bitmap->height)); + Nan::Set(obj, Nan::New("byteWidth").ToLocalChecked(), Nan::New(bitmap->bytewidth)); + Nan::Set(obj, Nan::New("bitsPerPixel").ToLocalChecked(), Nan::New(bitmap->bitsPerPixel)); + Nan::Set(obj, Nan::New("bytesPerPixel").ToLocalChecked(), Nan::New(bitmap->bytesPerPixel)); + Nan::Set(obj, Nan::New("image").ToLocalChecked(), buffer); + + destroyMMBitmap(bitmap); + + info.GetReturnValue().Set(obj); +} + NAN_MODULE_INIT(InitAll) { @@ -634,6 +656,9 @@ NAN_MODULE_INIT(InitAll) Nan::Set(target, Nan::New("getScreenSize").ToLocalChecked(), Nan::GetFunction(Nan::New(getScreenSize)).ToLocalChecked()); + + Nan::Set(target, Nan::New("captureScreen").ToLocalChecked(), + Nan::GetFunction(Nan::New(captureScreen)).ToLocalChecked()); } NODE_MODULE(robotjs, InitAll)