b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

使用键盘挂钩开发按键发音程序

电脑杂谈  发布时间:2020-08-20 12:11:21  来源:网络整理

键盘钩子下载_鼠标键盘钩子_windows7 键盘钩子

使用键盘挂钩开发按键发音程序1.前言一天,我看到妈妈在用电脑练习打字,并经常低头看着键盘. 我以为: 如果键盘能发声,就方便她发展“;盲目打字”;这是个好习惯吗?只是不想做,只是开始采取行动(您不必急于获得工具箱^ _ ^)...按键声音的关键是让程序知道当前键盘. 当然,您自己的程序不是问题,那么如何知道其他程序当前按下了哪个键呢?使用键盘挂钩解决问题. 2. HOOK WINDOWS的基本原理将在调用挂钩的回调函数时首先在函数链的开头调用该函数. 只要将回调函数放在链的最前面,该回调函数将首先被调用. 因此,如何将我们自己的回调函数放在函数链的开头,函数SetWindowsHookEx()实现了此函数. 让我们首先看一下SetWindowsHookEx函数的原型: HHOOK SetWindowsHookEx(int idHook,HOOKPROC lpfn,HINSTANCE hMod,DWORD dwThreadId);第一个参数: 指定挂钩的类型,有十多种WH_MOUSE,WH_KEYBOARD(有关详细信息,请参见MSDN). 第二个参数: 标识挂钩函数的入口地址. 第三个参数: 挂钩函数所在模块的句柄;第四个参数: 与挂钩相关的函数的ID,用于指定您希望挂钩挂接的线程. 为0时,将拦截整个系统. 新闻. 要注意的另一件事是,为了捕获所有事件,应该将hook函数放置在动态链接库DLL中. 第三,关于该理论的具体实现,我不会说太多. 运行VC ++ 6.0,创建一个新的MFC AppWizard(dll)项目,将其命名为Hook,并使用默认选项创建DLL类型,即使用共享的MFC DLL,单击Finish开始编写代码: (1)定义全局函数在Hook.h

鼠标键盘钩子_键盘钩子下载_windows7 键盘钩子

BOOL installhook(); //挂钩安装函数LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam); //挂钩函数(2)在Hook.cpp文件中的#endif下添加定义全局变量挂钩的代码: static HHOOK hkb = NULL ; HINSTANCE欣斯; //挂钩函数所在模块的句柄(3)添加核心代码BOOL installhook(){hkb = SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,hins,0); return TRUE;}一个参数指定了挂钩的类型,因为我们仅使用键盘操作,所以将其设置为WH_KEYBOARD;第二个参数指定钩子函数的输入地址为KeyboardProc,当钩子钩住任何消息时即调用该函数,即系统的哪个窗口有键盘输入将立即引起KeyboardProc动作;第三个参数是挂钩函数所在模块的句柄;最后一个参数是挂钩相关函数的ID,用于指定要挂钩的线程,当该线程为0时,拦截整个系统的消息;现在,开始定义按下键盘上的键时程序将执行的操作〜KeyboardProc操作: 调用LALL回调键盘Proc(int nCode,WPARAM wParam,LPARAM lParam){if((((DWORD)lParam&; 0x40000000)&;&;; (HC_ACTION == nCode)){switch(wParam)//键盘按钮标识{情况'1': sndPlaySound(“; 1.wav”;,SND _

鼠标键盘钩子_windows7 键盘钩子_键盘钩子下载

ASYNC);中断; //按下数字键1时,情况为'2': sndPlaySound(“; 2.wav”;,SND_ASYNC); break; case'3': sndPlaySound(“; 3.wav”;,SND_ASYNC); break;情况'4': sndPlaySound(“; 4.wav”;,SND_ASYNC); break; .... case'A': sndPlaySound(“; a.wav”;,SND_ASYNC); break; //当按下字母键A时,情况为'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驱动器,它定义为“; C: \\ a.wav”;);第二个参数定义了播放模式,SND_ASYNC模式可以及时释放正在播放的声音文件,立即停止当前的声音播放并切换到新的声音,这样当我们继续按键时就不会有阻塞感要执行sndPlaySound函数,必须在Hook.cpp文件的标题中添加: #include“; mmsystem.h”;并在VC ++菜单上单击“项目”-“设置”以输入Lin

