使用win32 api在qwidget中填充文本

时间:2014-01-20 11:13:17

标签: c++ qt api winapi qwidget

我有问题。我正在使用C ++在Win32中开发一个应用程序,在其他范围内自动化外部应用程序中的一些用户输入过程,以便用户准备好运行。 特别是我想使用Win32 API来填充Qt QWidget控件中的一些文本。我用纯C编写了一个DLL来完成这项任务。我在MFC应用程序上进行了测试,效果非常好。 无论如何,我无法让它为Qt QWidget控件工作。 我能够通过EnumChildWindows函数(存储在struct Field中)获得正确的句柄。

SendMessage(Field.hFound,WM_SETTEXT,(WPARAM)NULL,(LPARAM)_T("bla bla bla"));

但是SendMessage似乎不起作用,因为可能控件(很可能是QLineedit)支持其他消息来完成这项工作。 这些事件是否有任何规范,我google了很多但我找不到合适的东西。 使这段代码工作的最简单方法是什么?是否可以使用Qt的事件表映射?我是否必须使用一些Qt标头并将其链接到DLL(由于许可,这可能是一个问题)?

提前致谢。

1 个答案:

答案 0 :(得分:0)

Qt,至少4.8和5.x,使用外国控制。窗外的小部件都没有本机句柄。您的EnumChildWindows很可能找不到您认为的结果。

如果您无法访问Qt应用程序的源代码,那么除了将自己的代码注入正在运行的应用程序之外,您无法做任何其他事情。如果应用程序是动态链接的,您可以确定它使用的Qt版本,编译它的编译器以及可能的Qt配置选项集。然后,您可以使用相同的编译器并使用相同的Qt版本和inject it into the running application编译自己的代码。然后,您可以枚举可见窗口及其子项,并找到您所追求的控件。