首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 底层DLL屏蔽任意键
【标  题】:底层DLL屏蔽任意键
【关键字】:DLL
【来  源】:http://blog.csdn.net/vbanglev/archive/2007/02/20/1512082.aspx

底层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);
};

 

VC文件扩展名解读大全 (zz)转:【上一篇】
algorithm 修改性的序列操作源码:【下一篇】
【相关文章】
  • 几种得到kernel32.dll地址的方法(基本就是抄的)
  • MFC DLL更名输出问题
  • 使用VB生成没有限制的函数DLL
  • 利用VC和ADO接口编写一个dll模块实现对数据库数据的处理
  • 如何用DLL最简单地保护您的工程代码
  • 如何生成代理/存根dll
  • VC调用Delphi写的dll的一个问题的处理
  • Rundll32使用技巧 使用Shell打开选择文件对话框以及其它
  • 由于dll导致的奇异CRASH
  • spoolsvv.exe,cmdbcs.exe,WINLOGON.EXE,Svchost.dll威金
  • 【随机文章】
  • 小心!“禁”入存储误区
  • 编程经典好书分类
  • Ruby学习之路——环境搭配
  • 第十二课 Linux进程查看
  • 让PXE无盘工作站使用固定的IP地址
  • UW-IMAP邮箱名称解析溢出漏洞
  • C语言参考手册(1)
  • (C#)Windows Shell 编程系列1 - 基础,浏览一个文件夹
  • Linux系统用户账号的管理
  • 设计模式----Proxy(代理)模式
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.