必须发送文本以聚焦其他应用程序的文本框

本文关键字:文本 其他 应用程序 聚焦 | 更新日期: 2023-09-27 17:50:21

我花了很多天的时间在c#中发送文本值到其他应用程序的聚焦文本框。

我的代码:

IntPtr txtLot = FindWindowEx(orderdialog, new IntPtr(0), "Edit", null);
SendMessage(txtLot, WM_SETTEXT, 0, lot.ToString());

我想要两个选项中的任意一个。

选择1:我在spy++中发现了三个编辑控件。在上面的代码中,我只有第一个编辑控件。但是我需要得到第二个编辑控制值的IntPtr来发送一些字符串。

选择2:我们可以使用tab键来聚焦第二个编辑控件。在这种情况下,第二个控件是集中的,但我不能发送字符串。因为我不知道聚焦控制文本框的IntPtr。如何获得聚焦控件的IntPtr。

请告诉我哪个选择是合适的。

请帮帮我。

必须发送文本以聚焦其他应用程序的文本框

您可以使用FindWindowEx方法的第二个参数遍历所有控件。

根据MSDN:

hwndChildAfter [in, optional]

类型:HWND

子窗口的句柄。

搜索从Z顺序的下一个子窗口开始。这个孩子window必须是hwndParent的直接子窗口,而不仅仅是后代窗口。如果hwndChildAfter为NULL,则从hwndParent的第一个子窗口

所以你可以使用简单的loop:
IntPtr fromHandle = IntPtr.Zero;
while (true) 
{
    IntPtr txtLot = FindWindowEx(orderdialog, fromHandle, "Edit", null);
    if (txtLot == IntPtr.Zero) break; // not found
    if (/*check if control satisfy some conditions*/) {
        SendMessage(txtLot, WM_SETTEXT, 0, lot.ToString());
    }
    fromHandle = txtLot;
}