C# 必须将文本发送到其他应用程序的焦点文本框
我花了很多天的时间将文本值发送到C语言中其他应用程序的聚焦文本框 我的代码: 我想要两种选择中的任何一种解决方案 选择1: 我在spy++中找到了三个编辑控件。在上面的代码中,我只得到了第一个编辑控件。但是我需要得到第二个编辑控件值的IntPtr来发送一些字符串 选择2: 我们可以使用tab键来聚焦第二个编辑控件。在这种情况下,第二个控件是集中的,但我无法发送字符串。因为我不知道焦点控制文本框的IntPtr。如何获得聚焦控制的IntPtr 请告诉我哪个选择合适C# 必须将文本发送到其他应用程序的焦点文本框,c#,sendmessage,intptr,C#,Sendmessage,Intptr,我花了很多天的时间将文本值发送到C语言中其他应用程序的聚焦文本框 我的代码: 我想要两种选择中的任何一种解决方案 选择1: 我在spy++中找到了三个编辑控件。在上面的代码中,我只得到了第一个编辑控件。但是我需要得到第二个编辑控件值的IntPtr来发送一些字符串 选择2: 我们可以使用tab键来聚焦第二个编辑控件。在这种情况下,第二个控件是集中的,但我无法发送字符串。因为我不知道焦点控制文本框的IntPtr。如何获得聚焦控制的IntPtr 请告诉我哪个选择合适 请帮助我。您可以使用FindWin
请帮助我。您可以使用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;
}
谢谢你的回复。但是上面的代码与我的代码相同。orderdialog有3个编辑控件,如果我们使用此FindWindowExorderdialog,fromHandle,edit,null;,它将只获得第一个编辑控件。我想要第二个编辑控件。例如:txtlot是第一个编辑控件,txtprice是第二个编辑控件。我想要的是txtprice第二个编辑控件。不,它不一样。它将遍历您的所有文本框。我特别提到了第二个参数。我们正在从循环中的handle设置更改为current found控件,以便下一个FindWindowEx调用将查找下一个文本框。这是我以前项目中的一个稍微修改过的工作示例。我将尝试。。任何选择的可能性2。如何获取聚焦文本框控件的IntPtr。Tou可以使用GetFocus API调用找到聚焦控件hwnd:
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;
}