gpt4 book ai didi

c# - UI 自动化 - 为另一个应用程序的 TextBox 设置文本

转载 作者:行者123 更新时间:2023-12-03 20:15:26 26 4
gpt4 key购买 nike

我有两种形式。当单击其中一个按钮时,我想打开另一个按钮并在其中填充一个文本框。我尝试使用下面的代码,但它给出了“不支持的模式”的错误。

这是我的代码:

private void button1_Click(object sender, EventArgs e)
{
string automationId = "Form1";
string newTextBoxValue = "user1";
var condition = new PropertyCondition(AutomationElement.AutomationIdProperty, automationId);
var textBox = AutomationElement.RootElement.FindFirst(TreeScope.Subtree, condition);
ValuePattern vPattern = (ValuePattern)textBox.GetCurrentPattern(ValuePattern.Pattern);
vPattern.SetValue(newTextBoxValue);
}

最佳答案

您应该首先检查 ValuePattern 模式的可用性:

  • 如果 ValuePattern 模式可用,请使用其 SetValue 方法。
  • 否则,请使用以下解决方案之一:
    1. 将焦点设置在控件上,并使用SendKeys清除和设置文本。
    2. 或者使用SendMessage并发送WM_SETTEXT消息来设置文本,

示例

var notepad = System.Diagnostics.Process.GetProcessesByName("notepad").FirstOrDefault();
if (notepad != null)
{
var root = AutomationElement.FromHandle(notepad.MainWindowHandle);
var element = root.FindAll(TreeScope.Subtree, Condition.TrueCondition)
.Cast<AutomationElement>()
.Where(x => x.Current.ClassName == "Edit" &&
x.Current.AutomationId == "15").FirstOrDefault();
if (element != null)
{
if (element.TryGetCurrentPattern(ValuePattern.Pattern, out object pattern))
{
((ValuePattern)pattern).SetValue("Something!");
}
else
{
element.SetFocus();
SendKeys.SendWait("^{HOME}"); // Move to start of control
SendKeys.SendWait("^+{END}"); // Select everything
SendKeys.SendWait("{DEL}"); // Delete selection
SendKeys.SendWait("Something!");

// OR
// SendMessage(element.Current.NativeWindowHandle, WM_SETTEXT, 0, "Something!");
}
}
}

如果使用 SendMessage,请确保将以下声明添加到类中:

[System.Runtime.InteropServices.DllImport("User32.dll")]
static extern int SendMessage(int hWnd, int uMsg, int wParam, string lParam);
const int WM_SETTEXT = 0x000C;

您可以阅读该方法:

关于c# - UI 自动化 - 为另一个应用程序的 TextBox 设置文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53834578/

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