键盘挂钩重复字符 [英] keyboard hook repeating charactor

查看:76
本文介绍了键盘挂钩重复字符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好.我试图实现键盘钩子,它的工作原理,但是它例如重复输入字符.如果我打招呼,它会给出
HHHHHHHHHHHHHHHHHHHHHEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEELLEELLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO

有人可以帮我吗?

我正在使用Windows Server 2008 R2 64位标准版以及vs 2005 Professional.

LRESULT   __declspec(dllexport)__stdcall  CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
	ofstream fout;
	fout.open("c:\\viv.txt",ios::app);

	static BOOL flag = FALSE ;
	static BYTE key ;

	if ( nCode < 0 )
		return CallNextHookEx ( hkb, nCode, wParam, lParam ) ;

	if ( ( nCode == HC_ACTION ) && (  (((DWORD)lParam & 0x80000000) == 0 ) && (((DWORD)lParam & 0x40000000 ) == 0 ) ))
	{
		if ((wParam==VK_SPACE)||(wParam==VK_RETURN)||((wParam>=0x2f ) &&(wParam<=0x100))) 
		{
			if(wParam != VK_RETURN)
			{
				key = (BYTE)wParam;
				fout<<key;
			}
		}
	}
		
	fout.close();

   return CallNextHookEx(hkb, nCode, wParam, lParam);
}

解决方案

您必须使用KeyUp或KeyDown来记录密钥.在VB.Net中检查此示例
http://sim0n.wordpress.com/2009/03/28/vbnet-keyboard -hook-class/ [ ^ ]


不起作用,以任何方式感谢您的答复

switch(wParam)
{
case WM_KEYDOWN:
    keystat = 1;
    break;
case WM_KEYUP:
    if(keystat == 1)
    {
        keystat = 2;
        key = (BYTE)wParam;
        fout<<key;
    }
    break;
default:
    if(keystat == 2)
    {
        keystat = 0;
        key = (BYTE)wParam;
        fout<<key;
    }
}


hi all . i am trying to implement keyboard hook ,it works however it repeats entered char for eg. if i enter hello it gives
HHHHHHHHHHHHHHHHHHHHHEEEEEEEEEEEEEEEEEEEEELLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLOOOOOOOOOOOOOOOOOOOOO

can any one help me here ?

i am using windows server 2008 r2 64 bit standard edition , with vs 2005 professional.

LRESULT   __declspec(dllexport)__stdcall  CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
	ofstream fout;
	fout.open("c:\\viv.txt",ios::app);

	static BOOL flag = FALSE ;
	static BYTE key ;

	if ( nCode < 0 )
		return CallNextHookEx ( hkb, nCode, wParam, lParam ) ;

	if ( ( nCode == HC_ACTION ) && (  (((DWORD)lParam & 0x80000000) == 0 ) && (((DWORD)lParam & 0x40000000 ) == 0 ) ))
	{
		if ((wParam==VK_SPACE)||(wParam==VK_RETURN)||((wParam>=0x2f ) &&(wParam<=0x100))) 
		{
			if(wParam != VK_RETURN)
			{
				key = (BYTE)wParam;
				fout<<key;
			}
		}
	}
		
	fout.close();

   return CallNextHookEx(hkb, nCode, wParam, lParam);
}

解决方案

You must use KeyUp or KeyDown to log the keys. Check this sample in VB.Net
http://sim0n.wordpress.com/2009/03/28/vbnet-keyboard-hook-class/[^]


did not work , any way thanks for reply

switch(wParam)
{
case WM_KEYDOWN:
    keystat = 1;
    break;
case WM_KEYUP:
    if(keystat == 1)
    {
        keystat = 2;
        key = (BYTE)wParam;
        fout<<key;
    }
    break;
default:
    if(keystat == 2)
    {
        keystat = 0;
        key = (BYTE)wParam;
        fout<<key;
    }
}


这篇关于键盘挂钩重复字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