【问题标题】:keyboard Events键盘事件
【发布时间】:2009-02-20 11:48:27
【问题描述】:

每当我在我的服务器系统中按下键时,我都会将该键事件发送到另一个系统,之后相应的操作应该在客户端机器上发生..帮助我找到更好的方法来解决这个问题

提前感谢

【问题讨论】:

    标签: c#


    【解决方案1】:

    如果我理解正确,那么您所拥有的听起来还不错。你是说:

    • 您有一个客户端服务器架构。
    • 在服务器上(可能是在命令控制台或管理应用程序上)您按下一个键。
    • 键对应一个动作。需要在客户端调用该操作。

    您可以使用异步 WCF 来实现这一点。有关更多信息,请参阅 herehere。看待这个问题的一种方法是作为分布式观察者模式。您的服务器是主体,客户端是观察者。


    更新:在 .Net 中处理关键事件

    您可以尝试在表单中添加 KeyDown 事件处理程序:

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Control & e.KeyCode == Keys.C)
        {
            MessageBox.Show( "Ctrl + C pressed" );
            // Swallow key event, i.e. indicate that it was handled.
            e.Handled = true;
        }
    }
    

    但是,如果您的表单上有任何控件,那么您将不会收到该事件。您可能需要做的是使用消息过滤器嗅探 Windows 消息。例如

    public class KeyDownMessageFilter : IMessageFilter
    {
        public const int WM_KEYDOWN = 0x0100;
    
        public bool PreFilterMessage(ref Message m)
        {
            if (m.Msg == WM_KEYDOWN)
            {
                // Key Down
                return true; // Event handled
            }
            return false;
        }
    }
    

    使用AddMessageFilter 方法将此消息过滤器添加到应用程序。如果您想检查是否按下了 CTRL 键以获得按键消息,请检查 lparam

    如果有任何不清楚的地方,请告诉我。

    【讨论】:

    • 你能告诉我如何从我的应用程序中获取组合键,如 Ctrl+c Ctrl+v 等......
    【解决方案2】:

    请向我们提供有关您正在尝试做的事情的更多详细信息。 为了模拟 Windows 窗体中的按键,我会使用 SendKeys 类。

    【讨论】:

    • 如何通过 SendKeys 使用发送值
    猜你喜欢
    • 2022-01-22
    • 2018-02-13
    • 2014-05-03
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多