Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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# 将文本从我的程序发送到现有程序文本框_C# - Fatal编程技术网

C# 将文本从我的程序发送到现有程序文本框

C# 将文本从我的程序发送到现有程序文本框,c#,C#,情况是这样的。在我的工作中,我们使用一个现有的程序,允许我们将条形码扫描到一个记录集中。问题是,要创建此记录集,我们必须分别扫描每个项目。我们点击一个“添加”按钮,弹出一个文本框,然后将条形码扫描到其中(也可以输入) 为了避免这样做,我用C#构建了一个程序,创建了一个条形码列表,我正在寻找一种方法,只需设置一个简单的复制粘贴类型设置,即可复制条形码,将其粘贴到现有程序文本框中,并可能发送一个返回字符,以便为下一个条形码做好准备。它只需一次发送一个条形码,直到完成列表 我可以控制我的c#程序,但工

情况是这样的。在我的工作中,我们使用一个现有的程序,允许我们将条形码扫描到一个记录集中。问题是,要创建此记录集,我们必须分别扫描每个项目。我们点击一个“添加”按钮,弹出一个文本框,然后将条形码扫描到其中(也可以输入)

为了避免这样做,我用C#构建了一个程序,创建了一个条形码列表,我正在寻找一种方法,只需设置一个简单的复制粘贴类型设置,即可复制条形码,将其粘贴到现有程序文本框中,并可能发送一个返回字符,以便为下一个条形码做好准备。它只需一次发送一个条形码,直到完成列表


我可以控制我的c#程序,但工作程序不是我自己构建的,我也无权访问它使用的代码或任何API。有人能提出一个解决方案吗?我找到了一个名为SendMessage的东西,但我不完全确定它是如何工作的,因为它说我需要先搜索流程。

我使用解决了一个类似的问题。 它只允许您自动按键,以便您可以:

  • 使用条形码读取文件中的内容
  • 在其他打开输入窗口的软件中按一个键
  • 输入条形码
  • 报到
  • 我已经为没有API的程序完成了这项工作,它作为避免手动键入的一种方式非常有效。不过看起来有点难看

    您可以使用作为.NET3+一部分的框架

    然后,您将使用这样的工具来提取与所讨论的文本字段相关的所需信息,您可以在C#应用程序和UI自动化框架中锁定这些信息


    例如,如果您使用SendMessage,可以使用spy++搜索文本框的类和名称,这将允许您获得文本框的句柄。我确信我看到了settext的API调用,但我现在似乎找不到它。但是,您可以使用消息WM_KEYDOWN、WM_KEYDOWN来模拟数据输入

    这样使用:

    SendMessage(textboxHandle, WM_KEYDOWN, KeyCode, null);
    SendMessage(textboxHandle, WM_KEYUP, KeyCode, null);
    
    键码表;

    欢迎来到兔子洞。调出一个p/invoke并停留一段时间。这是一个很好的项目。但它似乎只向活动窗口发送关键点。它是否也会包装调用以将键发送到特定窗口?@Will,不,抱歉,它不会发送到特定窗口。SendMessage(textboxHandle,WM_SETTEXT,0,text)确定,这用于发送文本。是否仍然可以使用UI自动化发送按键?我四处寻找,但没有多大成功。或者我需要使用按键或sendmessage吗?我需要模拟一个回车键,因为没有按钮可以实现这个功能。Thanks@Chris您需要一个公开的UI元素来利用UI自动化,因为它需要驻留在可视化树中,框架才能访问它。如果没有按钮,则当文本框中的焦点丢失时,可能正在提交该按钮。不确定是否有效,但您是否尝试过在文本后的设置值内放置a/r/n?您也可以尝试调用SendKeys.Send(“{ENTER}”);在文本上的设置值之后。
    SendMessage(textboxHandle, WM_KEYDOWN, KeyCode, null);
    SendMessage(textboxHandle, WM_KEYUP, KeyCode, null);