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

2024-03-25

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

这是我的代码:

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图案:

  • If the ValuePattern模式可用,使用其SetValue method.
  • Else use one of the following solutions:
    1. 将焦点集中在控制和使用上SendKeys清除和设置文本。
    2. Or Use SendMessage并且寄出WM_SETTEXT设置文本的消息,

Example

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;

您可以阅读有关该方法的信息:

  • 使用 UI 自动化将内容添加到文本框 https://learn.microsoft.com/en-us/dotnet/framework/ui-automation/add-content-to-a-text-box-using-ui-automation
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UI 自动化 - 为另一个应用程序的文本框设置文本 的相关文章

  • 如何使用Task.WhenAny并实现重试

    我有一个创建多个基于 I O 的任务的解决方案 我正在使用Task WhenAny 来管理这些任务 但通常许多任务会由于网络问题或请求限制等原因而失败 我似乎找不到一个解决方案 使我能够在使用时成功重试失败的任务Task WhenAny 方
  • 在 C++ 中,严格别名规则中的“访问”是什么意思?

    3 10 10 说 如果一个程序试图access通过除以下类型之一之外的泛左值存储对象的值 行为未定义 然而 术语 访问 并没有在任何地方定义 在这种情况下这意味着read or 读取或修改 在 C 标准中 它被明确定义为读取或修改 然而在
  • C# - 如何将 IntPtr 缓冲区数据保存到文件(最快的方法)?

    我使用此代码将非托管代码中的 IntPtr 缓冲区中的字节保存到文件中 这是一个简单的回调函数 private void callback IntPtr buffer int length byte bytes new byte lengt
  • 尝试将元素推入向量

    在头文件 我没有编写 中 已经定义了一个结构体 如下所示 struct MemoryMessage public boost counted base public FastAlloc explicit MemoryMessage Memo
  • c++11 中的 std::thread 问题

    我在尝试从标准模板库编译具有多线程的程序时遇到一些麻烦 当我尝试编译以下程序时 它返回一个晦涩的错误 include
  • 我应该使用函数还是无状态函子?

    这两段代码做同样的事情 如您所见 它将用于排序函数 哪个更好 我通常写后一种 但我看到一些程序员像以前那样做 struct val lessthan binary function
  • 使用经度和纬度查找给定距离内的所有附近客户

    我有一个包含客户经度和纬度的数据库 我有一个搜索表单 用户将在其中输入日志 纬度 距离下拉列表包含 50 英里 100 英里 当用户单击搜索时 我想编写一个 linq 查询从数据库中获取此距离半径内的所有客户 如何使用 C 和 linq 来
  • Xamarin 无法从异步获取实例

    我编写了一个通过蓝牙连接到 ESP32 的 Xamarin Forms 应用程序 现在我想从 MainPage xaml 页面的 CustomControl JoystickControl 获取值 我已经这样尝试过了 MainPage xa
  • 让 WIX 在项目中包含引用

    我对 WiX 和设置自定义安装程序完全陌生 所以我对问题的主题表示歉意 我有一个内部业务应用程序 日记 它构建并运行良好 因此我按照教程 官方文档添加 WiX 项目并引用日记的 csproj 然后构建并运行这个最基本版本的 WiX 安装程序
  • 发生错误。", ExceptionMessage: "提供的 'HttpContent' 实例无效

    尝试将文件添加到 http 休息调用时出现此错误 responseJson 消息 发生错误 ExceptionMessage 提供了无效的 HttpContent 实例 它确实 正在使用 多部分 参数名称 内容 异常类型 System Ar
  • 标准头文件中的 C 编译器错误 - 未定义的 C++ 定义

    我正在尝试编译 C 程序 但收到许多错误 这些错误是在标准 C 头文件 inttypes h stdio h stat h 等 中遇到的 错误的来源是以下未定义的常量 BEGIN DECLS END DECLS BEGIN NAMESPAC
  • 为什么 MISRA:2012 需要函数原型?

    我想知道为什么 MISRA 2012 需要函数原型 在下面的示例中 这两个原型并不是真正必要的 include
  • 如何在 Xamarin.Mac 中执行终端命令并读入其输出

    我们正在编写一个 Xamarin Mac 应用程序 我们需要执行像 uptime 这样的命令 并将其输出读取到应用程序中进行解析 这可以做到吗 在 Swift 和 Objective C 中都有 NTask 但我似乎无法在 C 中找到任何示
  • 如何带参数调用外部程序?

    我想在我的代码中调用一个 Windows 程序 并使用代码本身确定的参数 我不想调用外部函数或方法 而是调用 WinXP 环境中的实际 exe 或批处理 脚本文件 C 或 C 将是首选语言 但如果使用任何其他语言更容易完成此操作 请告诉我
  • 无论表单上的焦点控件如何,如何捕获 Keys.F1?

    我使用了 KeyDown 事件和一些简单的代码 例如if e KeyCode Keys F1 捕获在表单上按下 F1 但如果表单上有一些文本框 或者表单上有一些带有 Dock Fill 的电子表格 则上面的代码将毫无用处并且不执行任何操作
  • 我可以在C中直接比较int和size_t吗?

    我可以比较一个int and a size t像这样的变量 int i 1 size t y 2 if i y Do something 或者我必须输入其中之一 只要满足以下条件 它就是安全的int为零或正数 如果它是负数 并且size t
  • 将参数从 Web 表单传递到 Crystal 报表

    我有一份报告 我想将其显示在网络表单上 没有参数的报告运行良好 带参数的报告让我很头疼 这是我在 BindReport 方法中编写的代码 该代码在表单的页面加载事件上调用 ReportDocument rpt new ReportDocum
  • #define, #ifdef #undef #endif

    我有以下代码 define PROC ADD void main void while 1 ifdef PROC ADD Do this code here then undefined it to run the code in the
  • 什么是多重重继承?

    我将以下称为 多重重新继承 直接继承一个类一次 并通过继承其一个或多个后代来间接继承一次或多次 通过继承一个类的两个或多个后代来间接继承一个类两次或多次 我想知道它是否存在以及如何明确访问嵌入的子对象 1 Professional C 2n
  • 使用 wmi 获取活动会话(Win32_LogonSession 还返回非活动/旧会话)

    有没有办法只显示 wmi 的活动会话 问题是 Win32 LogonSession 还显示不活动 断开连接的会话 ManagementScope scope new ManagementScope ManagementPath Defaul

