2015-05-21 35 views
0

我花了很多天将文本值发送到C#中其他应用程序的聚焦文本框。必须发送文本以聚焦其他应用程序的文本框

我的代码:

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

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

我想我的两个选择的任何一种解决方案。

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

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

请告诉我哪个选择适合。

请帮帮我。

回答

0

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

按照MSDN:

hwndChildAfter [中,可选]

类型:HWND

的句柄,子窗口。

搜索从Z顺序的下一个子窗口开始。儿童 窗口必须是hwndParent的直接子窗口,而不仅仅是 后代窗口。如果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; 
} 
+0

感谢您的答复。但上面的代码与我的代码相同。 “orderdialog”有3个编辑控件,如果我们使用这个“FindWindowEx(orderdialog,fromHandle,”Edit“,null);”,它将只获得第一个编辑控件。我想要第二个编辑控件。 **对于Ex **:txtlot是第一个编辑控件,txtprice是第二个编辑控件。我想要的是txtprice 2nd编辑控件。 – Praveen

+0

不,这是不一样的。它将遍历所有的文本框。我特别提到了第二个参数。我们在循环中更改'fromHandle'(设置为当前找到的控件),所以下一个'FindWindowEx'调用将查找下一个文本框。这是我旧项目稍作修改的工作示例。 – kreig

+0

我会尝试..任何选择的可能性2.如何获得集中的文本框控件的IntPtr。 – Praveen

相关问题