Python 键盘记录和屏幕截图程序:连续输入 '*' 进行截图

本程序利用 Python 实现键盘记录和屏幕截图功能,当用户连续输入 '*' 时,程序会自动截取当前屏幕并保存为图片文件。用户可以通过按下 'Esc' 键退出程序。

代码实现

# -*- coding: utf-8 -*-
import os
import time
import win32gui
import win32ui
import win32con
import win32api
import pyHook
import pythoncom


def get_screen_size():
    # 获取显示器尺寸
    width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)
    height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)
    return width, height


def get_window_rect(hwnd):
    # 获取窗口位置和大小
    rect = win32gui.GetWindowRect(hwnd)
    left, top, right, bottom = rect
    width = right - left
    height = bottom - top
    return left, top, width, height


def get_window_dc(hwnd):
    # 获取窗口设备描述表
    hdc_window = win32gui.GetWindowDC(hwnd)
    hdc_mem = win32ui.CreateDCFromHandle(hdc_window)
    return hdc_mem


def get_bitmap(hdc, width, height):
    # 获取位图对象
    bitmap = win32ui.CreateBitmap()
    bitmap.CreateCompatibleBitmap(hdc, width, height)
    return bitmap


def save_bitmap(bitmap, filename):
    # 保存位图到文件
    bitmap.SaveBitmapFile(bitmap.GetBitmapBits(), bitmap.GetInfo(), filename)


def get_active_window():
    # 获取当前活动窗口句柄
    hwnd = win32gui.GetForegroundWindow()
    if hwnd == 0:
        return None
    class_name = win32gui.GetClassName(hwnd)
    if class_name == 'Progman' or class_name == 'WorkerW':
        # 桌面背景窗口
        hwnd = win32gui.FindWindowEx(0, hwnd, 'SHELLDLL_DefView', None)
        hwnd = win32gui.FindWindowEx(0, hwnd, 'SysListView32', None)
    # print('Active window: ', hwnd, win32gui.GetWindowText(hwnd))
    return hwnd


def screen_shot():
    # 截取屏幕
    hwnd = get_active_window()
    if hwnd is None:
        return None
    left, top, width, height = get_window_rect(hwnd)
    hdc_screen = get_window_dc(0)
    hdc_window = get_window_dc(hwnd)
    hdc_mem = get_window_dc(0)
    bitmap = get_bitmap(hdc_mem, width, height)
    hdc_mem.SelectObject(bitmap)
    hdc_mem.BitBlt((0, 0), (width, height), hdc_window, (0, 0), win32con.SRCCOPY)
    hdc_mem.BitBlt((left, top), (width, height), hdc_screen, (0, 0), win32con.SRCCOPY)
    filename = 'screenshot/screenshot_%d.bmp' % int(time.time())
    save_bitmap(bitmap, filename)
    print('截图已保存: ', filename)
    hdc_mem.DeleteDC()
    win32gui.DeleteObject(bitmap.GetHandle())
    return filename


def on_key_press(event):
    # 键盘事件处理函数
    if event.Key == '*':
        screen_shot()
    elif event.Key == 'Escape':
        # 退出程序
        print('程序已退出')
        exit()
    return True


def init():
    # 初始化程序
    if not os.path.exists('screenshot'):
        os.mkdir('screenshot')
    # 创建键盘钩子
    hook_manager = pyHook.HookManager()
    hook_manager.KeyDown = on_key_press
    hook_manager.HookKeyboard()
    # 进入消息循环
    pythoncom.PumpMessages()


if __name__ == '__main__':
    init()

程序说明

  1. 程序依赖 pyHook 和 pythoncom 库,请确保已安装这两个库。
  2. 程序运行时会在程序所在目录下创建一个名为 'screenshot' 的文件夹,用于存放截图文件。
  3. 当用户连续输入 '*' 时,程序会自动截取当前屏幕并保存为 'screenshot_时间戳.bmp' 的图片文件。
  4. 用户可以通过按下 'Esc' 键退出程序。

程序使用方法

  1. 将代码保存为 '.py' 文件,例如 'screenshot.py'。
  2. 运行程序:在命令行中输入 'python screenshot.py' 或双击 '.py' 文件。
  3. 程序运行后,在键盘上连续输入 '*' 即可进行截图。
  4. 按下 'Esc' 键退出程序。

注意

  • 本程序仅供学习和研究使用,请勿用于任何非法用途。
  • 程序可能存在一些安全风险,请谨慎使用。
  • 程序运行时可能需要管理员权限,请根据实际情况进行操作。

原文地址: https://www.cveoy.top/t/topic/nAOV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录