Python 键盘记录和屏幕截图程序:连续输入 '*' 进行截图
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()
程序说明
- 程序依赖
pyHook和pythoncom库,请确保已安装这两个库。 - 程序运行时会在程序所在目录下创建一个名为 'screenshot' 的文件夹,用于存放截图文件。
- 当用户连续输入 '*' 时,程序会自动截取当前屏幕并保存为 'screenshot_时间戳.bmp' 的图片文件。
- 用户可以通过按下 'Esc' 键退出程序。
程序使用方法
- 将代码保存为 '.py' 文件,例如 'screenshot.py'。
- 运行程序:在命令行中输入 'python screenshot.py' 或双击 '.py' 文件。
- 程序运行后,在键盘上连续输入 '*' 即可进行截图。
- 按下 'Esc' 键退出程序。
注意
- 本程序仅供学习和研究使用,请勿用于任何非法用途。
- 程序可能存在一些安全风险,请谨慎使用。
- 程序运行时可能需要管理员权限,请根据实际情况进行操作。
原文地址: https://www.cveoy.top/t/topic/nAOV 著作权归作者所有。请勿转载和采集!