HOOK怎样捕获得指定的EDIT的键盘消息 HOOK怎样捕获得指定的EDIT的键盘消息?越具体越好,分两种情况,一种是本窗体中的EDIT,另一种是其他窗体中的EDIT.先回答正确的给100分. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 edit需要有焦点才能输入,有焦点自然是z top-level那么 只要在拦截到键盘输入的时候 判断具有输入焦点的edit 是不是你想要得到的 Hook之前先获得EDIT控件的句柄,对于其它程序的窗口,用FindWindow找出窗口,如果嵌套有子窗口,再用FindWindowEx逐层查找,简单情况可以先用SPY++查出控件ID,再GetDlgItem获取句柄。将控件句柄传给DLL,保存到共享区的全局变量。SetWindowsHookEx的idHook参数给WH_CALLWNDPROC。Hook函数中判断目标窗口句柄是EDIT控件的句柄时做处理,判断各种键盘消息,最后CallNextHook。 能不能给出示例代码?就那一句话,但是我不知道应该怎么写,我想要的效果是直接对EDIT监控,也就是只捕获指定EDIT的键盘消息.我是下面这样写的,但是捕获的是整个窗体的键盘消息:SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetWindowThreadProcessId(GetDlgItem(IDC_EDIT1)->m_hWnd,NULL)); //这样捕获的是整个窗体的键盘消息,请问怎么写才只捕获IDC_EDIT1的键盘消息?谢谢,帮人帮到底. 你需要挂接WH_GETMESSAGE消息HOOK,其中GetMsgProc 过程的lParam指向MSG结构体,里边有当前消息的hWnd。 给你看个实例吧 是 vc知识库 上面的 http://www.vckbase.com/document/viewdoc/?id=771虽然他的这个功能现在是无法实现了 (以前可能行的)但是他上面用到的东西 值得你去学学 思考 接分 通过全局钩子进行挂钩具体到某个EDIT就要根据句柄来做了楼上都 说了~~~~~~ 写了一个hook键盘消息的密码,截取系统所有的键盘消息,所以写了一个DLL,DLL里边的代码很简单,如下: #include <windows.h> HINSTANCE hMod; #pragma data_seg("My") HHOOK hhk; #pragma data_seg() BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { hMod=(HINSTANCE)hModule; return TRUE; } LRESULT CALLBACK KeyboardP( int code, // hook code WPARAM wParam, // virtual-key code LPARAM lParam // keystroke-message information ) { return 1; /*return CallNextHookEx( hhk, // handle to current hook code, // hook code passed to hook procedure wParam, // value passed to hook procedure lParam // value passed to hook procedure );*/ } void _declspec(dllexport) sethook() { hhk=::SetWindowsHookEx( WH_KEYBOARD, // hook type KeyboardP, // hook procedure hMod, // handle to application instance 0 // thread identifier ); } 共享数据段在DEF文件里说明过了,然后又写一个个简单的程序来应用,如下: #include <windows.h> #include <iostream> #pragma comment(lib,"keydll.lib") void _declspec(dllimport) sethook(); int main() { sethook(); int a; std::cin>>a; return 0; } 你试试,是不是你需要的 本窗体中的干嘛用HOOK?这不多事吗?在PreTranlateMessage中处理就行了。不管是本进程还是其它进程的,你得首先找到这个EDIT的HWND,然后HOOK住DefWindowProc函数,在里面判断和做处理。 我的意思是在同一个线程里怎样用钩子函数钩到一个Edit上,只监控这个EDIT,这样问肯定很清楚了,不要理论的,给个代码示例,或者告诉我能不能直接这样实现.还有别告诉我用PreTranslateMessage,我现在只想用钩子实验一下. 坐标的变换问题 无效指针 有人用过sharepoint吗? 请教各位高手谁有经典90坦克大战游戏的程序代码和算法呀? 在MFC中如何得到图片的RGB值?? 【请教】给程序中create的控件添加消息相应函数?? 【散分贴】发布记账凭证输入ActiveX控件 用SQL-DMO建立数据库的问题。 刚买到visualstudio.net,但是他要的e文版的win2k我实在是买不到,我该怎么办?? 插件的实现 unicode都是16位的么?难道世界上的文字,总共不超过65536个? 在winXP sp2下的匿名管道与win2000下有什么不同?开发的时候需要注意什么?
那么 只要在拦截到键盘输入的时候 判断具有输入焦点的edit 是不是你想要得到的
将控件句柄传给DLL,保存到共享区的全局变量。
SetWindowsHookEx的idHook参数给WH_CALLWNDPROC。
Hook函数中判断目标窗口句柄是EDIT控件的句柄时做处理,判断各种键盘消息,最后CallNextHook。
我是下面这样写的,但是捕获的是整个窗体的键盘消息:
SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetWindowThreadProcessId(GetDlgItem(IDC_EDIT1)->m_hWnd,NULL));
//这样捕获的是整个窗体的键盘消息,请问怎么写才只捕获IDC_EDIT1的键盘消息?
谢谢,帮人帮到底.
楼上都 说了~~~~~~
#include <windows.h>
HINSTANCE hMod;
#pragma data_seg("My")
HHOOK hhk;
#pragma data_seg()
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
hMod=(HINSTANCE)hModule;
return TRUE;
}
LRESULT CALLBACK KeyboardP(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{ return 1;
/*return CallNextHookEx(
hhk, // handle to current hook
code, // hook code passed to hook procedure
wParam, // value passed to hook procedure
lParam // value passed to hook procedure
);*/ }
void _declspec(dllexport) sethook()
{
hhk=::SetWindowsHookEx(
WH_KEYBOARD, // hook type
KeyboardP, // hook procedure
hMod, // handle to application instance
0 // thread identifier
);
}
共享数据段在DEF文件里说明过了,然后又写一个个简单的程序来应用,如下:
#include <windows.h>
#include <iostream>
#pragma comment(lib,"keydll.lib")
void _declspec(dllimport) sethook();
int main()
{ sethook(); int a;
std::cin>>a;
return 0;
} 你试试,是不是你需要的