为什么我的应用程序只捕获键事件,如果它的焦点

本文关键字:如果 焦点 事件 应用程序 我的 为什么 | 更新日期: 2023-09-27 18:12:57

我正在做一个项目,我可以计算正在按下的键,这样我使用keydown事件。

问题在这里

1. 它只在应用程序集中的情况下捕捉按键。它不必在文本框内,文本框只是在那里显示它的工作。如何使它最小化,同时还能捕获键?(在gif中,你可以看到我没有在文本框中输入,直到结束)

  • 我如何使它捕获非大写字母?我只是简单地转换它吗?
  • 这里有一个gif向你展示它是如何工作的http://recordit.co/IKubOT0pin

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    namespace testkeydown
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
            private void Window_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.Key == Key.A)
                {
                    textBox.AppendText("A");
                }
            }
        }
    }
    

    为什么我的应用程序只捕获键事件,如果它的焦点

    第一部分:因为事件是窗口发出的事件。如果希望"全局"捕获键事件,则需要另一种方法,例如使用钩子,如下所示:

    在WPF/c#中使用全局键盘钩子(WH_KEYBOARD_LL)

    第二部分:如果您想以正确的大小写捕获键(在窗口/应用程序中),您可以在TextCompositionManager上连接一个事件,如下所示:

        // on load or startup or something, set the handler
        TextCompositionManager.AddTextInputHandler(this,
        new TextCompositionEventHandler(OnTextComposition));
    
        // then the actual handler
        private void OnTextComposition(object sender, TextCompositionEventArgs e)
        {
            Console.WriteLine(e.Text);
        }
    

    和e.Text将有实际的"字母"键入

    您想要的东西被称为keyLogger应用程序。你必须谷歌键查找或键记录器。

    有很多网站会教你怎么做。其中之一是:

    http://null-byte.wonderhowto.com/how-to/create-simple-hidden-console-keylogger-c-sharp-0132757/