【问题标题】:Filling text in qwidget using win32 api使用win32 api在qwidget中填充文本
【发布时间】:2014-01-20 11:13:16
【问题描述】:

我有问题。我正在使用 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)可能支持其他消息来完成这项工作。 这些事件有什么规范吗,我用谷歌搜索了很多,但找不到合适的东西。 让这段代码工作的最直接的方法是什么?我可以使用 Qt 的事件表映射吗?我是否必须使用一些 Qt 标头并将其链接到 DLL(这可能是由于许可的问题)?

提前致谢。

【问题讨论】:

  • 已解决发布 WM_CHAR 事件。

标签: c++ qt api winapi qwidget


【解决方案1】:

Qt,至少 4.8 和 5.x,使用外部控件。除了窗口之外,没有任何小部件具有本机句柄。您的 EnumChildWindows 很可能没有找到您认为它找到的内容。

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

【讨论】:

  • 感谢Kuba,我发现qwdget控件直接接受WM_CHAR事件。所以就这样解决了,通过PostMessage把字符串作为char一个一个发送。
  • @user3214830:不过,您将其发送到顶级小部件,而不是单个控件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多