⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csdn_文档中心_找出键盘上当前按下的键.htm

📁 csdn10年中间经典帖子
💻 HTM
📖 第 1 页 / 共 2 页
字号:
          </TD></TR>
        <TR>
          <TD align=middle height=5></TD>
          <TD align=middle width=500></TD></TR>
        <TR>
          <TD align=middle bgColor=#003399><FONT color=#ffffff>关键字</FONT></TD>
          <TD width=500>&nbsp;&nbsp;&nbsp;&nbsp;找出键盘上当前按下的键</TD></TR>
        <TR>
          <TD align=middle height=5></TD>
          <TD align=middle width=500></TD></TR>
        <TR>
          <TD align=middle bgColor=#003399 height=10><FONT 
            color=#ffffff>出处</FONT></TD>
          <TD height=10>&nbsp;&nbsp;&nbsp;&nbsp;<A 
            href="http://www.vckbase.com/article/system/11.htm">http://www.vckbase.com/article/system/11.htm</A></TD></TR>
        <TR>
          <TD align=middle height=10></TD>
          <TD height=10></TD></TR></TBODY></TABLE><!--文章说明信息结束//-->
      <TABLE border=0 width=600>
        <TBODY>
        <TR>
          <TD align=left><BR>
            <TABLE border=0 cellPadding=0 cellSpacing=0 class=big 
              width="100%"><TBODY>
              <TR>
                <TD>
                  <P align=center><B></B>&nbsp;</P>
                  <P><BR><FONT 
                  color=#006633>一、问题的提出</FONT><BR>  有的程序员希望能够识别所有键盘上按下的键,以便在应用程序中能够正确地处理它。特别希望知道的是用户是否按下了键 
                  SHIFT、CTRL、ALT、NUMLOCK 或 CAPSLOCK。对于键 SHIFT、CTRL 和 ALT,程 
                  序员关心的用户是否当前按下此键;对于键 NUMLOCK 和 
                  CAPSLOCK,程序员只关心用户是否在应用程序取得控制之前选取了此键。<BR><BR><FONT 
                  color=#006633>二、解决方法</FONT><BR>  这是一个非常有趣的问题。如何在多任务、多窗口系统上确定键盘上哪个键是按下的,以使键盘状态对 
                  所有应用程序来说都是一致的呢?由于有的键可能在另外的窗口中被按下,所以不能简单地捕捉键的按下操作。由于键 NUMLOCK 
                  有可能在应用程序启动之前已被按下,所以也不能简单地监视此键被按下。<BR>  因此,要完成此任务所需要的是一个能够随时获取键盘状态的方法。幸运的是,Windows 
                  API 对此问题提供了一个简单的解决方案,即 API 函数 GetKeyboardState。<BR><BR><FONT 
                  color=#006633>三、实现步骤</FONT><BR>  按照下列步骤实现一个例子程序。运行此例子程序,从菜单 
                  Keyboard 中选择菜单项 Keys Pressed, 
                  将弹出一个显示一系列键的对话框,每个键旁边没有文本。按下几个键并点击按钮 Show,则列表右边的状 
                  态值将改变以反映这些键的当前状态。<BR><BR>  实现例子程序的具体步骤如下:<BR>  1.在 Visual C++ 
                  中,利用 AppWizard 创建新的项目文件,并命名此项目文件为 LD18.MAK.<BR>  2.进入 
                  AppStudio 并创建新的对话框,在对话框中,添加五个文本域,标题分别为 Control Key、 Shift 
                  Key、Alt Key、Num Lock Key 和 Caps Lock 
                  Key。<BR>  3.与刚创建的五个文本域对齐,创建另外五个文本域。标题为空,ID 分别为:ID_CONTROL_KEY、 
                  ID_SHIFT_KEY、ID_ALT_KEY、ID_NUM_LOCK_KEY 和 
                  ID_CAPS_LOCK_KEY。<BR>  4.改变对话框的标题为 View Key 
                  States。<BR>  5.添加两个按钮,标题分别为 Show 和 Close,ID 分别为 ID_SHOW 和 
                  IDOK。<BR>  6.进入 ClassWizard,选择按钮 Add Class。命名对话框类为 
                  CKeyShowDlg。<BR>  7.在 ClassWizard 中,从下拉列表中选择 CKeyShowDlg 
                  ,从列表对象中选择按钮 ID_SHOW, 从消息列表中选择消息 COMMAND,点击按钮 Add 
                  Function,函数命名为 OnShow。<BR>  8.在对象 CKeyShowDlg 的方法 OnShow 
                  中输入下列代码:<BR><BR><BR>void 
                  CKeyShowDlg::OnShow()&nbsp;<BR>{<BR>unsigned char 
                  kbuf[256];<BR>GetKeyboardState(kbuf);<BR><BR>if(kbuf[VK_CAPITAL]&amp;1)<BR>GetDlgItem(ID_CAPS_LOCK_KEY)-&gt;SetWindowText("On");<BR>else&nbsp;<BR>GetDlgItem(ID_CAPS_LOCK_KEY)-&gt;SetWindowText("Off");<BR><BR>if(kbuf[VK_SHIFT]&amp;128)<BR>GetDlgItem(ID_SHIFT_KEY)-&gt;SetWindowText("On");<BR>else&nbsp;<BR>GetDlgItem(ID_SHIFT_KEY)-&gt;SetWindowText("Off");<BR><BR>if(kbuf[VK_CONTROL]&amp;128)<BR>GetDlgItem(ID_CTRL_KEY)-&gt;SetWindowText("On");<BR>else&nbsp;<BR>GetDlgItem(ID_CTRL_KEY)-&gt;SetWindowText("Off");<BR><BR>if(kbuf[VK_MENU]&amp;128)<BR>GetDlgItem(ID_ALT_KEY)-&gt;SetWindowText("On");<BR>else&nbsp;<BR>GetDlgItem(ID_ALT_KEY)-&gt;SetWindowText("Off");<BR><BR>if(kbuf[VK_NUMLOCK]&amp;1)<BR>GetDlgItem(ID_NUM_LOCK_KEY)-&gt;SetWindowText("On");<BR>else&nbsp;<BR>GetDlgItem(ID_NUM_LOCK_KEY)-&gt;SetWindowText("Off");<BR>}<BR><BR>  9.进入 
                  AppStudio,在菜单 IDR_MAINFAME 中,添加新的菜单 Keyboard。在菜单 Keybosrd 中, 
                  添加菜单项 Keys Pressed,其 ID 为 ID_KEY_PRESSED。进入 ClassWizard,为对象 
                  ID_KEY_PRESSED 和 消息 COMMAND 添加新的函数,命名此函数为 
                  OnKeyPressed,并在此函数中添加下列代码:<BR><BR>void 
                  CMainFrame::OnKeyPressed()&nbsp;<BR>{<BR>CKeyShowDlg 
                  dlg;<BR><BR>dlg.DoModal();<BR>}<BR><BR>  10.在文件 MAINFRM.CPP 
                  的顶部添加下列行:<BR>#include 
                  "KeyShowDlg.h"<BR>  11.编译并运行此例子程序。<BR><BR><BR>用法<BR>  Windows 
                  API 函数 GetKeyboardState 返回键盘上每一键的状态。对于可以按下和松开的键,如 
                  SHIFT,CTRl,TAB 以及所有的字符键。键的”状态“或是高位设置(表示键被按下)或是高位清除(表 
                  示键未被按下,即松开的)。对于切换选择的键,如 NUM LOCK 或 CAPS LOCK,低位设置表示此键当前 
                  是选中(开)状态,低位清除表示此键当前是未选中(关)状态。<BR>  通过在预定时间检查键盘状态,可以随时得到被按下的任何键和所有键。例如:如果用户按下键 
                  CTRL-ALT-SHIFT-F10,则在键盘缓冲区将设置下列键值的高位:<BR>  VK_SHIFT<BR>  VK_CONTROL<BR>  VK_MENU(为 
                  ALT 键)<BR>  VK_F10<BR>  在线帮助或 include 文件 Windows.h 
                  中都列出了键盘上所有这些键的虚拟键码。</P></TD></TR></TBODY></TABLE>
            <P>&nbsp;</P>
            <P>&nbsp;</P><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
