C语言问题?

下面这段代码只能记录用户输入的数字,不能记录字母和特殊符号,怎么改才能记录数字、字母和特殊符号?for(charch='0';ch<='9';ch++){if(GetAs... 下面这段代码只能记录用户输入的数字,不能记录字母和特殊符号,怎么改才能记录数字、字母和特殊符号?
for(char ch='0';ch<='9';ch++) {
if(GetAsyncKeyState(ch)&0x8000) {
while(GetAsyncKeyState(ch)&0x8000)
Sleep(1);
printf("用户输入的是: %c\n",ch);
}}
展开
 我来答
自我编程
2020-08-18 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部

你这个程序是捕捉0到9的按键状态,按下再松开时才会记录,想要识别所有按键,把for循环范围扩大。

比如for(charch=32;ch<=127;ch++)这样就包含了特殊符号及大小写字母还有数字。

但是,这个代码是有问题的!

一、你这个代码需在键位已经按下后启动才能识别,否则启动时没有按下对应键位,程序就结束了。要嵌套死循环,让其一直检测。

二、直接扩大ASCII区间,像上面的那样32~127,识别字母区间会被防毒软件直接判断为病毒!!。

三、GetAsyncKeyState不是C语言库函数,是window的函数,换其它操作系统就失效。

GetAsyncKeyState返回值最高位为1则说明对应ch的键被按下,所以这里用&0x8000来判断最高位。

四、想要捕获其它软件界面内容还有很多方法,比如:

1、通过windowAPI函数FindWindow来获取窗口句柄。

2、遍历窗口下控件句柄,找到输入框句柄。

3、通过窗口句柄找到进程id(GetWindowThreadProcessId函数),再通过id获取进程句柄(OpenProcess函数)。

4、向目标进程申请内存(VirtualAllocEx),再通过PostMessage函数异步发送消息获取目标控件内的内容(具体消息要结合控件类型,另外注意PostMessage是异步执行)。

具体自行查阅资料,一言两语说不清,上面步骤需先搞懂window消息机制。

注意:以上方法依然只限window系统,且有数据保护的控件无法获取。

五、或简单暴力的方法,直接写个定时截图,只要硬盘够不停桌面截图。

但不论写什么程序,和装摄像头一样,终究都会被发现。!!!!!!!!!!!!!

cnnbwhq1972
2020-08-16 · TA获得超过3843个赞
知道小有建树答主
回答量:488
采纳率:83%
帮助的人:238万
展开全部
char c;
while(1){
c=getchar();
printf("用户输入的是: %c\n",c);
}

//您试试
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e6fe3d0
2020-08-16 · TA获得超过1560个赞
知道小有建树答主
回答量:3155
采纳率:45%
帮助的人:236万
展开全部
我去我这小学毕业的竟然点进来了,c语言并不难,但是你得有一定的英语基础,要不你都看不懂单词啥意思,慢慢来吧,年轻人,一点一点的,好好的,多从网上学一点高级的编程技能,越来越好,越来越快的编程师属于你!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
microroom
科技发烧友

2020-08-18 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:7118
采纳率:83%
帮助的人:1568万
展开全部
试试改成这样:
for(char ch=0;ch<=127;ch++)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式