请教wince键盘钩子的问题
系统平台:wince
开发语言:evc4.0
程序功能:编写键盘钩子,截取VK_UP消息,运行程序FDS.exe
问题:
点击键盘的向上按钮,可以运行FDS。exe程序,但是是弹出两个FDS.exe,比较头疼,没有找到解决的办法,过来请教一下。
键盘钩子的回调函数为:
LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if (nCode == HC_ACTION)
{
if (((KBDLLHOOKSTRUCT*)lParam)->vkCode == VK_UP )
{
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = TEXT("\\SDMEM\\FDS.exe");
ShExecInfo.lpParameters = NULL;
ShExecInfo.lpDirectory = 0;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
}
}
return 1;
}
大家看看是什么问题?
[解决办法]
加个约束条件
if(wParam == WM_SYSKEYUP)
{
//ShellExecuteEx(&ShExecInfo);
}
键盘抬起时,会触发两次,wParam可能为WM_SYSKEYUP也可能WM_KEYUP
[解决办法]
保证FDS.exe只有一个实例就行了。具体实现方法google一下有很多