这个很简单,vc用键盘hook,要在所有程序通用就用全局钩子写个dll就可以了。。在hook的回调函数里拦截键盘的V按键,然后用KeyEvent函数产生一个Z按键消息就可以。
以前随便写的一部分,参考下,当然功能部分没帮你改,按照我的思路改就可以了
这个是一个将用户按下的任何一个键记录在一个文本文件里
//写dll文件:
#include "stdafxh"
#include "keyhookh"
#pragma data_seg("SharedVar")
//DLL输出的全局变量
extern "C" __declspec(dllexport) HHOOK ShellHook=NULL;
extern "C" __declspec(dllexport) HHOOK hHook=NULL;
extern "C" __declspec(dllexport) HHOOK debugHook=NULL;
#pragma data_seg()
// DLL 自用的全局变量
int sign;
bool start=1;
bool start1=1;
bool start2=1;
CFile file;
CString strFullName;
//DLL输出的勾子函数
extern "C" __declspec(dllexport)
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
/ unsigned char buffer;
if(start)
{
strFullName = AfxGetApp()->m_pszHelpFilePath;
int count=strFullNameGetLength()-strFullNameReverseFind('\\');
strFullName=strFullNameLeft(count);
strFullName+="keyfiletxt";
fileOpen(strFullName,CFile::modeReadWrite|CFile::modeCreate);
//fileClose();
start=0;
}
if(lParam&0x80000000) //按一个键会产生两个事件:WM_KEYDOWN和WM_KEYUP,所以去掉一个
{//如果某键按下
buffer=MapVirtualKey(wParam,2);
//a=char(wParam);
fileSeekToEnd();
fileWrite(&buffer,sizeof(buffer));
fileWrite(" ",1);
sign++;
if(sign>=20)
{
sign=0;
fileWrite("\r\n",2);
}
}
fileClose();
fileOpen(strFullName,CFile::modeReadWrite);
/
return CallNextHookEx(NULL, code, wParam,lParam);
}
其实很简单,是由input的type属性控制的
type属性控制数字键盘的三种状态
1number:数字键盘(无小数点)
2digit:数字键盘(有小数点)
3idcard:数字键盘(无小数点、有 x 键)
小程序的form表单中,可能有多个input组件,当我们输入完一个后,切换到下一个输入框时,小程序会因为上一个输入框失去焦点会自动收起键盘,当我们切换完之后,再次获得焦点,键盘再次d出,用起来很别扭,跳来跳去的很不友好,像这样
查询了很长时间,一直没有发现好的解决办法,偶尔在官方示例中找到了解决方案!
将input组件改为textarea组件
将input组件都改成textarea组件后,当输入切换时,键盘会一直展开,没有收起后再展开,使用起来更加流畅,没有跳跃感
好啦,以上就是我本次分享的全部内容啦,如果你觉得我的文章对你有一丢丢帮助,那么请不要吝啬你的赞
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)