求救:勾子子程捕获到的键盘消息,怎样才能发送给当前应用程序? 我在ocx中加载了一个勾子子程,通过勾子子程已经捕获到按键消息,可我怎么处理呢,怎么发给应用程序呢?比如:就是网页上,嵌了一个ocx,但这个ocx中有一个输入框控件,可按BkSp(回退键)就将IE后退了,所以要用勾子来解决,该怎么做呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CallNextHook 就可以了,其他的操作系统应该会给你做了。 可在下面的方法中,并未捕获到按键消息啊(前提,勾子子程加载是成功的,也能捕获到按揭消息,应用程序还是接受不到)BOOL CImageDocView::PreTranslateMessage(MSG* pMsg)(这里所说的应用程序,是指:嵌入了ocx的html页面,ocx中加载了勾子子程)不知道为什么,希望能有高手给予指点,谢谢。 HHOOK hHook=NULL;extern "C"LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam,//虚键代码 LPARAM lParam)// 击键消息的信息{ HWND myhWnd=GetFocus(); if (wParam == VK_F12) { PostMessage(myhWnd, WM_KEYDOWN,(WORD)wParam,(DWORD)lParam); } return CallNextHookEx(hHook,nCode,wParam,lParam);}这样PostMessage是否可以呢?可我在BOOL CImageDocView::PreTranslateMessage(MSG* pMsg)中根本捕获不到消息啊 你的意思是不是屏蔽“按BkSp(回退键)就将IE后退了”的功能,然后删除ocx的edit中的一个字符啊,这样的话你可以在 if (wParam == VK_F12) { PostMessage(myhWnd, WM_KEYDOWN,(WORD)wParam,(DWORD)lParam); }中处理啊。 在哪里处理啊,怎么转到PreTranslateMessage接口中呢? http://www.vckbase.com/code/viewcode.asp?id=2582 可是我在编辑框中按了BkSp键,还是没反映,不知道怎么处理了。 那么,再问:怎样将拦截的键盘消息,丢弃掉呢?下面就是一个勾子子程,如果要实现丢弃,该怎么做?extern "C">LRESULT CALLBACK KeyboardProc(int nCode, > WPARAM wParam,//虚键代码> LPARAM lParam)// 击键消息的信息>{> HWND hWndTag=NULL;> LPMSG pMsg = (LPMSG)lParam; > hWndTag = pMsg->hwnd;> if (hWndTag!=NULL)> {> if (pMsg->message == WM_KEYDOWN)> {> if (pMsg->wParam == VK_BACK)> {> SendMessage(hWndTag, WM_KEYDOWN, wParam, lParam);> }> } > }> > return CallNextHookEx(hHook,nCode,wParam,lParam);>} 可以获得当前窗口的句柄(用FindWindow)然后用sendmessage就可以了:) 如果想丢弃的话,应该不用这句吧:return CallNextHookEx(hHook,nCode,wParam,lParam);你在想丢弃的地方直接返回试试。 HHOOK hHook=NULL;extern "C"LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam,//虚键代码 LPARAM lParam)// 击键消息的信息{ if (nCode == HC_ACTION) { BOOL bIsHookHeadoff=FALSE; //回退键:回退一个字符 if (wParam == VK_BACK) { //按次键时处理开始 ... //按次键时处理开始 bIsHookHeadoff = TRUE; } //判断按键消息是否需要被扔掉 if (bIsHookHeadoff) { return bIsHookHeadoff; } } return CallNextHookEx(hHook,nCode,wParam,lParam);}//加载钩子hHook=SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, NULL, GetCurrentThreadId());这是一个线程钩子。 非常感谢大伙们的热心支持和帮助!也便于以后和大家多沟通,特留下本人的msn帐号:[email protected],欢迎加入。 关于酷狗,QQ音乐的桌面歌词 实现原理 const CString& operator =( LPCWSTR lpsz )是什么意思呢? 编译原理的问题 如何建立两个CMainFrame??? 如休让PC喇叭发声 MFC的重要性 动态生成数据库 error C2664是怎么回事?十万火急!!! 谢谢巴顿先生深夜里的答复,现在的关键问题是从shellwindows中得到的网页信息--item中的document中的 apache的网络模型是不是完成端口 如何避免键盘钩子执行两遍 怎么在csdn的blog中要添加我的图片。
(前提,勾子子程加载是成功的,也能捕获到按揭消息,应用程序还是接受不到)
BOOL CImageDocView::PreTranslateMessage(MSG* pMsg)(这里所说的应用程序,是指:嵌入了ocx的html页面,ocx中加载了勾子子程)
不知道为什么,希望能有高手给予指点,谢谢。
extern "C"
LRESULT CALLBACK KeyboardProc(int nCode,
WPARAM wParam,//虚键代码
LPARAM lParam)// 击键消息的信息
{
HWND myhWnd=GetFocus();
if (wParam == VK_F12)
{
PostMessage(myhWnd, WM_KEYDOWN,(WORD)wParam,(DWORD)lParam);
}
return CallNextHookEx(hHook,nCode,wParam,lParam);
}
这样PostMessage是否可以呢?可我在BOOL CImageDocView::PreTranslateMessage(MSG* pMsg)
中根本捕获不到消息啊
if (wParam == VK_F12)
{
PostMessage(myhWnd, WM_KEYDOWN,(WORD)wParam,(DWORD)lParam);
}
中处理啊。
怎样将拦截的键盘消息,丢弃掉呢?下面就是一个勾子子程,如果要实现丢弃,该怎么做?
extern "C"
>LRESULT CALLBACK KeyboardProc(int nCode,
> WPARAM wParam,//虚键代码
> LPARAM lParam)// 击键消息的信息
>{
> HWND hWndTag=NULL;
> LPMSG pMsg = (LPMSG)lParam;
> hWndTag = pMsg->hwnd;
> if (hWndTag!=NULL)
> {
> if (pMsg->message == WM_KEYDOWN)
> {
> if (pMsg->wParam == VK_BACK)
> {
> SendMessage(hWndTag, WM_KEYDOWN, wParam, lParam);
> }
> }
> }
>
> return CallNextHookEx(hHook,nCode,wParam,lParam);
>}
return CallNextHookEx(hHook,nCode,wParam,lParam);你在想丢弃的地方直接返回试试。
extern "C"
LRESULT CALLBACK KeyboardProc(int nCode,
WPARAM wParam,//虚键代码
LPARAM lParam)// 击键消息的信息
{
if (nCode == HC_ACTION)
{
BOOL bIsHookHeadoff=FALSE;
//回退键:回退一个字符
if (wParam == VK_BACK)
{
//按次键时处理开始
...
//按次键时处理开始 bIsHookHeadoff = TRUE;
}
//判断按键消息是否需要被扔掉
if (bIsHookHeadoff)
{
return bIsHookHeadoff;
}
} return CallNextHookEx(hHook,nCode,wParam,lParam);
}//加载钩子
hHook=SetWindowsHookEx(WH_KEYBOARD,
KeyboardProc,
NULL,
GetCurrentThreadId());这是一个线程钩子。