<TABLE align=center bgColor=#006699 border=0 cellPadding=0 cellSpacing=0 
width=770>
  <TBODY>
  <TR bgColor=#006699>
    <TD align=middle bgColor=#006699 id=white><FONT 
    color=#ffffff>对该文的评论</FONT></TD>
    <TD align=middle>
      <SCRIPT src="CSDN_文档中心_找出键盘上当前按下的键.files/readnum.htm"></SCRIPT>
    </TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1 
width=770>
  <TBODY>
  <TR>
    <TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16 
      hspace=1 src="CSDN_文档中心_找出键盘上当前按下的键.files/ico_pencil.gif" width=16> 
      </SPAN>&nbsp;&nbsp;&nbsp;&nbsp; NoneEQ <I>(2001-2-10 17:10:40)</I> </TD></TR>
  <TR>
    <TD bgColor=#ffffff colSpan=3 width=532><BR>windows的键值是Ctrl+ESC的键值 
  <BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1 
width=770>
  <TBODY>
  <TR>
    <TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16 
      hspace=1 src="CSDN_文档中心_找出键盘上当前按下的键.files/ico_pencil.gif" width=16> 
      </SPAN>&nbsp;&nbsp;&nbsp;&nbsp; NoneEQ <I>(2001-2-10 17:09:20)</I> </TD></TR>
  <TR>
    <TD bgColor=#ffffff colSpan=3 width=532><BR>是Ctrl+ESC的键值 
<BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1 
width=770>
  <TBODY>
  <TR>
    <TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16 
      hspace=1 src="CSDN_文档中心_找出键盘上当前按下的键.files/ico_pencil.gif" width=16> 
      </SPAN>&nbsp;&nbsp;&nbsp;&nbsp; yaomac <I>(2000-12-16 22:42:55)</I> </TD></TR>
  <TR>
    <TD bgColor=#ffffff colSpan=3 width=532><BR>How can I get keypress event 
      when my program don‘t get input focus? (How can I get keyboard and mouse 
      event from all windows?) yaomac@kali.com.cn <BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1 
width=770>
  <TBODY>
  <TR>
    <TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16 
      hspace=1 src="CSDN_文档中心_找出键盘上当前按下的键.files/ico_pencil.gif" width=16> 
      </SPAN>&nbsp;&nbsp;&nbsp;&nbsp; yaomac <I>(2000-12-16 22:40:13)</I> </TD></TR>
  <TR>
    <TD bgColor=#ffffff colSpan=3 width=532><BR>How can I get keypress event 
      when my program don‘t get input focus? (How can I get keyboard and mouse 
      event from all windows?) <BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1 
width=770>
  <TBODY>
  <TR>
    <TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16 
      hspace=1 src="CSDN_文档中心_找出键盘上当前按下的键.files/ico_pencil.gif" width=16> 
      </SPAN>&nbsp;&nbsp;&nbsp;&nbsp; programlover <I>(2000-12-15 9:41:55)</I> 
    </TD></TR>
  <TR>
    <TD bgColor=#ffffff colSpan=3 width=532><BR>91呀 <BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1 
width=770>
  <TBODY>
  <TR>
    <TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16 
      hspace=1 src="CSDN_文档中心_找出键盘上当前按下的键.files/ico_pencil.gif" width=16> 
      </SPAN>&nbsp;&nbsp;&nbsp;&nbsp; maren <I>(2000-12-14 17:20:50)</I> </TD></TR>
  <TR>
    <TD bgColor=#ffffff colSpan=3 
      width=532><BR>讲的这个估计很多人都已经知道,想知道键盘上的“Windows“键的值是多少,能否相告? 
  <BR></TD></TR></TBODY></TABLE><BR>
<DIV align=center>
<TABLE align=center bgColor=#cccccc border=0 cellPadding=2 cellSpacing=1 
width=770>
  <TBODY>
  <TR>
    <TH bgColor=#006699 id=white><FONT 
color=#ffffff>我要评论</FONT></TH></TR></TBODY></TABLE></DIV>
<DIV align=center>
<TABLE border=0 width=770>
  <TBODY>
  <TR>
    <TD>你没有登陆,无法发表评论。 请先<A 
      href="http://www.csdn.net/member/login.asp?from=/Develop/read_article.asp?id=2080">登陆</A> 
      <A 
href="http://www.csdn.net/expert/zc.asp">我要注册</A><BR></TD></TR></TBODY></TABLE></DIV><BR>
<HR noShade SIZE=1 width=770>

<TABLE border=0 cellPadding=0 cellSpacing=0 width=500>
  <TBODY>
  <TR align=middle>
    <TD height=10 vAlign=bottom><A 
      href="http://www.csdn.net/intro/intro.asp?id=2">网站简介</A> - <A 
      href="http://www.csdn.net/intro/intro.asp?id=5">广告服务</A> - <A 
      href="http://www.csdn.net/map/map.shtm">网站地图</A> - <A 
      href="http://www.csdn.net/help/help.asp">帮助信息</A> - <A 
      href="http://www.csdn.net/intro/intro.asp?id=2">联系方式</A> - <A 
      href="http://www.csdn.net/english">English</A> </TD>
    <TD align=middle rowSpan=3><A 
      href="http://www.hd315.gov.cn/beian/view.asp?bianhao=010202001032100010"><IMG 
      border=0 height=48 src="CSDN_文档中心_找出键盘上当前按下的键.files/biaoshi.gif" 
      width=40></A></TD></TR>
  <TR align=middle>
    <TD vAlign=top>百联美达美公司 版权所有 京ICP证020026号</TD></TR>
  <TR align=middle>
    <TD vAlign=top><FONT face=Verdana>Copyright &copy; CSDN.net, Inc. All rights 
      reserved</FONT></TD></TR>
  <TR>
    <TD height=15></TD>
    <TD></TD></TR></TBODY></TABLE></DIV>
<DIV></DIV><!--内容结束//--><!--结束//--></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -