dll中:
我想按下某個鍵盤,就播放聲音,但是playsound第一次可以播放,在按下鍵盤,鍵盤鉤子就失效了。
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放到執行緒里也是一樣的效果。
這個問題的根源在哪里,或者有什么替代的方案嗎。
不勝感激
實在水平有限啊,求大牛解惑
uj5u.com熱心網友回復:
鉤子一般不要執行長時間代碼,鉤子是否捕捉到鍵盤訊息, 創建執行緒是否成功? 加 TRACE 或 日志,查看運行情況
uj5u.com熱心網友回復:
我改過注冊表的等待時間,然后sleep了10秒鐘,仍舊能正常使用,但是一旦呼叫PlaySound之后,就完蛋了,然后StopKey,卸載鉤子,會報錯 GetLastError=1404,無效的掛鉤句柄。
您覺得可能是哪里的問題。我用的win7
謝謝您了
uj5u.com熱心網友回復:
請問你問題解決了嗎?轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/126401.html
標籤:進程/線程/DLL
上一篇:請教大家一個回呼函式的問題
