谁帮我写个小程序 就是键盘按V他就自动按Z

谁帮我写个小程序 就是键盘按V他就自动按Z,第1张

这个很简单,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组件后,当输入切换时,键盘会一直展开,没有收起后再展开,使用起来更加流畅,没有跳跃感

好啦,以上就是我本次分享的全部内容啦,如果你觉得我的文章对你有一丢丢帮助,那么请不要吝啬你的赞

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9846085.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存