C# wm_gettext返回空白直到通过选项卡

C# wm_gettext返回空白直到通过选项卡,c#,winapi,pinvoke,C#,Winapi,Pinvoke,我正在创建一个应用程序,它提供第三方应用程序中提供的数据。他们没有开放的API,所以我不得不使用WM_GETTEXT来获取我们正在查看的信息。这适用于窗口标题,但有些窗口需要在屏幕上找到唯一标识符。如果我点击或标签通过框我需要我得到的文本。如果我不这样做,它只会返回空白 这是一个非常简单的代码,如果我必须写的话,我可以用C++编写一个包装器,虽然我现在不喜欢(我想我稍后必须要考虑性能原因,但是现在我只是想找出我以后需要的全部信息) 我尝试过发送一系列tab键,但即使使用keybd_事件,也需要大

我正在创建一个应用程序,它提供第三方应用程序中提供的数据。他们没有开放的API,所以我不得不使用WM_GETTEXT来获取我们正在查看的信息。这适用于窗口标题,但有些窗口需要在屏幕上找到唯一标识符。如果我点击或标签通过框我需要我得到的文本。如果我不这样做,它只会返回空白

这是一个非常简单的代码,如果我必须写的话,我可以用C++编写一个包装器,虽然我现在不喜欢(我想我稍后必须要考虑性能原因,但是现在我只是想找出我以后需要的全部信息)

我尝试过发送一系列tab键,但即使使用keybd_事件,也需要大约一整秒钟的时间来遍历所有44个字段,返回到起始字段,这是不可接受的


如果有帮助的话,最初的应用程序是90年代后期的powerbuilder应用程序。

有可能powerbuilder在获得焦点之前没有实际填充windows控件,而是将非焦点控件的内容绘制为图形。不过,您应该能够将焦点设置为所需的控件,而不是在所有控件之间切换。因此,我尝试了设置焦点(以及其他一些功能),但它似乎不起作用。很抱歉回复花了这么长时间,我想在控制台而不是远程上检查它,以防它与终端服务有关,但似乎也不是这样。我根本不知道winapi,除了切换焦点之外,tabbing还能做什么呢?我不这么认为,但可以想象的是,当处理TAB时,应用程序可以做一些特殊的事情。最终,由于我想不出任何其他事情,我不得不将鼠标移到它上面,然后再次单击开始字段,然后返回到它开始的位置。我试着在圆圈中移动鼠标,这样它就不会出现会把它搞砸的情况,光标移动得如此之快,回到它的位置,我怀疑大多数人甚至会知道它发生了,除了文本框上的闪烁,因为它们被激活或立即被停用。
StringBuilder sb = new StringBuilder(1024);

length = SendMessage(hWnd, WM_GETTEXTLENGTH, IntPtr.Zero, IntPtr.Zero);

int successText = (int)SendMessage(hWnd, WM_GETTEXT, (IntPtr)sb.Capacity, sb);