随机推荐

  • Firebase“Parcelable 遇到 IOException 写入可序列化对象”,对象包含 DocumentReference 的 ArrayList

    我正在尝试传递到另一个活动User包含 Firestore Arraylist 的对象DocumentReference当我开始活动时 我遇到了这个异常 我没有使用 Parceleable 所以您能否确认此错误是由于要传递的对象的复杂性造成
  • TFS 集合级别的自定义安全组

    我们有一组开发人员 测试人员和 BA 他们将为集合下的 30 多个项目工作 因此不要为每个项目添加他们 而是希望在集合级别创建安全组 以便每个人都可以访问集合下的所有项目 在 TFS 上 我们希望在集合级别拥有自定义组 例如开发人员 测试人
  • VBA自动将.Range更改为.range

    我一直在编写一个 Excel 宏来帮助我在工作中处理数据 现在我已经完成了代码的编写 但我不断收到错误 因为 Microsoft Visual Basic 不断将 Range 更改为 range 每当这样做时 我都会收到编译错误 因为该方法
  • 为什么 z 索引不起作用?

    所以如果我理解的话z index正确的是 在这种情况下它会是完美的 我想将底部图像 标签 卡片 放置在其上方的 div 下方 所以你看不到锋利的边缘 我该怎么做呢 z index 1 on the image tag card or z i
  • 发送者和接收者根据请求通过 ssh 传输文件?

    我创建了一个程序 它迭代一堆文件并调用其中的一些文件 scp
  • 如何将字符串的元素放入具有特定行为的列表中

    list1 A B list2 1 1 1 2 1 3 1 4 2 1 2 2 2 3 2 4 我需要我的输出 1 1 1 2 1 3 1 4 2 1 2 2 2 3 2 4 现在如果我知道 子列表 1 的长度 4 sublist2 的长度
  • EF Code First 延迟加载不起作用

    我首先使用 EF6 的代码 但似乎无法让延迟加载工作 预加载工作正常 我有以下课程 public class Merchant User public virtual ICollection
  • D3.js - 具有多个环和动画过渡的甜甜圈图

    如何为下面的多环D3图表添加过渡动画效果 如图所示D3 js 具有多个环的圆环图 https stackoverflow com questions 17507728 d3 js donut charts with multiple rin
  • BlackBerry Simulator 中的图形加速错误

    当我在模拟器上运行任何程序时 它会打开并显示错误 图形加速错误 BlackBerry 9900 Simulator 检测到您当前的图形加速存在问题 设置 具有最新视频的 OpenGL 1 x 兼容显卡 图形加速需要驱动程序 请尝试较低的 通
  • 在 Android 中将原始文件移动到 SD 卡

    我有一个方法可以copy an Audio file from raw folder to SD card 需要两个输入 ressound ogg 音频原始文件 ID fName SD卡中原始文件的文件名 Updated public bo
  • iOS 16 中 List 中的嵌套 ScrollView + 可刷新的奇怪行为

    在我的 SwiftUI 应用程序中 我有一个带有嵌套 ScrollView 的列表 因为我已将 iPhone 更新到 iOS 16 所以主列表上的刷新有一个奇怪的行为 似乎每个ScrollView都有自己的刷新 问题是我在主列表上应用了 r
  • jQuery 从 select 获取值然后更改 div 的 css

    我一直在尝试使用这个例子 但我一生都无法让它发挥作用 从选择中更改 Div 的背景 https stackoverflow com questions 5764413 change background of div from select
  • 属性名称不同时如何指定映射规则

    我是 Automapper 框架的新手 我有一个域类和一个 DTO 类 如下所示 public class Employee public long Id get set public string Name get set public
  • 有没有办法从 vim 一次打开多个文件?

    当从命令行启动 vim 时 我可以这样做vim txt一次打开目录中的所有文本文件 出于某种原因 在 vim 内部尝试相同的操作 e txt 给出错误 E77 Too many file names vim 拒绝一次打开多个有什么原因吗 有
  • 在主查询中的一列中返回多个值

    我试图从表中查找相对信息 并将这些结果 以及其他不相关的结果 作为较大查询的一部分返回到一行中 我已经尝试使用这个示例 并针对我的数据进行了修改 如何在一列中返回多个值 T SQL https stackoverflow com quest
  • 检查 Laravel 中的请求数组是否为空

    我有一个动态生成的表单 它为我提供了一组输入 然而数组可能为空 那么 foreach 将失败 public function myfunction Request request if isset request do something
  • 如何使嵌入式 Elasticsearch 可通过 localhost:9200 访问

    我正在玩spring boot sample data elasticsearch https github com spring projects spring boot tree master spring boot samples s
  • 在 VS 2012 中部署 Visual Studio 插件

    我已经成功创建了 Visual Studio 插件 但是我很困惑如何在另一台计算机上部署这个插件 我已经浏览了 stackoverflow 的答案 但是我对此事没有明确的想法 您只需将 YourAddIn dll 和 YourAddIn A
  • 将函数指针设置为静态地址

    我正在将 DLL 注入另一个进程 并希望根据其地址 0x54315 调用该二进制文件中的函数 我怎样才能真正声明一个函数 然后将其设置到这个地址 define FUNC 0x54315 void myFuncPtr int main myF
  • UI 自动化 - 为另一个应用程序的文本框设置文本

    我有两种形式 当单击其中一个按钮时 我想打开另一个按钮并在其中填充一个文本框 我尝试使用下面的代码 但它给出了一个错误 指出 不支持的模式 这是我的代码 private void button1 Click object sender Ev