编译成dll正常,dll的工程主要函数如下BOOL __declspec(dllexport)__stdcall installHook()
{
hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)keyboardProc,hins,0);
return TRUE;
}
LRESULT __declspec(dllexport)__stdcall CALLBACK keyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(((DWORD)lParam&0x40000000)&&(HC_ACTION==nCode))
{
switch(wParam) {
case 'a':
sndPlaySound("1.wav",SND_ASYNC);
break;
case 'b' :
sndPlaySound("2.wav",SND_ASYNC);
break;
default:
sndPlaySound("3.wav",SND_ASYNC);
}
}
LRESULT Retval=CallNextHookEx(hkb,nCode,wParam,lParam);
return Retval;
}在对话框initialize中
CreateMutex(NULL,FALSE,"KeyHook");
if(GetLastError()==ERROR_ALREADY_EXISTS)
return false;
static HINSTANCE hInstancedll;
typedef BOOL(CALLBACK *inshook)();
inshook instkhook;
if(hInstancedll=LoadLibrary((LPCSTR)"hookkeysound.dll"))
{
instkhook=(inshook)GetProcAddress(hInstancedll,"installHook");
instkhook();
}
else
{
AfxMessageBox("当前目录找不到hookkeysound.dll文件,程序初始化失败");
}把dll和1.wav,2.wav,3.wav考入生成的exe目录
按各个健都没有声音,怎么检测毛病在哪里呀???
谢谢
解决方案 »
- 混合高斯背景建模
- 硬件厂商提供的dll文件调用函数时出现非法页面错误,请高手帮助,急
- 在FormView中摆了些控件,其余地方为绘图区,有没有像Delphi中PaintBox的控件,往它上边画,还是直接往FormView上画?
- 文件技巧问题,多谢各位大侠了?
- 关于Dll导出doc/view类型的程序
- vs2008,directshow,opencv2.1获取摄像头问题
- vc中怎样将几个字符串纵向输出!!! 在线等待!!!
- 菜鸟问题,关于caption
- 在对话框中自建的控件如何设置其tab顺序?
- 请问怎样在嵌入网页中的ActiveXForm中弹出另一个窗口????请高手回答!!!
- 我是菜鸟,高分求救??
- vc7中用chtmleditview不能打开asp文件,怎么办?
http://www.vckbase.com/document/viewdoc.asp?id=271
GetModuleFileName(AfxGetInstanceHandle( ),szBuf,sizeof(szBuf));
p = szBuf;
while(strchr(p,'\\'))
{
p = strchr(p,'\\');
p++;
}
*p = '\0';
msg=szBuf;
//then you should change your code to this
if(((DWORD)lParam&0x40000000)&&(HC_ACTION==nCode))
{
switch(wParam) {
case 'a':
sndPlaySound(msg+"1.wav",SND_ASYNC);
break;
case 'b' :
sndPlaySound(msg+"2.wav",SND_ASYNC);
break;
default:
sndPlaySound("3.wav",SND_ASYNC);
}
}
我的已经把*.wav放在exe的目录,不用这个吧??
GetModuleFileName(AfxGetInstanceHandle( ),szBuf,sizeof(szBuf));
p = szBuf;
while(strchr(p,'\\'))
{
p = strchr(p,'\\');
p++;
}
*p = '\0';
msg=szBuf;
然后
他再说GetModuleFileName(AfxGetInstanceHandle( ),szBuf,sizeof(szBuf));
的,所以,在我的程序,还没必要用GetModuleFileName 把??
,我只是想式一下钩子的威力,结果搞了一晚
1.replace sndPlaySound("c:\\1.wav",SND_ASYNC) with AfxMessgageBox("test");...
2.write a test program (such as MFC Dialog program)
then write :
sndPlaySound("c:\\1.wav",SND_ASYNC); check whether it have sound.
可是核心代码一样的阿
static HINSTANCE hinstDLL;
typedef BOOL (CALLBACK *inshook)();
inshook instkbhook;
if(hinstDLL=LoadLibrary((LPCTSTR)"hookkeyboard.dll"))
{
instkbhook=(inshook)GetProcAddress(hinstDLL, "installhook");
instkbhook();
}
结果还是一样
so add
hins=AfxGetInstanceHandle();
2.in exe,your code have error.so i changed
if(hinstDLL=LoadLibrary((LPCTSTR)"hookkeysound.dll"))
{
instkbhook=(inshook)GetProcAddress(hinstDLL, "installHook");
instkbhook();
}
hins把?
hins把?想不到还有这个函数的,太谢谢了,给分,
咱交个朋友吧:)
BOOL CHookApp::InitInstance()
{
hins = AfxGetInstanceHandle();
}你先确认钩子是否已安装。
获得module路径函数是一定要使用的。