请问ABCDEF等键同时按,这样的功能不能实现,Keydown的e.KeyCode好像只能捕到一个键,另外,会不会有多键冲突的问题

Ptrtoptr 2014-01-04 09:54:48
请问ABCDEF等键同时按,这样的功能不能实现,
Keydown的e.keycode好像一次只能捕到一个键,
比如:
private void Multi_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyCode == Keys.A)
MessageBox.Show("A"); //只能监听到一个键被按下.
}
能不能
同时按下ABCDEF.
请高手看下


另外,会不会有多键冲突的问题
...全文
297 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ptrtoptr 2014-01-05
  • 打赏
  • 举报
回复
我是说同时按下多个键, 不是说组合键 我试了GetVirtualKeyCode 但是只能是两个键 比如 Keys.A Keys.B 再加个Keys.C就不行了
Ptrtoptr 2014-01-05
  • 打赏
  • 举报
回复
var code = GetVirtualKeyCode(Key.A);if ((array[code] & 0x80) != 0) { // It's pressed} else { // It's not pressed 这个我试了只能捕到2个键,三个键就不行了... 是不是键盘硬件的问题
鏡椛氹鈅 2014-01-05
  • 打赏
  • 举报
回复
我给你个思路,键盘的按键在按下的瞬间会有时差(跟键长有关系),不可能是你同时按下ABCD时,键盘传出的值就是ABCD 有可能是ACBD ,ADBC等等所以只要判断你要的几个键是否被按下就行,不要特别要求顺序,代码如下:VB.NET写的你可以借鉴下.

Dim strKeys As String'所有被按下的键值
Private Sub Form2_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
        Dim strNowKey As String = e.KeyChar '获取当前被按下的键值
        strKeys = strKeys & strNowKey
End Sub

    Private Sub Form2_KeyUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyUp
        MessageBox.Show(strKeys)
        strKeys = Nothing
    End Sub
代码是直接触发窗体KeyPress事件.
threenewbee 2014-01-04
  • 打赏
  • 举报
回复
一起按不可以,但是可以先按第一个,再按第二个。 VS中有很多这样的快捷键。比如Ctrl+W,P打开属性窗格。 你可以关闭对象属性窗格(一般在右下角),然后按下Ctrl,按W,不要松开Ctrl,再按P。
小猪八Q 2014-01-04
  • 打赏
  • 举报
回复

var code = GetVirtualKeyCode(Key.A);
if ((array[code] & 0x80) != 0) {
  // It's pressed
} else { 
  // It's not pressed
}
仔细读读啊,都已经告诉你了,你需要通过这个来判断,在这里你要判断那个键就按照这个来执行就可以了,如果要判断所有的,那就循环处理吧
  • 打赏
  • 举报
回复
引用 1 楼 wpfLove 的回复:
http://stackoverflow.com/questions/10484085/get-all-keys-that-are-pressed 这个应该可以解决你的问题
这个页面关键性的代码是这几句: [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool GetKeyboardState(byte [] lpKeyState); var array = new byte[256]; GetKeyboardState(array); public static byte GetVirtualKeyCode(Key key) { int value = (int)key; return (byte)(value & 0xFF); }
BillLamian 2014-01-04
  • 打赏
  • 举报
回复
路过·············
  • 打赏
  • 举报
回复
试了下,可以使用alt、ctrl、shift这三个组合键,但别的键组合使用不被识别
小猪八Q 2014-01-04
  • 打赏
  • 举报
回复

110,541

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