fast-ctypes-screenshots


Namefast-ctypes-screenshots JSON
Version 0.10 PyPI version JSON
download
home_pagehttps://github.com/hansalemaos/fast_ctypes_screenshots
SummaryScreenshots in record time - up to 2.5x faster than MSS (Multiple Screen Shots)
upload_time2023-05-19 14:26:32
maintainer
docs_urlNone
authorJohannes Fischer
requires_python
licenseMIT
keywords screenshots mss fast win32
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Screenshots in record time - up to 2.5x faster than MSS (Multiple Screen Shots)

The module provides classes for capturing screenshots in Windows operating systems. It offers four different classes: ScreenshotOfRegion, ScreenshotOfOneMonitor, ScreenshotOfAllMonitors, and ScreenshotOfWindow. These classes allow you to capture screenshots of specific regions, individual monitors, all monitors, or specific windows (even background windows) on the screen.

For users who need to capture screenshots programmatically in their Python applications, this module can be of great interest. It provides a convenient and efficient way to capture screenshots using the Windows API, allowing for customization and flexibility in screenshot capturing.

One notable advantage of this module is its speed. It utilizes direct access to the Windows API and minimizes overhead, resulting in faster screenshot capturing compared to other libraries like MSS (Multiple Screen Shots). This can be beneficial for applications that require real-time or high-frequency screenshot capturing.

Furthermore, the module has minimal dependencies, making it lightweight and easy to integrate into existing projects. It relies on standard Windows libraries and ctypes for accessing the Windows API functions, reducing the need for additional external dependencies.


## pip install fast-ctypes-screenshots

#### Tested against Windows 10 / Python 3.10 / Anaconda


### How to use it 

```python

from time import time

import cv2
import numpy as np
from fast_ctypes_screenshots import (
    ScreenshotOfRegion,
    ScreenshotOfOneMonitor,
    ScreenshotOfAllMonitors,
    ScreenshotOfWindow,
)


# a simple benchmark function
def show_screenshot(
    screenshotiter, stop_at_frame=100, quitkey="q", show_screenshot=True
):
    def show_screenshotx():
        cv2.imshow("test", screenshot)
        if cv2.waitKey(1) & 0xFF == ord(quitkey):
            cv2.destroyAllWindows()
            return False
        return True

    framecounter = 0
    fps = 0
    start_time = time()
    for screenshot in screenshotiter:
        if stop_at_frame:
            if framecounter > stop_at_frame:
                break
            framecounter += 1
        if show_screenshot:
            sho = show_screenshotx()
        else:
            sho = True
        fps += 1
        if not sho:
            break
    print(f"fast_ctypes_screenshots: {fps / (time() - start_time)}")
    cv2.destroyAllWindows()


if __name__ == "__main__":
    # Take one screenshot

    # ScreenshotOfWindow works even with background windows
    with ScreenshotOfWindow(
        hwnd=920542, client=False, ascontiguousarray=False
    ) as screenshots_window:
        img1 = screenshots_window.screenshot_window()
    print(img1.shape)

    with ScreenshotOfWindow(
        hwnd=920542, client=True, ascontiguousarray=False
    ) as screenshots_window:
        img2 = screenshots_window.screenshot_window()
    print(img2.shape)

    # Screenshot of all monitors
    with ScreenshotOfAllMonitors(ascontiguousarray=False) as screenshots_all_monitor:
        img4 = screenshots_all_monitor.screenshot_monitors()
    print(img4.shape)

    # Screenshot of one monitor, starting at 0
    with ScreenshotOfOneMonitor(
        monitor=0, ascontiguousarray=False
    ) as screenshots_monitor:
        img5 = screenshots_monitor.screenshot_one_monitor()
    print(img5.shape)

    # x0=0, y0=40, x1=800, y1=680 -> rectangle
    with ScreenshotOfRegion(
        x0=0, y0=40, x1=800, y1=680, ascontiguousarray=False
    ) as screenshots_region:
        img6 = screenshots_region.screenshot_region()
    print(img6.shape)
    #######################################################################
    # Take many screenshots
    # from a window
    # screenshots_window is iterable
    with ScreenshotOfWindow(
        hwnd=920542, client=False, ascontiguousarray=False
    ) as screenshots_window:
        show_screenshot(
            screenshots_window, stop_at_frame=1500, quitkey="q", show_screenshot=True
        )

    with ScreenshotOfWindow(
        hwnd=920542, client=True, ascontiguousarray=False
    ) as screenshots_window:
        show_screenshot(
            screenshots_window, stop_at_frame=1500, quitkey="q", show_screenshot=True
        )

    # from all monitors
    # screenshots_all_monitor is iterable too
    with ScreenshotOfAllMonitors(ascontiguousarray=False) as screenshots_all_monitor:
        show_screenshot(
            screenshots_all_monitor,
            stop_at_frame=150,
            quitkey="q",
            show_screenshot=True,
        )

    # from one monitor
    # screenshots_monitor is iterable as well
    with ScreenshotOfOneMonitor(
        monitor=0, ascontiguousarray=False
    ) as screenshots_monitor:
        show_screenshot(
            screenshots_monitor, stop_at_frame=150, quitkey="q", show_screenshot=True
        )
    with ScreenshotOfRegion(
        x0=0, y0=40, x1=800, y1=680, ascontiguousarray=False
    ) as screenshots_region:
        show_screenshot(
            screenshots_region, stop_at_frame=150, quitkey="q", show_screenshot=True
        )

```

