当前位置:编程学习 > C#/ASP.NET >>

请教一个键盘钩子的问题。为何在其他的任何一个窗口中无效?

主要部分代码如下:
LRESULT WINAPI KeyMonitorPrc(int code, WPARAM wParam, LPARAM lParam)
{
bool bPressShift = false;

if(code == HC_ACTION &&(lParam & 0xc000ffff)==1)
{
bPressShift = (::GetAsyncKeyState(VK_SHIFT) < 0);

if(!bPressShift)
{
bPressShift = (wParam >='A' && wParam <='Z') && (::GetAsyncKeyState(VK_CAPITAL) < 0);
}
FindKeyValue(wParam,bPressShift);
}

HWND h_Wnd = ::GetForegroundWindow();
return ::CallNextHookEx(m_hook,code,wParam,lParam);
}

BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
gInstance =(HINSTANCE)hModule;
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

extern "C" _declspec(dllexport) BOOL WINAPI Start()
{
if(m_hook != NULL)
return FALSE;

m_hook = ::SetWindowsHookEx(WH_KEYBOARD,KeyMonitorPrc,gInstance,0);
return (m_hook != NULL);
}

extern "C" _declspec(dllexport) void WINAPI Stop()
{
WritetoFile();
::UnhookWindowsHookEx(m_hook);
m_hook = NULL;
}

然后在另外一个对话框工程中,一个按钮调用start(),另外一个调用stop();问题是只在该对话框程序中,进行输入,可以截获到键盘信息,其他的任何窗口都无法截获到键盘的按键。
小弟初学,望各位大侠解惑之。。 --------------------编程问答-------------------- 这个钩子要安装到全局才行哦!

另外你要发到VC版块,而不是C#版块.

给你一个文章学学吧!

http://topic.csdn.net/u/20100420/15/5e81979a-6fa4-45c5-9d75-61b3fb4108b1.html --------------------编程问答-------------------- 这个是全局钩子啊,SetWindowsHookEx的最后一个参数为0。小弟第一次发贴,请各位恕罪则个!
另外在测试的对话框工程cpp中,我用隐式链接到这个dll.
#pragma comment(lib,"KeyMonitor")

这样做可有不妥之处?望大侠不吝赐教。
补充:.NET技术 ,  VC.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,