怎么使C语言程序在后台运行并接收键盘输入?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么使C语言程序在后台运行并接收键盘输入?相关的知识,希望对你有一定的参考价值。
有点麻烦。第一,你要会写DLL,检查,键盘过滤函数 WH_KEYBOARD,用SetWindowsHookEx()将其挂接在函数链首,用CallNextHookEx()把消息传给下一个函数。
键盘挂钩函数:
int FAR PASCAL KeyboardProc( int nCode,WORD wParam,DWORD lParam)
KeyboardProc--挂接函数名,该函数必须在模块定义文件中利用EXPORTS命令进行说明;
nCode决定挂接函数是否对当前消息进行处理;wParam和lParam为具体的消息内容。
第二,你要会写程序,调用那个钩子DLL
第三,你要让程序在背景运行。追问
请问这是WINDOWS编程的知识吗? 能不能直用C语言实现
追答是WINDOWS编程。
要写 WIN32 API 程序。
不能用简单的C语言方法实现。
#include<stdio.h>
int main(void)
int i;
while(1)
printf("input i:",i);
scanf("%d",&i);
if(i==1)
printf("我很聪明\n");
else continue;
就是这样的,只要你输入i的值不是1,程序就一直循环,每次循环都判断新输入的是不是1,如果是就打印 我很聪明 并且继续循环,再次输入检查输入,一直这样下去,这就实现了程序在后台检查输入的情况,等待键盘输入追问
声明一下:我已经学了两年的C语言了 ,你试一下你这个程序在后台还能不能接收键盘输入把!
追答喔,没在意写错,写的是有问题,但是我只是想说明什么叫后台输入控制程序,其实我这个程序还没写完整,因为后面还要很多 条件限制的,我只是说明下
参考技术B 使用int kbhit(void)-------------------
函数名:kbhit()(VC++6.0下为_kbhit())
功 能及返回值: 检查当前是否有键盘输入,若有则返回一个非0值,否则返回0
用 法:int kbhit(void);
包含头文件: include <conio.h>
------------------
检测到之后再用getch/getche等等函数取得按键,用getchar等会等到按回车再返回...
当然这只是命令行下的函数,而且linux下没有conio.h,需要其它等效代码替换,你可以搜下Net
-------------------
#include <conio.h>
int main()
int i,c;
char p[4]= '|', '/', '-', '\\';
for(i=0;;i++)
if(kbhit()==0)//没有按键
int n;
cprintf("\r%u %n",i,&n);
while(n++<20)putch('.');
cprintf(" %c",p[i/400%4]);
else//有按键
c=getch();
cprintf("\r ");
cprintf("\r%u>you press '%c' key, code %u.\n", i, (c==13)?10:c, c);
参考技术C #include<stdio.h>
#include<stdlib.h>
#define SIZE 4
struct student
char s_num[10];
char s_name[20];
char sex[2];
int age;
stu[SIZE];
void input()
int i;
for(i=0;i<SIZE;i++)
printf("请输入第%d个学生的数据内容:学号,姓名,性别(男:M,女F),年龄\n",i+1);
scanf("%s%s%s%d",stu[i].s_num,stu[i].s_name,stu[i].sex,&stu[i].age);
void save()
int i;
FILE *fp;
if((fp=(fopen("c:\\stu_list.txt","wb")))==NULL)
printf("can not open file:stu_list!\n");
exit(0);
for(i=0;i<SIZE;i++)
if((fwrite(&stu[i],sizeof(struct student),1,fp))!=1)
printf("write error!\n");
fclose(fp);
exit(0);
fclose(fp);
void main()
input();
save();
关键错误在于:fclose(0);
应该改为 fclose(fp);
另外,团IDC网上有许多产品团购,便宜有口碑 参考技术D 用管道啊,写个守护进程读取管道
输入的时候直接将要输入的东西>进那个管道
大体上是这样
if(fork()!=0)
exit(0);
mkfifo("/var/myfifo");
fp = fopen("/var/myfifo","r");
while(fread(....))
...
输入的时候使用管道
echo hello >/var/myfifo这样就把hello输进去了
你能看懂吗追问
守护进程读取管道? 这又是什么?
追答守护进程就是后台进程啊
你通过管道可以将键盘的输入传递过去
或者说我理解错了?你是要后台进程捕获键盘击键?
那你应该看看windows的HOOK,也就是钩子函数,或者linux的内核
纯C语言?嵌入汇编吗?要写键盘驱动?
求编程大神:怎么设计c++程序使在键盘上输入任意一个字符串,输出该字符串,并统计输入的字符个数
#include <iostream>#include <string>
using namespace std;
int main()
char str[100];
cout<<"输入一个字符串"<<endl;
gets(str);
int i=0,k=0;
for(i=0;i<strlen(str);i++)
if(str[i]!=' ')
k++;
cout<<"输入的字符有"<<k<<"个"<<endl;
追问
怎么他显示有一个错误
好吧你学的是C语言?我改下,马上就好!
#include <stdio.h>#include <string.h>
int main()
char str[100];
int i=0,k=0;
printf("输入一个字符串\\n");
gets(str);
for(i=0;i<strlen(str);i++)
if(str[i]!=' ')
k++;
printf("输入的字符有%d个\\n",k);
参考技术A #include <iostream>
#include <string>
using namespace std;
int main()
string str;
cin >> str;
cout << "输入的字符串为:" << str << " 长度为" << str.size() << endl;
return 0;
参考技术B #include "stdafx.h"//vc++6.0加上这一行.
#include <string>
#include <iostream>
using namespace std;
void main(void)
string str("");
char ch;
cout << "Type a string...\nstr=";
while((ch=getchar())!='\n') str+=ch;
cout << "The string is " << str << ".\n" << "The length = " << str.length() << ".\n";
以上是关于怎么使C语言程序在后台运行并接收键盘输入?的主要内容,如果未能解决你的问题,请参考以下文章
JAVA怎么写:接收从键盘输入的字符串并打印出来?新手问题(非诚勿扰)