### Benchmark - MSS vs. fast-ctypes-screenshots

Benchmark | FPS One Screen - with cv2.imshow - MSS | FPS One Screen - with cv2.imshow - fast_ctypes_screenshots | FPS One Screen - without cv2.imshow - MSS | FPS One Screen - without cv2.imshow - fast_ctypes_screenshots
--------- | -------------------------------------- | -------------------------------------------------------- | ---------------------------------------- | --------------------------------------------------------------
1 screen - 1920x1080 | 14.570637829934096 | 29.75346366655896 | 29.040460293245385 | 32.07449524721684
2 screens - 3840x1080 | 10.885839644361466 | 18.843871526097328 | 17.19836897143781 | 24.268109622214084
region - 2800x960 | 13.54247110293269 | 28.722819983256283 | 21.342393892806598 | 29.528899151991656




```python
# MSS https://python-mss.readthedocs.io/ vs. fast_ctypes_screenshots


# The code for the benchmark 

import mss

print("\n\n-------------------------Benchmark - 1 screen - 1920x1080")
fps = 0
last_time = time()

with mss.mss() as sct:
    for _ in range(150):
        sct_img = sct.grab(sct.monitors[1])
        img = np.array(sct_img)
        cv2.imshow("test", img)
        fps += 1
        if cv2.waitKey(25) & 0xFF == ord("q"):
            cv2.destroyAllWindows()
            break
print(
    f"\n\n\nFPS One Screen - with cv2.imshow - MSS: {fps / (time() - last_time)}\n"
)
print("FPS One Screen - with cv2.imshow - ", end=" ")
cv2.destroyAllWindows()

with ScreenshotOfOneMonitor(
    monitor=0, ascontiguousarray=False
) as screenshots_monitor:
    show_screenshot(
        screenshots_monitor, stop_at_frame=150, quitkey="q", show_screenshot=True
    )
cv2.destroyAllWindows()
#########################################################
fps = 0
last_time = time()

with mss.mss() as sct:
    for _ in range(150):
        sct_img = sct.grab(sct.monitors[1])
        img = np.array(sct_img)
        fps += 1

print(
    f"\n\n\nFPS One Screen - without cv2.imshow - MSS: {fps / (time() - last_time)}\n"
)
print("FPS One Screen - without cv2.imshow - ", end=" ")

with ScreenshotOfOneMonitor(
    monitor=0, ascontiguousarray=False
) as screenshots_monitor:
    show_screenshot(
        screenshots_monitor, stop_at_frame=150, quitkey="q", show_screenshot=False
    )
cv2.destroyAllWindows()
#########################################################
print("\n\n-------------------------Benchmark - 2 screens - 3840x1080")
fps = 0
last_time = time()

with mss.mss() as sct:
    for _ in range(100):
        sct_img = sct.grab(sct.monitors[0])
        img = np.array(sct_img)
        cv2.imshow("test", img)
        fps += 1
        if cv2.waitKey(25) & 0xFF == ord("q"):
            cv2.destroyAllWindows()
            break

print(
    f"\n\n\nFPS All screens - with cv2.imshow - MSS: {fps / (time() - last_time)}\n"
)
cv2.destroyAllWindows()
print("FPS All screens - with cv2.imshow - ", end=" ")
with ScreenshotOfAllMonitors(ascontiguousarray=False) as screenshots_region:
    show_screenshot(
        screenshots_region, stop_at_frame=100, quitkey="q", show_screenshot=True
    )
cv2.destroyAllWindows()

#########################################################
fps = 0
last_time = time()
with mss.mss() as sct:
    for _ in range(100):
        sct_img = sct.grab(sct.monitors[0])
        img = np.array(sct_img)
        fps += 1
print(
    f"\n\n\nFPS All screens - without cv2.imshow - MSS: {fps / (time() - last_time)}\n"
)
print("FPS All screens - without cv2.imshow - ", end=" ")
with ScreenshotOfAllMonitors(ascontiguousarray=False) as screenshots_region:
    show_screenshot(
        screenshots_region, stop_at_frame=100, quitkey="q", show_screenshot=False
    )

#########################################################

print("\n\n-------------------------Benchmark - region - 2800x960")

fps = 0
last_time = time()
monitor = {"top": 40, "left": 0, "width": 2800, "height": 960}

with mss.mss() as sct:
    for _ in range(150):
        img = np.array(sct.grab(monitor))
        cv2.imshow("test", img)

        fps += 1
        if cv2.waitKey(25) & 0xFF == ord("q"):
            cv2.destroyAllWindows()
            break

print(f"\n\n\nFPS Region - with cv2.imshow - MSS: {fps / (time() - last_time)}\n")
print("FPS Region - with cv2.imshow - ", end=" ")
cv2.destroyAllWindows()

with ScreenshotOfRegion(
    x0=0, y0=40, x1=2800, y1=1000, ascontiguousarray=False
) as screenshots_region:
    show_screenshot(
        screenshots_region, stop_at_frame=150, quitkey="q", show_screenshot=True
    )

cv2.destroyAllWindows()

#########################################################

fps = 0
last_time = time()
monitor = {"top": 40, "left": 0, "width": 2800, "height": 960}

with mss.mss() as sct:
    for _ in range(150):
        img = np.array(sct.grab(monitor))
        fps += 1

print(
    f"\n\n\nFPS Region - without cv2.imshow - MSS: {fps / (time() - last_time)}\n"
)
print("FPS Region - without cv2.imshow: ", end=" ")
with ScreenshotOfRegion(
    x0=0, y0=40, x1=2800, y1=1000, ascontiguousarray=False
) as screenshots_region:
    show_screenshot(
        screenshots_region, stop_at_frame=150, quitkey="q", show_screenshot=False
    )



```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/hansalemaos/fast_ctypes_screenshots",
    "name": "fast-ctypes-screenshots",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "screenshots,mss,fast,win32",
    "author": "Johannes Fischer",
    "author_email": "aulasparticularesdealemaosp@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/76/13/4027a4ac1c190025d948a39d908268e8764e2c649758241b2754bffcf5bf/fast_ctypes_screenshots-0.10.tar.gz",
    "platform": null,
    "description": "# Screenshots in record time - up to 2.5x faster than MSS (Multiple Screen Shots)\r\n\r\nThe module provides classes for capturing screenshots in Windows operating systems. It offers four different classes: ScreenshotOfRegion, ScreenshotOfOneMonitor, ScreenshotOfAllMonitors, and ScreenshotOfWindow. These classes allow you to capture screenshots of specific regions, individual monitors, all monitors, or specific windows (even background windows) on the screen.\r\n\r\nFor users who need to capture screenshots programmatically in their Python applications, this module can be of great interest. It provides a convenient and efficient way to capture screenshots using the Windows API, allowing for customization and flexibility in screenshot capturing.\r\n\r\nOne notable advantage of this module is its speed. It utilizes direct access to the Windows API and minimizes overhead, resulting in faster screenshot capturing compared to other libraries like MSS (Multiple Screen Shots). This can be beneficial for applications that require real-time or high-frequency screenshot capturing.\r\n\r\nFurthermore, the module has minimal dependencies, making it lightweight and easy to integrate into existing projects. It relies on standard Windows libraries and ctypes for accessing the Windows API functions, reducing the need for additional external dependencies.\r\n\r\n\r\n## pip install fast-ctypes-screenshots\r\n\r\n#### Tested against Windows 10 / Python 3.10 / Anaconda\r\n\r\n\r\n### How to use it \r\n\r\n```python\r\n\r\nfrom time import time\r\n\r\nimport cv2\r\nimport numpy as np\r\nfrom fast_ctypes_screenshots import (\r\n    ScreenshotOfRegion,\r\n    ScreenshotOfOneMonitor,\r\n    ScreenshotOfAllMonitors,\r\n    ScreenshotOfWindow,\r\n)\r\n\r\n\r\n# a simple benchmark function\r\ndef show_screenshot(\r\n    screenshotiter, stop_at_frame=100, quitkey=\"q\", show_screenshot=True\r\n):\r\n    def show_screenshotx():\r\n        cv2.imshow(\"test\", screenshot)\r\n        if cv2.waitKey(1) & 0xFF == ord(quitkey):\r\n            cv2.destroyAllWindows()\r\n            return False\r\n        return True\r\n\r\n    framecounter = 0\r\n    fps = 0\r\n    start_time = time()\r\n    for screenshot in screenshotiter:\r\n        if stop_at_frame:\r\n            if framecounter > stop_at_frame:\r\n                break\r\n            framecounter += 1\r\n        if show_screenshot:\r\n            sho = show_screenshotx()\r\n        else:\r\n            sho = True\r\n        fps += 1\r\n        if not sho:\r\n            break\r\n    print(f\"fast_ctypes_screenshots: {fps / (time() - start_time)}\")\r\n    cv2.destroyAllWindows()\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    # Take one screenshot\r\n\r\n    # ScreenshotOfWindow works even with background windows\r\n    with ScreenshotOfWindow(\r\n        hwnd=920542, client=False, ascontiguousarray=False\r\n    ) as screenshots_window:\r\n        img1 = screenshots_window.screenshot_window()\r\n    print(img1.shape)\r\n\r\n    with ScreenshotOfWindow(\r\n        hwnd=920542, client=True, ascontiguousarray=False\r\n    ) as screenshots_window:\r\n        img2 = screenshots_window.screenshot_window()\r\n    print(img2.shape)\r\n\r\n    # Screenshot of all monitors\r\n    with ScreenshotOfAllMonitors(ascontiguousarray=False) as screenshots_all_monitor:\r\n        img4 = screenshots_all_monitor.screenshot_monitors()\r\n    print(img4.shape)\r\n\r\n    # Screenshot of one monitor, starting at 0\r\n    with ScreenshotOfOneMonitor(\r\n        monitor=0, ascontiguousarray=False\r\n    ) as screenshots_monitor:\r\n        img5 = screenshots_monitor.screenshot_one_monitor()\r\n    print(img5.shape)\r\n\r\n    # x0=0, y0=40, x1=800, y1=680 -> rectangle\r\n    with ScreenshotOfRegion(\r\n        x0=0, y0=40, x1=800, y1=680, ascontiguousarray=False\r\n    ) as screenshots_region:\r\n        img6 = screenshots_region.screenshot_region()\r\n    print(img6.shape)\r\n    #######################################################################\r\n    # Take many screenshots\r\n    # from a window\r\n    # screenshots_window is iterable\r\n    with ScreenshotOfWindow(\r\n        hwnd=920542, client=False, ascontiguousarray=False\r\n    ) as screenshots_window:\r\n        show_screenshot(\r\n            screenshots_window, stop_at_frame=1500, quitkey=\"q\", show_screenshot=True\r\n        )\r\n\r\n    with ScreenshotOfWindow(\r\n        hwnd=920542, client=True, ascontiguousarray=False\r\n    ) as screenshots_window:\r\n        show_screenshot(\r\n            screenshots_window, stop_at_frame=1500, quitkey=\"q\", show_screenshot=True\r\n        )\r\n\r\n    # from all monitors\r\n    # screenshots_all_monitor is iterable too\r\n    with ScreenshotOfAllMonitors(ascontiguousarray=False) as screenshots_all_monitor:\r\n        show_screenshot(\r\n            screenshots_all_monitor,\r\n            stop_at_frame=150,\r\n            quitkey=\"q\",\r\n            show_screenshot=True,\r\n        )\r\n\r\n    # from one monitor\r\n    # screenshots_monitor is iterable as well\r\n    with ScreenshotOfOneMonitor(\r\n        monitor=0, ascontiguousarray=False\r\n    ) as screenshots_monitor:\r\n        show_screenshot(\r\n            screenshots_monitor, stop_at_frame=150, quitkey=\"q\", show_screenshot=True\r\n        )\r\n    with ScreenshotOfRegion(\r\n        x0=0, y0=40, x1=800, y1=680, ascontiguousarray=False\r\n    ) as screenshots_region:\r\n        show_screenshot(\r\n            screenshots_region, stop_at_frame=150, quitkey=\"q\", show_screenshot=True\r\n        )\r\n\r\n```\r\n\r\n### Benchmark - MSS vs. fast-ctypes-screenshots\r\n\r\nBenchmark | FPS One Screen - with cv2.imshow - MSS | FPS One Screen - with cv2.imshow - fast_ctypes_screenshots | FPS One Screen - without cv2.imshow - MSS | FPS One Screen - without cv2.imshow - fast_ctypes_screenshots\r\n--------- | -------------------------------------- | -------------------------------------------------------- | ---------------------------------------- | --------------------------------------------------------------\r\n1 screen - 1920x1080 | 14.570637829934096 | 29.75346366655896 | 29.040460293245385 | 32.07449524721684\r\n2 screens - 3840x1080 | 10.885839644361466 | 18.843871526097328 | 17.19836897143781 | 24.268109622214084\r\nregion - 2800x960 | 13.54247110293269 | 28.722819983256283 | 21.342393892806598 | 29.528899151991656\r\n\r\n\r\n\r\n\r\n```python\r\n# MSS https://python-mss.readthedocs.io/ vs. fast_ctypes_screenshots\r\n\r\n\r\n# The code for the benchmark \r\n\r\nimport mss\r\n\r\nprint(\"\\n\\n-------------------------Benchmark - 1 screen - 1920x1080\")\r\nfps = 0\r\nlast_time = time()\r\n\r\nwith mss.mss() as sct:\r\n    for _ in range(150):\r\n        sct_img = sct.grab(sct.monitors[1])\r\n        img = np.array(sct_img)\r\n        cv2.imshow(\"test\", img)\r\n        fps += 1\r\n        if cv2.waitKey(25) & 0xFF == ord(\"q\"):\r\n            cv2.destroyAllWindows()\r\n            break\r\nprint(\r\n    f\"\\n\\n\\nFPS One Screen - with cv2.imshow - MSS: {fps / (time() - last_time)}\\n\"\r\n)\r\nprint(\"FPS One Screen - with cv2.imshow - \", end=\" \")\r\ncv2.destroyAllWindows()\r\n\r\nwith ScreenshotOfOneMonitor(\r\n    monitor=0, ascontiguousarray=False\r\n) as screenshots_monitor:\r\n    show_screenshot(\r\n        screenshots_monitor, stop_at_frame=150, quitkey=\"q\", show_screenshot=True\r\n    )\r\ncv2.destroyAllWindows()\r\n#########################################################\r\nfps = 0\r\nlast_time = time()\r\n\r\nwith mss.mss() as sct:\r\n    for _ in range(150):\r\n        sct_img = sct.grab(sct.monitors[1])\r\n        img = np.array(sct_img)\r\n        fps += 1\r\n\r\nprint(\r\n    f\"\\n\\n\\nFPS One Screen - without cv2.imshow - MSS: {fps / (time() - last_time)}\\n\"\r\n)\r\nprint(\"FPS One Screen - without cv2.imshow - \", end=\" \")\r\n\r\nwith ScreenshotOfOneMonitor(\r\n    monitor=0, ascontiguousarray=False\r\n) as screenshots_monitor:\r\n    show_screenshot(\r\n        screenshots_monitor, stop_at_frame=150, quitkey=\"q\", show_screenshot=False\r\n    )\r\ncv2.destroyAllWindows()\r\n#########################################################\r\nprint(\"\\n\\n-------------------------Benchmark - 2 screens - 3840x1080\")\r\nfps = 0\r\nlast_time = time()\r\n\r\nwith mss.mss() as sct:\r\n    for _ in range(100):\r\n        sct_img = sct.grab(sct.monitors[0])\r\n        img = np.array(sct_img)\r\n        cv2.imshow(\"test\", img)\r\n        fps += 1\r\n        if cv2.waitKey(25) & 0xFF == ord(\"q\"):\r\n            cv2.destroyAllWindows()\r\n            break\r\n\r\nprint(\r\n    f\"\\n\\n\\nFPS All screens - with cv2.imshow - MSS: {fps / (time() - last_time)}\\n\"\r\n)\r\ncv2.destroyAllWindows()\r\nprint(\"FPS All screens - with cv2.imshow - \", end=\" \")\r\nwith ScreenshotOfAllMonitors(ascontiguousarray=False) as screenshots_region:\r\n    show_screenshot(\r\n        screenshots_region, stop_at_frame=100, quitkey=\"q\", show_screenshot=True\r\n    )\r\ncv2.destroyAllWindows()\r\n\r\n#########################################################\r\nfps = 0\r\nlast_time = time()\r\nwith mss.mss() as sct:\r\n    for _ in range(100):\r\n        sct_img = sct.grab(sct.monitors[0])\r\n        img = np.array(sct_img)\r\n        fps += 1\r\nprint(\r\n    f\"\\n\\n\\nFPS All screens - without cv2.imshow - MSS: {fps / (time() - last_time)}\\n\"\r\n)\r\nprint(\"FPS All screens - without cv2.imshow - \", end=\" \")\r\nwith ScreenshotOfAllMonitors(ascontiguousarray=False) as screenshots_region:\r\n    show_screenshot(\r\n        screenshots_region, stop_at_frame=100, quitkey=\"q\", show_screenshot=False\r\n    )\r\n\r\n#########################################################\r\n\r\nprint(\"\\n\\n-------------------------Benchmark - region - 2800x960\")\r\n\r\nfps = 0\r\nlast_time = time()\r\nmonitor = {\"top\": 40, \"left\": 0, \"width\": 2800, \"height\": 960}\r\n\r\nwith mss.mss() as sct:\r\n    for _ in range(150):\r\n        img = np.array(sct.grab(monitor))\r\n        cv2.imshow(\"test\", img)\r\n\r\n        fps += 1\r\n        if cv2.waitKey(25) & 0xFF == ord(\"q\"):\r\n            cv2.destroyAllWindows()\r\n            break\r\n\r\nprint(f\"\\n\\n\\nFPS Region - with cv2.imshow - MSS: {fps / (time() - last_time)}\\n\")\r\nprint(\"FPS Region - with cv2.imshow - \", end=\" \")\r\ncv2.destroyAllWindows()\r\n\r\nwith ScreenshotOfRegion(\r\n    x0=0, y0=40, x1=2800, y1=1000, ascontiguousarray=False\r\n) as screenshots_region:\r\n    show_screenshot(\r\n        screenshots_region, stop_at_frame=150, quitkey=\"q\", show_screenshot=True\r\n    )\r\n\r\ncv2.destroyAllWindows()\r\n\r\n#########################################################\r\n\r\nfps = 0\r\nlast_time = time()\r\nmonitor = {\"top\": 40, \"left\": 0, \"width\": 2800, \"height\": 960}\r\n\r\nwith mss.mss() as sct:\r\n    for _ in range(150):\r\n        img = np.array(sct.grab(monitor))\r\n        fps += 1\r\n\r\nprint(\r\n    f\"\\n\\n\\nFPS Region - without cv2.imshow - MSS: {fps / (time() - last_time)}\\n\"\r\n)\r\nprint(\"FPS Region - without cv2.imshow: \", end=\" \")\r\nwith ScreenshotOfRegion(\r\n    x0=0, y0=40, x1=2800, y1=1000, ascontiguousarray=False\r\n) as screenshots_region:\r\n    show_screenshot(\r\n        screenshots_region, stop_at_frame=150, quitkey=\"q\", show_screenshot=False\r\n    )\r\n\r\n\r\n\r\n```\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Screenshots in record time - up to 2.5x faster than MSS (Multiple Screen Shots)",
    "version": "0.10",
    "project_urls": {
        "Homepage": "https://github.com/hansalemaos/fast_ctypes_screenshots"
    },
    "split_keywords": [
        "screenshots",
        "mss",
        "fast",
        "win32"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "67ab7df625106bca97845bcf94e0338b80cfb0c777fe6e01ec311b42745d101c",
                "md5": "4d9f3c0e9370b035caf71ff6c014eed9",
                "sha256": "fb7ee8c6ad7038c4429908dec470e1fffa831122d27d6d0362b2fda89b4a3f9d"
            },
            "downloads": -1,
            "filename": "fast_ctypes_screenshots-0.10-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "4d9f3c0e9370b035caf71ff6c014eed9",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 27212,
            "upload_time": "2023-05-19T14:26:30",
            "upload_time_iso_8601": "2023-05-19T14:26:30.033017Z",
            "url": "https://files.pythonhosted.org/packages/67/ab/7df625106bca97845bcf94e0338b80cfb0c777fe6e01ec311b42745d101c/fast_ctypes_screenshots-0.10-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "76134027a4ac1c190025d948a39d908268e8764e2c649758241b2754bffcf5bf",
                "md5": "8ad8280b673e178abc2e5d497529c398",
                "sha256": "a965fa25411b61f68e86a2772cd98b50fb74958599458e710861c4cc88dd52ae"
            },
            "downloads": -1,
            "filename": "fast_ctypes_screenshots-0.10.tar.gz",
            "has_sig": false,
            "md5_digest": "8ad8280b673e178abc2e5d497529c398",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 27169,
            "upload_time": "2023-05-19T14:26:32",
            "upload_time_iso_8601": "2023-05-19T14:26:32.880919Z",
            "url": "https://files.pythonhosted.org/packages/76/13/4027a4ac1c190025d948a39d908268e8764e2c649758241b2754bffcf5bf/fast_ctypes_screenshots-0.10.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-05-19 14:26:32",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "hansalemaos",
    "github_project": "fast_ctypes_screenshots",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [],
    "lcname": "fast-ctypes-screenshots"
}
        
Elapsed time: 0.69114s