如何将<全局键盘钩子>的<WPARAM wParam, LPARAM lParam> 传递给调用者, "注意":调用者是非窗口类
解决方案 »
- 求DLL面试题目的思路...
- 散分,谁有PowerDVD 10/11 的独立滤镜,分享下
- VC++6.0 如何从电脑卸载掉???
- 如何在程序中模拟键盘按键.....
- 属性页问题!!!!!快来救我啊
- rett error LNK2019: 无法解析的外部符号 _WinMain@16 ,该符号在函数 _WinMainCRTStartup 中被引用
- vc中带变量的SQL比较语句怎么写啊??
- 请问哪儿有windows网络编程这本书的电子版下载啊?
- 如何在CScrollView中使用MM_ISOTROPIC映射模式???
- 怎样取得调用MD5后的结果,源代码的例子只是把它输出,如果我要找它放到一个变量中具体怎么做?
- 求教:有关类成员函数是否能作为线程函数?
- * 几天发发牢骚: CSDN真的破, 回复不能连续3次. 没有一点人性化的设计, 请问现在有那些网站比较好的
没有窗口句柄怎么发消息??我想还是要用回调函数
我不至于那么蠢把:) 我是静态函数, 我把静态函数的地址给钩子了, 放在全局段里面, 是共享的因为当前窗口非调用者的话, 钩子函数会在不同的地址空间, 我就怀疑是因为地址空间不同造成的gaopl_8278(老婆脾气爆) :
我还想知道就一个纯类(没有任何继承)如何做到消息获取? 创建线程还是全局消息?shenming123(www.software168.com)
PostThreadMessage, 同样的, 因为地址空间不同, 就算线程句柄在全局段, 也会是非法访问吧
PostThreadMessage, 同样的, 因为地址空间不同, 就算线程句柄在全局段, 也会是非法访问吧
是线程ID,不是句柄,看看VNC的代码吧,里面有个全局钩子的例子,就是用的PostThreadMessage
UINT CHotKeyHook::Thread_ReceiveHookMsg(LPVOID lpParam)
{
Sleep(1000); MSG msg;
while(1)
{
// while(GetMessage(&msg, NULL, 0, 0))
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if(msg.message== WM_RECEIVE_HOOK_MSG)
{
MessageBox(NULL, 0, 0, MB_OK); g_pthis->KeyBoardProc(msg.wParam, msg.lParam);
}
}
} return 0; }
钩子函数:
// Trap keyboard messages
_declspec(dllexport) LRESULT CALLBACK HookFunction(
int code,
WPARAM wParam,
LPARAM lParam)
{ if (code == HC_ACTION)
{// PostMessage(NULL, g_dwReceiveMsgID, wParam, lParam);
PostThreadMessage(g_dwReceiveMsgThreadID, g_dwReceiveMsgID, wParam, lParam);
} return CallNextHookEx(m_oldhook, code, wParam, lParam);}当调用者窗口非当前窗口, 无法接收到消息! ;9如何处理呢? 说起来线程ID是全局的, 应该没问题啊, 难道消息循环只发生在当前活动窗口?