必须发送文本到其他应用程序的焦点文本框

时间:2015-05-21 17:31:21

标签: c# sendmessage intptr

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

我的代码:

IntPtr txtLot = FindWindowEx(orderdialog, new IntPtr(0), "Edit", null);

SendMessage(txtLot, WM_SETTEXT, 0, lot.ToString());

我想要我的两种解决方案。

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

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

请建议我选择哪个。

请帮帮我。

1 个答案:

答案 0 :(得分:0)

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

根据MSDN:

  

hwndChildAfter [in,optional]

     

类型:HWND

     

子窗口的句柄。

     

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

所以你可以使用简单的循环:

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;
}