SendKeys.SendWait(“”);引发StackOverFlowException

时间:2019-10-08 05:58:39

标签: c# wpf

我正在尝试使用.Net Framwork在wpf中制作虚拟键盘,并尝试sendkey.sendwait空格键。

我搜索了Internet并实现了“”,因为sendkeys sendwait方法没有空格键。但是等待了2分钟后,它抛出了stackoverflowexception。

private void Button_Click4(object sender, RoutedEventArgs e)
{
    System.Windows.Controls.Button TappedButton = (System.Windows.Controls.Button)sender;
    switch (TappedButton.Tag.ToString())
    {
       case "space":
            SendKeys.SendWait(" ");
            break;

        case "backspace":
            SendKeys.SendWait("{BACKSPACE}");
            break;
    }
}

1 个答案:

答案 0 :(得分:1)

它之所以创建stackoverflowexception,是因为它使用我添加到SendKeys.SendWait(“”);上的我的空间引用来一次又一次单击空间。正如布拉德利·史密斯(Bradley Smith)在评论中提到的那样。

这是因为因为键盘的焦点位于当前窗口上,所以我使用此代码使窗口无法聚焦,从而解决了问题。

        protected override void OnSourceInitialized(EventArgs e)
        {
            base.OnSourceInitialized(e);
            WindowInteropHelper helper = new WindowInteropHelper(this);
            SetWindowLong(helper.Handle, GWL_EXSTYLE,
                GetWindowLong(helper.Handle, GWL_EXSTYLE) | WS_EX_NOACTIVATE);
        }

        private const int GWL_EXSTYLE = -20;
        private const int WS_EX_NOACTIVATE = 0x08000000;

        [DllImport("user32.dll")]
        public static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);

        [DllImport("user32.dll")]
        public static extern int GetWindowLong(IntPtr hWnd, int nIndex);