WEB开发网
开发学院软件开发VC 利用键盘钩子开发按键发音程序 阅读

利用键盘钩子开发按键发音程序

 2010-01-09 20:31:49 来源:WEB开发网   
核心提示:现在,就开始定义当键盘上的键按下时程序要做什么了~KeyboardProc动作:LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam){if(((DWORD)lParam&0x40000000) && (HC_ACTION==nCode)

现在,就开始定义当键盘上的键按下时程序要做什么了~

KeyboardProc动作:

LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
  if(((DWORD)lParam&0x40000000) && (HC_ACTION==nCode))
  {
    switch(wParam) //键盘按键标识
     {
    case '1':sndPlaySound("1.wav",SND_ASYNC);break; //当 数字键1被按下
     case '2':sndPlaySound ("2.wav",SND_ASYNC);break;
    case '3':sndPlaySound ("3.wav",SND_ASYNC);break;
    case '4':sndPlaySound ("4.wav",SND_ASYNC);break;
    ....
    case 'A':sndPlaySound("a.wav",SND_ASYNC);break; //当字母键A被按下
      case 'B':sndPlaySound("b.wav",SND_ASYNC);break;
    case 'C':sndPlaySound("c.wav",SND_ASYNC);break;
    case 'D':sndPlaySound("d.wav",SND_ASYNC);break;
    ....
     }
   }
   LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam, lParam );
   return RetVal;
}

上面的代码中我们用播放声音做为按键被按下后的动作,API 函数sndPlaySound的第一个参数定义的声音文件的绝对路径(比如要播放C盘下的a.wav,就定义成 "C:\\a.wav");第二参数定义播放模式,SND_ASYNC模式可以及时地释放正在播放的声音文件 ,立刻停止当前声音的播放转去播放新的声音,这样在我们连续击键时就不会有阻塞感了.为了执行 sndPlaySound函数,必须在Hook.cpp的文件头加上:

#include "mmsystem.h"

并且点击VC++菜单上的“工程”-“设置”进 入Link属性页,在L对象/库模块下输入:winmm.lib后确定即可.

(4)添加输出标识

在 Hook.def的末尾添加

installhook
KeyboardProc

短短的四步,键盘钩子的制作算是完成了,编译生成后的DLL文件就可以自由的用别的程序来调用了.

在程序中如何调用DLL呢?那就简单了.再用VC++6.0新建一个MFC AppWizard(exe)工程,命名为KeySound,点击"确定 "后选择程序类型为对话框,直接点击确定即可.

在KeySoundDlg.cpp文件中的OnInitDialog()初始化函数的CDialog::OnInitDialog();下面添加:

//阻止程序反复驻留内存,也为了防止有两个程序同时读取DLL而发生错误.

CreateMutex(NULL, FALSE, "KeySound");
if(GetLastError()==ERROR_ALREADY_EXISTS)
  OnOK();
//读取DLL
static HINSTANCE hinstDLL;
typedef BOOL (CALLBACK *inshook)();
inshook instkbhook;
if(hinstDLL=LoadLibrary((LPCTSTR)"Hook.dll"))
{
  instkbhook=(inshook)GetProcAddress(hinstDLL,"installhook");
   instkbhook();
}
else
{
  MessageBox("当前目录找不到Hook.dll文件 ,程序初始化失败");
  OnOK();
}

将编译生成后的KeySound.exe和 Hook.dll放在同一目录下,定义好声音文件,运行KeySound.exe后打开记事本或写字板,体验一下系统为您即时快速地朗读您按下的每一个键的快感吧^-^

Tags:利用 键盘 钩子

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接