Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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#windows窗体应用程序中使用windows API阅读非C#应用程序文本框 我们有一个用C++编写的旧Windows 32位应用程序,它可以做一些事情并显示类似于文本框的结果。_C#_Winapi - Fatal编程技术网

从C#windows窗体应用程序中使用windows API阅读非C#应用程序文本框 我们有一个用C++编写的旧Windows 32位应用程序,它可以做一些事情并显示类似于文本框的结果。

从C#windows窗体应用程序中使用windows API阅读非C#应用程序文本框 我们有一个用C++编写的旧Windows 32位应用程序,它可以做一些事情并显示类似于文本框的结果。,c#,winapi,C#,Winapi,我被要求用C语言编写一个应用程序,从旧应用程序中读取数据,然后进一步处理数据 问题是如何读取旧应用程序中的文本框 有人告诉我,我可以使用windows API获取应用程序的“句柄”,并逐步遍历控件,然后读取每个控件的数据!这是真的吗?如果是,我将如何从C#中执行 这是一个.Net 4 Windows窗体应用程序 非常感谢您可能需要使用一些互操作调用来实现这一点,特别是使用/和&/的组合 这里有一个主题(C++中的,但是相同的概念只需要移植使用),它有点过时,但我相信它应该与你的情况非常相关。 <

我被要求用C语言编写一个应用程序,从旧应用程序中读取数据,然后进一步处理数据

问题是如何读取旧应用程序中的文本框

有人告诉我,我可以使用windows API获取应用程序的“句柄”,并逐步遍历控件,然后读取每个控件的数据!这是真的吗?如果是,我将如何从C#中执行

这是一个.Net 4 Windows窗体应用程序


非常感谢

您可能需要使用一些互操作调用来实现这一点,特别是使用/和&/的组合


这里有一个主题(C++中的,但是相同的概念只需要移植使用),它有点过时,但我相信它应该与你的情况非常相关。

< P>你可以使用St+++应用程序(附带VisualStudio)来检查你的本地应用程序并找到你要寻找的控件的类名。 这样,您就可以获得本机应用程序的主窗口句柄,如果您负责从c#app启动该应用程序,那么这很容易:

... var proc=Process.Start(); var mainWndHandle=proc.MainWindowHandle; 否则,您必须找到其他方法来查找该窗口fe。您可以使用我在下面描述的函数在桌面上查找该窗口(有关更多信息,请参阅msdn页)

如果您拥有所有这些,那么您可以使用函数获得textbox控件的句柄(也可以通过将NULL作为hwndParent传递来使用它来查找主窗口)

当你有了这个文本框的句柄,你就可以阅读它的内容了


如果你还没有被调用,你可以检查一下如何从C程序中调用WiAPI函数。

< P>你真的需要C++应用程序的UI吗?因为有2个不同的消息泵的UIS将是非常不可容忍的。你需要在这个值的更新上对这个混乱进行同步。< /P>
<>你为什么不把逻辑代码从C++应用程序中正确地脱掉,并将它暴露在互操作CLR项目(C++ ++ CLI)中?如果你不需要给C++应用程序添加更多的特性,那么我就非常直截了当地提出了< /P>不幸的是,由于内部政治,我无法访问原始的源代码,但是感谢你的回复,如果主窗口打开另一个表单并隐藏它,它就返回句柄0!在这种情况下,我如何得到父句柄或子什么是把手? ... var proc = Process.Start(); var mainWndHandle = proc.MainWindowHandle;