API函数编程,如何获取例如键盘字母消息?
例如像A,B,C…………的虚拟键或消息?其他的HOME,F1_F12……不用.还有如果我获得了按钮消息那如何用sendmessage函数,将其发送到WM_的消息上,并能让...
例如像A,B,C…………的虚拟键或消息? 其他的HOME,F1_F12……不用.
还有 如果我获得了按钮消息 那如何 用sendmessage函数,将其发送到WM_的消息上,并能让WM_消息 知道 发送的是那个字母?
我用的是VC6.0 展开
还有 如果我获得了按钮消息 那如何 用sendmessage函数,将其发送到WM_的消息上,并能让WM_消息 知道 发送的是那个字母?
我用的是VC6.0 展开
5个回答
展开全部
利用动态链接库做个钩子程序来截获按键输入,并把有关的输入用sendmessage发送到对应的窗体里。
低级键盘钩子很方便可以捕获用户的键盘输入,最主要是你不用写dll,把以下代码放在对话框程序里面就可以了。
/*
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define _WIN32_WINNT 0x0500 //在 stdafx.h中添加这一句
*/
/****************************************************************************
低级键盘钩子
****************************************************************************/
HHOOK LowLevelKeyboardHook=NULL; //钩子句柄
//低级键盘钩子
LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam, LPARAM lParam)
{ if (nCode<0 ) return CallNextHookEx(LowLevelKeyboardHook,nCode,wParam,lParam);
if (wParam==WM_KEYDOWN)
{ int code=((KBDLLHOOKSTRUCT *) lParam )->vkCode;
if ( code == 'A' )
{ //把code 放在 WPARAM 参数里
::SendMessage(m_hWnd,WM_MY_MSG,(WPARAM)code,NULL);
return 1; }
}
return CallNextHookEx(LowLevelKeyboardHook,nCode,wParam,lParam); //传递钩子信息 }
void CDemoDlg::OnButton1()
{ //start Low Level Keyboard hook
LowLevelKeyboardHook=SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,GetModuleHandle(NULL),0);
ASSERT(LowLevelKeyboardHook);}
void CDemoDlg::OnButton2()
{ //stop Low Level Keyboard hook
VERIFY(UnhookWindowsHookEx(LowLevelKeyboardHook));}
低级键盘钩子很方便可以捕获用户的键盘输入,最主要是你不用写dll,把以下代码放在对话框程序里面就可以了。
/*
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define _WIN32_WINNT 0x0500 //在 stdafx.h中添加这一句
*/
/****************************************************************************
低级键盘钩子
****************************************************************************/
HHOOK LowLevelKeyboardHook=NULL; //钩子句柄
//低级键盘钩子
LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam, LPARAM lParam)
{ if (nCode<0 ) return CallNextHookEx(LowLevelKeyboardHook,nCode,wParam,lParam);
if (wParam==WM_KEYDOWN)
{ int code=((KBDLLHOOKSTRUCT *) lParam )->vkCode;
if ( code == 'A' )
{ //把code 放在 WPARAM 参数里
::SendMessage(m_hWnd,WM_MY_MSG,(WPARAM)code,NULL);
return 1; }
}
return CallNextHookEx(LowLevelKeyboardHook,nCode,wParam,lParam); //传递钩子信息 }
void CDemoDlg::OnButton1()
{ //start Low Level Keyboard hook
LowLevelKeyboardHook=SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,GetModuleHandle(NULL),0);
ASSERT(LowLevelKeyboardHook);}
void CDemoDlg::OnButton2()
{ //stop Low Level Keyboard hook
VERIFY(UnhookWindowsHookEx(LowLevelKeyboardHook));}
展开全部
低级键盘钩子很方便可以捕获用户的键盘输入,最主要是你不用写dll,把以下代码放在对话框程序里面就可以了。
/*
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define _WIN32_WINNT 0x0500 //在 stdafx.h中添加这一句
*/
/****************************************************************************
低级键盘钩子
****************************************************************************/
HHOOK LowLevelKeyboardHook=NULL; //钩子句柄
//低级键盘钩子
LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam, LPARAM lParam)
{
if (nCode<0 ) return CallNextHookEx(LowLevelKeyboardHook,nCode,wParam,lParam);
if (wParam==WM_KEYDOWN)
{
int code=((KBDLLHOOKSTRUCT *) lParam )->vkCode;
if ( code == 'A' )
{
//把code 放在 WPARAM 参数里
::SendMessage(m_hWnd,WM_MY_MSG,(WPARAM)code,NULL);
return 1;
}
}
return CallNextHookEx(LowLevelKeyboardHook,nCode,wParam,lParam); //传递钩子信息
}
void CDemoDlg::OnButton1()
{
//start Low Level Keyboard hook
LowLevelKeyboardHook=SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,GetModuleHandle(NULL),0);
ASSERT(LowLevelKeyboardHook);
}
void CDemoDlg::OnButton2()
{
//stop Low Level Keyboard hook
VERIFY(UnhookWindowsHookEx(LowLevelKeyboardHook));
}
/*
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define _WIN32_WINNT 0x0500 //在 stdafx.h中添加这一句
*/
/****************************************************************************
低级键盘钩子
****************************************************************************/
HHOOK LowLevelKeyboardHook=NULL; //钩子句柄
//低级键盘钩子
LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam, LPARAM lParam)
{
if (nCode<0 ) return CallNextHookEx(LowLevelKeyboardHook,nCode,wParam,lParam);
if (wParam==WM_KEYDOWN)
{
int code=((KBDLLHOOKSTRUCT *) lParam )->vkCode;
if ( code == 'A' )
{
//把code 放在 WPARAM 参数里
::SendMessage(m_hWnd,WM_MY_MSG,(WPARAM)code,NULL);
return 1;
}
}
return CallNextHookEx(LowLevelKeyboardHook,nCode,wParam,lParam); //传递钩子信息
}
void CDemoDlg::OnButton1()
{
//start Low Level Keyboard hook
LowLevelKeyboardHook=SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,GetModuleHandle(NULL),0);
ASSERT(LowLevelKeyboardHook);
}
void CDemoDlg::OnButton2()
{
//stop Low Level Keyboard hook
VERIFY(UnhookWindowsHookEx(LowLevelKeyboardHook));
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
利用动态链接库做个钩子程序来截获按键输入,并把有关的输入用sendmessage发送到对应的窗体里。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
HOOK肯定是可以的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询