Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 必须将文本发送到其他应用程序的焦点文本框_C#_Sendmessage_Intptr - Fatal编程技术网

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

C# 必须将文本发送到其他应用程序的焦点文本框,c#,sendmessage,intptr,C#,Sendmessage,Intptr,我花了很多天的时间将文本值发送到C语言中其他应用程序的聚焦文本框 我的代码: 我想要两种选择中的任何一种解决方案 选择1: 我在spy++中找到了三个编辑控件。在上面的代码中,我只得到了第一个编辑控件。但是我需要得到第二个编辑控件值的IntPtr来发送一些字符串 选择2: 我们可以使用tab键来聚焦第二个编辑控件。在这种情况下,第二个控件是集中的,但我无法发送字符串。因为我不知道焦点控制文本框的IntPtr。如何获得聚焦控制的IntPtr 请告诉我哪个选择合适 请帮助我。您可以使用FindWin

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

我的代码:

我想要两种选择中的任何一种解决方案

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

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

请告诉我哪个选择合适


请帮助我。

您可以使用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;
}