windows7 键盘钩子_键盘钩子下载_鼠标键盘钩子

k属性页,在L object / library模块下输入: 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的静态HINSTANCE hinstDLL; typedef BOOL(CALLBACK * inshook)(); inshook instkbhook; if(hinstDLL = LoadLibrary((LPCTSTR)“; Hook.dll”;)){instkbhook =(inshook)GetProcAddress(hinstDLL,“; installhook”;); instkbhook();}否则{MessageBox(“;在当前目录中找不到Hook.dll文件,并且程序初始化失败”;); OnOK();}将已编译的KeySound.exe和Hook.dll放在同一目录中

键盘钩子下载_鼠标键盘钩子_windows7 键盘钩子

,定义声音文件,运行KeySound.exe并打开记事本或写字板,并体验系统实时读取您按下的每个键的乐趣. ^-^必须说明的一件事,标准键盘有101个键. 要发出声音的键数,必须在上面的KeyboardProc操作中定义多少键. 常用的10个数字键和26个英文字母不会给您带来太大的麻烦,只要相应的'A'对应于A键,而'1'对应于1键,但是如果您想要更多的键要使用各种特色音乐,您可能会遇到一些键盘编码方面的麻烦,例如ESC键您不能简单地使用“ ESC”来做到这一点,而必须使用VK_ESCAPE,例如,Alt键必须是用VK_MENU定义. 如果没有键盘代码表,那将是很头疼的事情. 在这里,我介绍一个程序来告诉您键盘键. 名称方法: 为项目添加PreTranslateMessage映射,添加以下代码: char KeyName [50]; ZeroMemory(KeyName,50); if(pMsg->; message == WM_KEYDOWN){GetKeyNameText(pMsg->; lParam,KeyName,50); MessageBox(KeyName);}然后,当程序窗口显示在您面前时,如果按下某个键,则会弹出一条消息以显示该键的名称,然后将其用“括起来,例如逗号. 是','And'. ',这很简单:)到目前为止,我们已经完成了按键发音程序的编译,通过更改声音文件的名称而不更改程序本身,更改键的目的是: 可以实现按声音,但是很可惜,声音无法更改,从C驱动器更改为D驱动器时,文件在硬盘中的位置也无法播放程序. 声音文件?您可以使用API​​函数GetModuleFileName来获取程序所在的目录,具体实现方法如下: (1)在Hook.h中添加以下public ::

BOOL InitInstance(); //初始化函数(2)在Hook.cpp的#endif下添加定义全局变量的代码: char szBuf [256];字符* p; CString msg; (3)在Hook.cpp中的适当位置添加: BOOL CHookApp :: InitInstance(){hins = AfxGetInstanceHandle(); GetModuleFileName(AfxGetInstanceHandle(),szBuf,sizeof(szBuf)); p = szBuf; while(strchr(p,'\\')){p = strchr(p,'\\'); p ++;} * p ='\ 0'; msg = szBuf;返回TRUE;}(4)创建一个新文件夹并将其命名为Sound; (5)更改声音文件物理位置定义方法的情况'1': sndPlaySound(msg +“; sound \\ 1.wav”;,SND_ASYNC); break; msg是获取程序的当前目录,加上其后的代码意味着可以在当前目录下的Sound目录中播放1.wav文件,该文件将声音文件的绝对路径更改为灵活的相对路径. 您只需要将KeySound.exe,Hook.dll和Sound文件夹放在同一文件夹中,然后只移动整个文件即可. 该文件夹可以实现声音文件的任意移动. 调试时需要注意: 将Hook.dll,Sound目录放在KeySound.exe的执行目录下. 如果在编译和链接时出现诸如无法解析的外部符号__imp__sndPlaySoundA @ 8之类的消息,请在项目设置中添加Winmm.lib.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-302984-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...