底层DLL屏蔽任意键

// keyboard.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "keyboard.h"
#include "stdlib.h"
#include "winuser.h" //定义了PKBDLLHOOKSTRUCT

#pragma data_seg (".mydata")
LPDWORD keys=NULL; //数组的指针
int len=0; //个数
BOOL diskeyboard=FALSE; //是否屏蔽整个键盘
HHOOK hook=NULL; //钩子句柄
HINSTANCE hinstance; //模块句柄
PKBDLLHOOKSTRUCT pstruct;
#pragma data_seg ()
#pragma comment(linker, "/SECTION:.mydata,RWS") // 告诉链接器:建立数据共享段

BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
      )
{
 hinstance=(HINSTANCE)hModule;
 switch(ul_reason_for_call)
 {
 case DLL_PROCESS_DETACH:
  if (hook!=NULL)
  {
   delete keys;
   UnhookWindowsHookEx(hook);
  }
 }
    return TRUE;
}

LRESULT CALLBACK keyproc(int ncode,WPARAM wparam,LPARAM lparam)
{
 if (ncode==HC_ACTION)
 {
  if (diskeyboard==TRUE)
  {
   return TRUE;
  }
  pstruct=(KBDLLHOOKSTRUCT*)lparam;
  for (int i=0;i<len;i++)
  {
   if (pstruct->vkCode==keys[i])
   {
    return TRUE;
   }
  }
 }
 return CallNextHookEx(hook,ncode,wparam,lparam);
}

BOOL diskeys(LPDWORD lkeys,int llen,BOOL ldisblekeyboard/* =FALSE */)
{
 //DWORD kkeys[]={'J',VK_LWIN,VK_F4,VK_CONTROL};调用方法
 if (hook!=NULL)
 {
  return FALSE;
 }
 keys=(LPDWORD)malloc(sizeof(DWORD)*llen);
 for (int i=0;i<llen;i++)
 {
  keys[i]=*lkeys++;
 }
 len=llen;
 diskeyboard=ldisblekeyboard;
 hook=SetWindowsHookEx(WH_KEYBOARD_LL,keyproc,hinstance,NULL);
 return TRUE;
}
BOOL stophook()
{
 if (hook!=NULL)
 {
  UnhookWindowsHookEx(hook);
 }
 return TRUE;
}

StdAfx.h中添加

#define _WIN32_WINNT 0X0400   //win2000或以后版本

keyboard.h中负责输出函数

extern "C"
{
__declspec(dllexport) BOOL stophook();
__declspec(dllexport) BOOL diskeys(LPDWORD lkeys,int llen,BOOL ldisblekeyboard=FALSE);
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值