[C/C++] 禁用鼠标键盘

2014/12/10 C++
  • 附上地址

       源代码: http://yunpan.cn/cfm9CJW2uNb6q  提取码 9857

       运行的时候,会弹出”hello,leon”.

       此功能用低级键盘钩子和低级鼠标钩子实现

  • 用到的函数接口:( SetWindowsHookEx)

/****************/

SetWindowsHookEx:     (Windows消息处理机制的一个平台)

      声明:

HHOOK WINAPISetWindowsHookEx(  
    __in int idHook, \\钩子类型  
    __in HOOKPROC lpfn, \\回调函数地址  
    __in HINSTANCE hMod, \\实例句柄  
    __in DWORD dwThreadId); \\线程ID  
SetWindowsHookEx  

参数一:钩子的类型

参数二:回调函数指针,处理消息

参数三:程序运行的实例句柄。

参数四:范围,0 表示全局钩子,普通的全局钩子需要写入在 dll 里面。

/****************/

如需禁用鼠标和键盘,只需要在对应的回调函数中返回ture,即如源代码中的LowLevelKeyboardProcAll和LowLevelMouseProcAll函数中return true;

  • 后记:

A

之所以使用intWINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

                    PSTR szCmdLine, intiCmdShow){}

而不是通常写C/C++程序那样的int main(){}

因为前者可以屏蔽掉那个dos黑窗口,这样有利于写一些小病毒成都避免被用户发现.(用codeblocks编译貌似不能屏蔽掉那个dos黑窗口~挣扎了好久放弃了.换个编译器就解决的问题咯)

B

可以用C/C++做一个程序屏蔽部分按键或者获取键盘和鼠标的输入,例如:

/*  
LRESULT CALLBACK LowLevelKeyboardProc(intnCode, WPARAM wParam, LPARAM lParam)  
{  
       PKBDLLHOOKSTRUCTp = (PKBDLLHOOKSTRUCT) lParam;  
       if(nCode == HC_ACTION)  
       {  
              if( (p->vkCode == VK_LWIN) || (p->vkCode == VK_RWIN) ||                                   // 屏蔽左win  
                     (p->vkCode == VK_TAB && (p->flags & LLKHF_ALTDOWN) != 0) ||  
                     (p->vkCode == VK_ESCAPE && (p->flags & LLKHF_ALTDOWN) != 0) || ))            //屏蔽ALT+Tab  
                     returnTRUE ;  
       }  
       returnCallNextHookEx ( hLLKeyboard, nCode, wParam, lParam ) ;  
}  
*/  

当然,还可以修改为记录用户的按键!