API函数编程,如何获取例如键盘字母消息?

2025-03-05 00:22:08
推荐回答(5个)
回答1:

利用动态链接库做个钩子程序来截获按键输入,并把有关的输入用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));}

回答2:

低级键盘钩子很方便可以捕获用户的键盘输入,最主要是你不用写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));
}

回答3:

利用动态链接库做个钩子程序来截获按键输入,并把有关的输入用sendmessage发送到对应的窗体里。

回答4:

HOOK肯定是可以的

回答5:

主要使用钩子