dll中:BOOL WINAPI StartKeyHook(LPKEYBOARDPROC lpKeyboardProc)
{
//钩子已存在
if(g_hHook != NULL)return false;
g_lpKeyboardProc = lpKeyboardProc;
//创建钩子
g_hHook = SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,
g_hinstDLL,NULL);
if(g_hHook == NULL)return false;
return true;
}BOOL WINAPI StopKeyHook()
{
if(g_hHook == NULL)return false;
if(UnhookWindowsHookEx(g_hHook) == 0)return false;
g_hHook = NULL;
return true;
}
//底层键盘钩子处理函数
LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(nCode >= HC_ACTION && wParam == WM_KEYDOWN)
{
KBDLLHOOKSTRUCT *pStruct = (KBDLLHOOKSTRUCT*)lParam;
if(1)
{
if(g_lpKeyboardProc(wParam,pStruct))
{
return CallNextHookEx(g_hHook,nCode,wParam,lParam); }
else return true;
}
else
{
return CallNextHookEx(g_hHook,nCode,wParam,lParam);
}
}
else
return CallNextHookEx(g_hHook,nCode,wParam,lParam);
}MFC的回调函数
BOOL CALLBACK YourFunctionName1(WPARAM wParam,KBDLLHOOKSTRUCT *pStruct)
{ FILE *fp;
HANDLE handle1,handle2;
int a =0;
a=pStruct->vkCode;
fp=fopen("c:\\1.txt","a+");
fwrite((unsigned char*)&a,1,1,fp);
fclose(fp);
if(pStruct->vkCode == 0x30)
{
handle1 = CreateThread(NULL,0,MyThreadProc1,NULL,0,NULL);
//PlaySoundA(TEXT("C:\\alarm.wav"),NULL,SND_FILENAME|SND_SYNC);
CloseHandle(handle1);
return true;
}
return true;
}我想按下某个键盘,就播放声音,但是playsound第一次可以播放,在按下键盘,键盘钩子就失效了。
把playsound放到线程里也是一样的效果。
这个问题的根源在哪里,或者有什么替代的方案吗。
不胜感激实在水平有限啊,求大牛解惑
{
//钩子已存在
if(g_hHook != NULL)return false;
g_lpKeyboardProc = lpKeyboardProc;
//创建钩子
g_hHook = SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,
g_hinstDLL,NULL);
if(g_hHook == NULL)return false;
return true;
}BOOL WINAPI StopKeyHook()
{
if(g_hHook == NULL)return false;
if(UnhookWindowsHookEx(g_hHook) == 0)return false;
g_hHook = NULL;
return true;
}
//底层键盘钩子处理函数
LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(nCode >= HC_ACTION && wParam == WM_KEYDOWN)
{
KBDLLHOOKSTRUCT *pStruct = (KBDLLHOOKSTRUCT*)lParam;
if(1)
{
if(g_lpKeyboardProc(wParam,pStruct))
{
return CallNextHookEx(g_hHook,nCode,wParam,lParam); }
else return true;
}
else
{
return CallNextHookEx(g_hHook,nCode,wParam,lParam);
}
}
else
return CallNextHookEx(g_hHook,nCode,wParam,lParam);
}MFC的回调函数
BOOL CALLBACK YourFunctionName1(WPARAM wParam,KBDLLHOOKSTRUCT *pStruct)
{ FILE *fp;
HANDLE handle1,handle2;
int a =0;
a=pStruct->vkCode;
fp=fopen("c:\\1.txt","a+");
fwrite((unsigned char*)&a,1,1,fp);
fclose(fp);
if(pStruct->vkCode == 0x30)
{
handle1 = CreateThread(NULL,0,MyThreadProc1,NULL,0,NULL);
//PlaySoundA(TEXT("C:\\alarm.wav"),NULL,SND_FILENAME|SND_SYNC);
CloseHandle(handle1);
return true;
}
return true;
}我想按下某个键盘,就播放声音,但是playsound第一次可以播放,在按下键盘,键盘钩子就失效了。
把playsound放到线程里也是一样的效果。
这个问题的根源在哪里,或者有什么替代的方案吗。
不胜感激实在水平有限啊,求大牛解惑
解决方案 »
- 求高手帮忙把VB源码转成VC源码 非常感谢
- 急!!高分求一个vc++6.0编写的包含形参和返回值都是不定长字符串的函数的Dll!
- 创建数据库及表模块
- 请问如何调出系统的字符库?
- 多视图的序列化问题
- unresolved external symbol __imp__ImageDirectoryEntryToData@16
- CListctrl上的图标转化问题
- 有这样一个问题,就是我从Cview 中派生了几个VIEW,如何通过FRAME的菜单将其显示出来?
- CButton(checkbox)问题?
- 关于dll的问题,紧急求助,各位高手帮忙
- 请问如何用WinRing0模拟USB键盘的输入
- VS2013配置VOSM时,遇到error LNK2038: 检测到“_MSC_VER”的不匹配
钩子是否捕捉到键盘消息, 创建线程是否成功? 加 TRACE 或 日志,查看运行情况