Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在WPF中模拟击键,但在应用程序之外?_C#_Wpf_Keyboard Events - Fatal编程技术网

C# 如何在WPF中模拟击键,但在应用程序之外?

C# 如何在WPF中模拟击键,但在应用程序之外?,c#,wpf,keyboard-events,C#,Wpf,Keyboard Events,目前我使用这个剪贴代码是谷歌搜索的结果 如果我使用Keyboard.Focus(TxtBox),它会工作;TxtBox将充满击键 但我真正想要实现的是: 1.绘制方框(例如,我在excel单元格之一上绘制方框) 2.单击方框坐标(更改键盘焦点) 3.向单击的excel单元格发送击键 我已经完成了第一步和第二步。 但是我找不到第三步的方法 不知何故,单击事件(使用鼠标事件)可能不会自动更改键盘焦点 那么,如果可能的话,如何使用坐标来改变键盘焦点呢? 或者我可以从坐标中得到IIInputElem

目前我使用这个剪贴代码是谷歌搜索的结果

如果我使用Keyboard.Focus(TxtBox),它会工作;TxtBox将充满击键

但我真正想要实现的是:

  • 1.绘制方框(例如,我在excel单元格之一上绘制方框)
  • 2.单击方框坐标(更改键盘焦点)
  • 3.向单击的excel单元格发送击键
我已经完成了第一步和第二步。 但是我找不到第三步的方法

不知何故,单击事件(使用鼠标事件)可能不会自动更改键盘焦点

那么,如果可能的话,如何使用坐标来改变键盘焦点呢? 或者我可以从坐标中得到IIInputElement?然后将键盘焦点设置为它。 当然,所有这些都在WPF的主应用程序窗口之外

找到了

地址:

它在大多数情况下都有效

我说,在大多数情况下,因为它可以在其他窗口(如excel应用程序)中键入,但在其他自定义应用程序窗口中键入。可能会有这样一种情况,那是行不通的

希望它能帮助其他人,寻找同样的东西。

找到了

地址:

它在大多数情况下都有效

我说,在大多数情况下,因为它可以在其他窗口(如excel应用程序)中键入,但在其他自定义应用程序窗口中键入。可能会有这样一种情况,那是行不通的


希望它对其他人有所帮助,寻找同样的东西。

将击键添加到另一个当时具有焦点的控件,然后只更新目标的文本?@mahlatse我不这么认为。我的目标在wpf应用程序窗口之外。在我的示例中,它是excel单元格。如何更新excel文本?如果它是excel单元格,并且您知道单元格/网格,您可以使用第三方库(如EPPLUS)通过加载来更新excel,只是不确定您是否会重新加载excel文件。@mahlatse谢谢您的想法。但这里的excel只是一个简单解释我试图实现的目标的例子。但它不会是一个excel单元格。它应该是任何可以通过文本输入的内容。如记事本、搜索栏等。如果它是您创建的,那么它就更简单,如果它是您无法控制的,您可能需要做一些神奇的开发[假设它们允许命令行参数,等等]将击键添加到另一个当时具有焦点的控件,然后只更新目标的文本?@mahlatse我不这么认为。我的目标在wpf应用程序窗口之外。在我的示例中,它是excel单元格。如何更新excel文本?如果它是excel单元格,并且您知道单元格/网格,您可以使用第三方库(如EPPLUS)通过加载来更新excel,只是不确定您是否会重新加载excel文件。@mahlatse谢谢您的想法。但这里的excel只是一个简单解释我试图实现的目标的例子。但它不会是一个excel单元格。它应该是任何可以通过文本输入的内容。如记事本、搜索栏等。如果它是您创建的,那么它就更简单,如果它是您无法控制的,您可能需要做一些神奇的开发[假设它们允许命令行参数,等等]
var eventArgs = new TextCompositionEventArgs(Keyboard.PrimaryDevice,
                new TextComposition(InputManager.Current, Keyboard.FocusedElement, "A"));
eventArgs.RoutedEvent = TextInputEvent;             
var flag = InputManager.Current.ProcessInput(eventArgs);