<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title>DongPad</title><link>http://www.dongpad.com</link> <description>Every day is a new beginning!</description><copyright>2.0 beta 03</copyright> <language>zh-cn</language><item><title>KeyDow,KeyPress&KeyUp; KeyCode,KeyData&KeyValue</title><description><![CDATA[<P>Trackback:http://www.cnblogs.com/stan0714/archive/2008/10/12/1309573.html</P>
<P>1.这三个事件的顺序是怎么样的？</P>
<P>2.KeyDown 触发后，KeyUp是不是一定触发？</P>
<P>3.三个事件的定义</P>
<P>4.KeyDown、KeyUp 和KeyPress 之间的区别</P>
<P>5.如何区分是否按的是小键盘？</P>
<P>6.PrScrn按键三个事件能够捕获吗？</P>
<P>7.{菜单键}和{开始键}KeyPress能够捕获吗？</P>
<P>8.如何捕获系统的组合键？</P>
<P>9.通过什么方式捕获PrScrn按键事件？</P>
<P>（一）键事件按下列顺序发生： </P>
<OL>
<LI>
<P><STRONG>KeyDown</STRONG></P>
<LI>
<P><STRONG>KeyPress</STRONG></P>
<LI>
<P><STRONG>KeyUp</STRONG></P></LI></OL>
<P><STRONG></STRONG> （二）KeyDown触发后，不一定触发KeyUp，当KeyDown 按下后，拖动鼠标，那么将不会触发KeyUp事件。</P>
<P> （三）定义</P>
<P>KeyDown：在控件有焦点的情况下按下键时发生。</P>
<P>KeyPress：在控件有焦点的情况下按下键时发生。(下面会说和KeyDown 的区别)</P>
<P>KeyUp：在控件有焦点的情况下<STRONG>释放</STRONG>键时发生。</P>
<P> （四）KeyPress 和KeyDown 、KeyPress之间的区别</P>
<P><FONT face=Verdana>          1.KeyPress主要用来捕获数字(<STRONG>注意：包括Shift+数字的符号</STRONG>)、字母（<STRONG>注意：包括大小写</STRONG>）、小键盘等.除了F1-12、Caps Lock、SHIFT、Ctrl、Alt、Win、Insert、Home、PgUp、Delete、End、PgDn、PrScrn、ScrollLock、Pause、NumLock、{菜单键}、和方向键外的ANSI字符(Jack注:Esc和Backspace可以被捕捉到)<BR>             KeyDown 和KeyUp 通常可以捕获键盘除了PrScrn所有按键(这里不讨论特殊键盘的特殊键）(Jack注:经测试PrScrn可以被捕捉)</FONT></P>
<P><FONT face=Verdana></FONT>           2.KeyPress 只能捕获单个字符</P>
<P>               KeyDown 和KeyUp 可以捕获组合键。</P>
<P>          3.KeyPress 可以捕获单个字符的大小写</P>
<P>          4.KeyDown和KeyUp 对于单个字符捕获的<FONT face=Verdana>KeyValue</FONT> 都是一个值，也就是不能判断单个字符的大小写。</P>
<P>          5.KeyPress 不区分小键盘和主键盘的数字字符。</P>
<P>               KeyDown 和KeyUp 区分小键盘和主键盘的数字字符。</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN class=apple-style-span><S style="text-line-through: double"><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">6.</SPAN></S></SPAN><SPAN class=apple-style-span><S style="text-line-through: double"><SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">其中</SPAN></S></SPAN><SPAN class=apple-style-span><S style="text-line-through: double"><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">PrScrn </SPAN></S></SPAN><SPAN class=apple-style-span><S style="text-line-through: double"><SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">按键</SPAN></S></SPAN><SPAN class=apple-style-span><S style="text-line-through: double"><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">KeyPress</SPAN></S></SPAN><SPAN class=apple-style-span><S style="text-line-through: double"><SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">、</SPAN></S></SPAN><SPAN class=apple-style-span><S style="text-line-through: double"><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">KeyDown</SPAN></S></SPAN><SPAN class=apple-style-span><S style="text-line-through: double"><SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">和</SPAN></S></SPAN><SPAN class=apple-style-span><S style="text-line-through: double"><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">KeyUp </SPAN></S></SPAN><SPAN class=apple-style-span><S style="text-line-through: double"><SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">都不能捕获。</SPAN></SPAN></S></SPAN></P>
<P> （五）系统组合键的判定</P>
<P>在使用键盘的时候，通常会使用到CTRL+SHIFT+ALT 类似的组合键功能。对于此，我们如何来判定？</P>
<P>(Jack注:经测试,这3个功能键必须必须通过KeyDown来捕捉,对应的功能键+普通键也可以被捕捉,但是需要使用KeyCode来进行判定,下面将补出KeyCode&KeyValue&KeyData的区别)</P>
<P> </P> 
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><S style="text-line-through: double"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">（六）捕获<SPAN lang=EN-US>PrScrn</SPAN>按键事件 <SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></S></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><S style="text-line-through: double"><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> </SPAN></S><S style="text-line-through: double"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">通过一种钩子的方式可以判定<SPAN lang=EN-US>PrScrn </SPAN>按键事件，钩子可以获取任何键盘事件。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></S></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><S style="text-line-through: double"><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">     </SPAN></S><S style="text-line-through: double"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">这里给出<SPAN lang=EN-US>CodeProject </SPAN>上面的开源代码的解决方案。大家有兴趣自己研究吧：）。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></S></P>
<P>Hook可以研究1下 <A title="Global System Hooks in .NET" href="http://www.codeproject.com/KB/system/globalsystemhook.aspx">Global System Hooks in .NET</A></P>
1,KeyCode   
  获取   KeyDown   或   KeyUp   事件的键盘代码  <br/> 
  2,KeyData   
  获取   KeyDown   或   KeyUp   事件的键数据。   <br/>
  3,KeyValue   
  获取   KeyDown   或   KeyUp   事件的键盘值。<br/>
下例通过判断是否按下alt+F4为例,1&2都可以:<br/>
//1.if (e.Alt &&  e.KeyCode== Keys.F4)<br/>
//2.<br/>
if (e.KeyData == (Keys)((int)Keys.Alt + (int)Keys.F4))<br/>
{
    this.Text = "zzzz down";<br/>
    e.Handled = true;<br/>
}
]]></description><author>Jack</author><link>http://www.dongpad.com/CSharp-20081126-119.html</link><pubdate>2008-11-26 15:50:30</pubdate></item></channel></rss>
