求助:C#控制台应用程序中,如何即时地判断用户的键盘按键

问题描述

问题如题。其中的“即时”是说程序可以检测并判断用户所有的键盘按键。在这先谢过各位的解答。如果我的解释不够清晰的话,那么您可以看一下下面这个例子:有这样一个简单的题目:从键盘输入一串字符,编写程序,去掉其中重复的字符(保留重复字符的第一个),然后将结果显示在屏幕中。这个题目的基本要求实现之后,我想让用户可以重复进行这一操作:输入一个字符串,然后输出处理后的字符串;然后继续输入……而不需要再次运行程序。那么可以把用户输入、处理方法和输出的代码放到一个循环中,循环的条件是某个键盘按键……但这种解决方法的局限是,用户决定是否继续的决定权是受限制的,即用户必须在输入、处理和输出这三个步骤结束之后才能决定是否继续。下面给出代码,可能会便于说明:1classProgram2{3staticvoidMain(string[]args)4{5stringstrInput=string.Empty;67do8{9Console.WriteLine("nPleaseinputastring:");10strInput=Console.ReadLine();11strInput=RemoveRepeatedLetter(strInput);12Console.WriteLine("resultstring:n"+strInput);13}while(ContinueOrNot());14}15publicstaticstringRemoveRepeatedLetter(stringstrOriginal)16{17stringstrResult=string.Empty;1819foreach(charcinstrOriginal)20{21if(!strResult.Contains(c.ToString()))22{23strResult+=c.ToString();24}25}2627returnstrResult;28}29publicstaticboolContinueOrNot()30{31ConsoleKeyc=ConsoleKey.Escape;3233Console.Write("Continue,Y/N?");34c=Console.ReadKey(false).Key;35if(c.CompareTo(ConsoleKey.N)==0)36{37returnfalse;38}39else40{41returntrue;42}43}44}而与本文题目对应的,我真正想要实现的是用户可以随时结束,比如在输入字符串的过程中——例如,上述代码中的循环条件是“按键不是n/N”——当用户按下n/N键之后,程序立即结束运行。请问怎么办呢?可不可以注册事件进行捕获

解决方案

解决方案二:
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){stringoutput="";charinput='';while(true){input=Console.ReadKey().KeyChar;if(input=='q'||input=='Q')break;if((int)input==8&&output.Length>0)output=output.Substring(0,output.Length-1);elseif((int)input==13){output=newstring(output.GroupBy(x=>x.ToString().ToLower()).Select(x=>x.First()).ToArray());}elseoutput+=input;Console.Clear();Console.Write(output);}}}}

解决方案三:
你可以创建一个winform不显示,捕获keydown事件。也可以用下面这个方法:(声明:网上拷贝的)必须使用Windowsapi,用键盘钩子函数截取键盘按键记录,然后把这个EXE程序注册为系统服务就能自动运行了,C#中键盘钩子的使用publicclassWin32Hook{[DllImport("kernel32")]publicstaticexternintGetCurrentThreadId();[DllImport("user32",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]publicstaticexternintSetWindowsHookEx(HookTypeidHook,HOOKPROClpfn,inthmod,intdwThreadId);publicenumHookType{WH_KEYBOARD=2}publicdelegateintHOOKPROC(intnCode,intwParam,intlParam);publicvoidSetHook(){//setthekeyboardhookSetWindowsHookEx(HookType.WH_KEYBOARD,newHOOKPROC(this.MyKeyboardProc),0,GetCurrentThreadId());}publicintMyKeyboardProc(intnCode,intwParam,intlParam){//在这里放置你的处理代码return0;}}使用方法可以在Form的构造函数里放入Win32Hookhook=newWin32Hook();hook.SetHook();

时间: 2024-08-02 06:57:53

求助:C#控制台应用程序中,如何即时地判断用户的键盘按键的相关文章

控制台输出-在Eclipse控制台中监听用户的键盘事件

问题描述 在Eclipse控制台中监听用户的键盘事件 最近在用java编写模拟一个人力资源管理系统,是在控制台实现的.其中有某个功能需要用户输入日期.日期是年月日一起输入的,我想在用户输完年份之后,控制台自动为用户打印出一个短横杠帮助用户输入月份.但是前提是用户还没有按下回车.怎样在用户键盘输入的过程中监听到用户目前已经输入几个字符?有没有大神给点建议. 解决方案 http://www.codeweblog.com/%E5%9C%A8javascript%E4%B8%AD%E7%9B%91%E5

在控制台应用程序中实现打印

程序|打印|控制 我在以前的一篇文章中曾介绍到过如何从控制台命令中捕获输出结果并将它放到剪贴板中.我常常需要从一些控制台命令中将文本输出结果打印出来,因此我对最后的例子进行了修改以使它支持打印. .NET打印框架对于使用MFC的人来说并不陌生:你只需建立一个PrintDocument对象并调用其Print()方法就行.PrintDocument对象会调用你建立的事件处理来打印每个页面.打印完所有页面之后,打印处理会设置一个标记并结束打印. 在这个新的例子中,我做了三个地方的改动.首先,我修改了存

C# 控制台应用程序中输出彩色字体

using System; class Example { public static void Main() { // Get a string array with the names of ConsoleColor enumeration members. String[] colorNames = ConsoleColor.GetNames(typeof(ConsoleColor)); // Display each foreground color except black on a

在ASP.NET中怎么用SESSION判断用户是否登录?(

代码很简单的,我把我平时写过的贴出来给大家看看:if (bResult == true)     //登录的用户名和密码正确    {     //保存登录的用户名     Session["LoginUser"] = FormatString.Replace(txtLoginUser.Text);  //这里就是给session赋值了.我对登录用户进行了一些安全处理     //转到管理首页     Response.Redirect("Admin_Index.Aspx&q

基于对话框程序中让对话框捕获WM_KEYDOWN消息的实现方法_C 语言

在对话框程序中,我们经常是利用对话框上的子控件进行命令响应来处理一些事件.如果我们想要让对话框(子控件的父窗口)类来响应我们的按键消息,我们可以通过ClassWizard对WM_KEYDOWN消息进行响应,当程序运行后,我们按下键盘上的按键,但对话框不会有任何的反应.这是因为在对话框程序中,某些特定的消息,例如按键消息,它们被Windows内部的对话框过程处理了(即在基类中完成了处理,有兴趣的读者可以查看MFC的源代码),或者被发送给子控件进行处理,所以我们在对话框类中就捕获不到按键的消息了.

【求助】如何修改程序运行中的数据并保存

问题描述 [求助]如何修改程序运行中的数据并保存 使用C/C++实现程序在执行时可以变更原始数据并保存,关闭以后再次执行该程序时,程序使用更改后的数据运行.(不是将修改后的数据保存在配置文件.或注册表里面.保存在原有的程序中) 解决方案 你这需求,我觉得不靠谱.一般来说都是存在加密文件的.比如xxx.db这个格式你可以自定义,但加密方法只有你知道,提取时解密即可

如何在Microsoft Visual Studio 2005中创建控制台应用程序

在 Visual Studio 2005 中创建控制台应用程序 在 Visual Studio 2005 中的"文件" 菜单上,指向"新建" 并单击"项目". 在"新建项目" 对话框中,选择一种语言,然后在"项目类型" 框中选择"Windows". 在"模板" 框中,选择"控制台应用程序" . 在"位置" 框中,键入指向应用程序

Visual studio 中win32控制台应用程序和空项目有什么却别?

问题描述 Visual studio 中win32控制台应用程序和空项目有什么却别? 如果你不知道有什么区别,可以先运行一下,这些代码. http://ask.csdn.net/questions/187617 可以正常的在win32控制台应用程序建的工程上运行. 在空项目,就会有帖子上的错误. 下边回答的空项目的图片传错了,应该是: 解决方案 空项目没有默认包含和使用的库,链接器也没有配置为控制台,这些都需要手工设置. 但是,你完全可以通过创建空项目,并且手工设置,达到和创建任何一种项目,包括

求大神指教-在c++控制台程序中读取文本文件

问题描述 在c++控制台程序中读取文本文件 我是新手,刚刚入门,学校安排了一个暑期项目,做一个球员信息管理系统. 把数据存储在txt文件中,怎样才可以有序的读取我要找的数据,包括球员的赛季数据个个人信息.... 解决方案 C++读取文本文件 解决方案二: 那要看你是怎么存储的数据,什么顺序存储的就怎么读.可以一个球员的信息占一行,或者xxx个字节.然后一个一个球员的读出来. 解决方案三: 最简单的,可以用json文件等来存取,这样用jsoncpp等可以方便读取,解析数据. 解决方案四: 先定义一