gpt4 book ai didi

c# - ProcessCmdKey - 等待 KeyUp?

转载 作者:太空狗 更新时间:2023-10-29 22:20:56 40 4
gpt4 key购买 nike

我在 WinForms 应用程序中遇到以下问题。我正在尝试实现热键,我需要在控件处于事件状态时处理键消息,无论焦点是否位于该控件内的文本框等。

覆盖 ProcessCmdKey 对此非常有效,并且完全符合我的要求,但有一个异常(exception):

如果用户按下某个键并保持按下状态,ProcessCmdKey 会持续触发 WM_KEYDOWN 事件。

然而,我想要实现的是,用户必须在另一个热键操作触发之前再次释放按钮(因此,如果有人坐在键盘上,它不会导致连续的热键事件)。
但是,我找不到在哪里捕获 WM_KEYUP 事件,所以我可以设置一个标志是否应该再次处理 ProcessCmdKey 消息?

这里有人可以帮忙吗?

谢谢,

汤姆

最佳答案

我认为这很简单,只需查看按键的重复次数即可。如果使用修饰符则不起作用。您还需要看到 key 上升,这需要实现 IMessageFilter。这有效:

public partial class Form1 : Form, IMessageFilter {
public Form1() {
InitializeComponent();
Application.AddMessageFilter(this);
this.FormClosed += (s, e) => Application.RemoveMessageFilter(this);
}
bool mRepeating;
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if (keyData == (Keys.Control | Keys.F) && !mRepeating) {
mRepeating = true;
Console.WriteLine("What the Ctrl+F?");
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
public bool PreFilterMessage(ref Message m) {
if (m.Msg == 0x101) mRepeating = false;
return false;
}
}

关于c# - ProcessCmdKey - 等待 KeyUp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2434834/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com