怎么使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语言方法实现。

参考技术A 利用死循环,就是利用循环控制语句,不断检查输入情况,还是我写个简单的程序给你看看吧,这里我用while循环举例
#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语言程序在后台运行并接收键盘输入?的主要内容,如果未能解决你的问题,请参考以下文章

C语言如何在键盘中输入一个数字字符串并进行排序

JAVA怎么写:接收从键盘输入的字符串并打印出来?新手问题(非诚勿扰)

在C语言中如何实现用键盘输入一个字符串,并打印出来?

C语言从键盘输入一个字符串,并删除该字符串中所有大写字母字符

C语言程序题:将一个键盘输入的数字转化成中文输出!

c语言怎么监听键盘按键