HOOK函数应用(之键盘锁定)

 

          其实网上谈钩子(HOOK)函数的原理、应用已经很多拉。我对HOOK理解也是略知一、二,只是想写几句,自娱自乐,于是写了:

        目的:让键盘锁定一段时间,然后自动解锁。
  原理:利用全局钩子函数(键盘钩子)

1  创建动态连接库,代码:

ContractedBlock.gif ExpandedBlockStart.gif HookDll.cpp
None.gif//*****************************
None.gif//
    全局HOOK        
None.gif
//        UnReal@2005-12-29 
None.gif
//*****************************
None.gif
#include "stdafx.h"
None.gif#pragma data_seg(
"mydata"
None.gifHANDLE        g_hand 
= NULL;
None.gifHINSTANCE    g_hMod 
= NULL;
None.gifHHOOK        g_hKeyHook 
= NULL;
None.gif#pragma data_seg() 
None.gif
None.gifLRESULT CALLBACK KeyboardProc(
int code,
None.gif            WPARAM wParam,
None.gif            LPARAM lParam)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    
return 1;
ExpandedBlockEnd.gif}

None.gifBOOL APIENTRY DllMain( HANDLE hModule, 
None.gif                     DWORD ul_reason_for_call, 
None.gif                     LPVOID lpReserved)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    g_hMod 
= (HINSTANCE)hModule;
InBlock.gif    
return TRUE;
ExpandedBlockEnd.gif}

None.gif
void test()        //测试函数
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif   MessageBox(NULL,
"你的键盘将在3分钟之类无
InBlock.gif
                法进行输入,休息一下吧!",
InBlock.gif
              "UnReal友情提示",0);
ExpandedBlockEnd.gif}

None.gif
void SetHook(HANDLE hand)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    g_hand 
= hand;
InBlock.gif    g_hKeyHook 
= ::SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,g_hMod,0);
InBlock.gif    
ExpandedBlockEnd.gif}

None.gif
void UnSetHook()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    ::Sleep(
3*60*1000);
InBlock.gif    MessageBox(NULL,
InBlock.gif                  
"该工作拉  ^-^ ",
InBlock.gif                  
"UnReal友情提示",0);
InBlock.gif    ::UnhookWindowsHookEx(g_hHook);
ExpandedBlockEnd.gif}

2 创建调用程序,代码:
ContractedBlock.gif ExpandedBlockStart.gif System32.cpp
None.gif//*****************************
None.gif
//        HOOK调用程序          *
None.gif
//            UnReal@2005-12-29 *
None.gif
//*****************************
None.gif

None.gif#include 
"stdafx.h"
None.giftypedef 
void (*PFUNC)();
None.giftypedef 
void (*PFUNCSET)(HANDLE hand);
None.giftypedef 
void (*PFUNCUNSET)();
None.gif
None.gifLRESULT CALLBACK MouseProc(
int nCode,
None.gif               WPARAM wParam,
None.gif                      LPARAM lParam)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    
return 1;
ExpandedBlockEnd.gif}

None.gif
int APIENTRY WinMain(HINSTANCE hInstance,
None.gif                     HINSTANCE hPrevInstance,
None.gif                     LPSTR     lpCmdLine,
None.gif                     
int       nCmdShow)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    HMODULE hMod 
= LoadLibrary("HookDll");
InBlock.gif    
if(hMod!=NULL)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        PFUNCSET pFuncSet 
= (PFUNCSET)GetProcAddress(hMod,"SetHook");
InBlock.gif        
if(pFuncSet!=NULL)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            pFuncSet(hInstance);
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        PFUNC pFunc 
= (PFUNC)GetProcAddress(hMod,"test");
InBlock.gif        
if(pFunc!=NULL)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            pFunc();
ExpandedSubBlockEnd.gif        }

InBlock.gif        PFUNCUNSET pFuncUnSet 
= (PFUNCUNSET)GetProcAddress(hMod,"UnSetHook");
InBlock.gif        
if(pFuncUnSet != NULL)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            pFuncUnSet();
ExpandedSubBlockEnd.gif        }

InBlock.gif        FreeLibrary(hMod);
ExpandedSubBlockEnd.gif    }

InBlock.gif        
return 0;
ExpandedBlockEnd.gif}

3   将第一步生成的HookDll.dll 复制到装载dll的可执行文件目录,运行exe文件。
  msdn上查查函数SetWindowsHookEx(int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId);设置idHook可以
        编写不同的钩子函数,有兴趣的朋友自己研究研究。
  呵呵^-^  上班时间,空了再写,再完善……

转载于:https://www.cnblogs.com/unreal/articles/315432.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值