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

时间:2011-01-26 19:58:12

标签: c#

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

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

我可以控制我的c#程序,但工作程序不是由我构建的,我无法访问代码或其使用的任何api。有人可以建议一个可能适用于此的解决方案吗?我找到了一个名为SendMessage的东西,但我不完全确定它是如何工作的,因为它说我需要首先搜索这个过程。

3 个答案:

答案 0 :(得分:2)

我使用http://inputsimulator.codeplex.com/解决了类似的问题。 它只是允许您自动按键,以便您可以:

  1. 使用条形码阅读文件中的内容
  2. 按下打开输入窗口的其他软件中的一个键
  3. 输入条形码
  4. 按返回
  5. 我已经为没有API的程序完成了这项工作,并且它可以很好地避免手动输入。但是看起来有点难看!

答案 1 :(得分:1)

如果您正在使用SendMessage,则可以使用spy ++搜索文本框的类和名称,这样您就可以获得文本框的句柄。我确定我已经看到了对settext的API调用,但我现在似乎无法找到它。但是,您可以使用消息WM_KEYDOWN,WM_KEYDOWN来模拟数据输入。

http://msdn.microsoft.com/en-us/library/ff468861%28v=vs.85%29.aspx

[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);

private const int WM_KEYDOWN = 0x0100;
private const int WM_KEYUP = 0x0101;

原样使用:

SendMessage(textboxHandle, WM_KEYDOWN, KeyCode, null);
SendMessage(textboxHandle, WM_KEYUP, KeyCode, null);

键码清单; http://msdn.microsoft.com/en-us/library/dd375731%28v=vs.85%29.aspx

答案 2 :(得分:0)

您可以使用作为.NET 3+一部分的UI Automation框架。

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

通过MSDN Magazine article存在一个例子。