首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

居然有个程序可以避开键盘HOOK? 怎么做到

2012-01-28 
居然有个程序可以避开键盘HOOK? 如何做到?以下是标准的键盘HOOK处理过程,基本可以截获所有的键盘动作,但我

居然有个程序可以避开键盘HOOK? 如何做到?
以下是标准的键盘HOOK   处理过程,基本可以截获所有的键盘动作,但我发现居然有个程序的键盘消息不能截获,请教大家它是如何做到的?
#include   "stdafx.h "
#include   "hodll.h "
#include   "mmsystem.h "

#ifdef   _DEBUG
#define   new   DEBUG_NEW
#undef   THIS_FILE
static   char   THIS_FILE[]   =   __FILE__;
#endif

#pragma   data_seg( ".SHARDAT ")
static   HHOOK   hkb=NULL;
#pragma   data_seg()
HINSTANCE   hins;

char   szBuf[256];
char   *p;
CString   msg;
////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(CHodllApp,   CWinApp)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
LRESULT   __declspec(dllexport)__stdcall     CALLBACK   KeyboardProc(int   nCode,WPARAM   wParam,LPARAM   lParam)
{
if(((DWORD)lParam&0x40000000)   &&   (HC_ACTION==nCode))
{
switch(wParam)
{
case   'F ':sndPlaySound(msg+ "sound\\f.wav ",SND_ASYNC);break;
...       }  

LRESULT   RetVal   =   CallNextHookEx(   hkb,   nCode,   wParam,   lParam   );
return     RetVal;
}
BOOL   __declspec(dllexport)__stdcall   installhook()
{
hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,hins,0);
return   TRUE;
}
BOOL   __declspec(dllexport)     UnHook()
{      
BOOL   unhooked   =   UnhookWindowsHookEx(hkb);
return   unhooked;
}  
BOOL   CHodllApp::InitInstance   ()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
hins=AfxGetInstanceHandle();

GetModuleFileName(AfxGetInstanceHandle(   ),szBuf,sizeof(szBuf));
        p   =   szBuf;
        while(strchr(p, '\\ '))  
{  
      p   =   strchr(p, '\\ ');  
      p++;  
}
        *p   =   '\0 ';  
        msg=szBuf;
return   TRUE;
}
BOOL   CHodllApp::ExitInstance   ()
{
return   TRUE;
}
CHodllApp::CHodllApp()
{
}
CHodllApp   theApp;


[解决办法]
通常是
键盘驱动-> 操作系统-> 程序,加的hook通常在操作系统处理的里面
但QQ 是
键盘驱动-> 程序,不过操作系统,所以常规的办法是不可以的

热点排行