WM_Copy、wm_gettext 和 wm_keydown 失败?
问题:我需要从 Windows 应用程序(不是我的程序)的窗口中获取选定的文本。我正在 Delphi XE 中工作,我尝试访问的软件是过去 15 年中使用 C、C++、VB 以及谁知道还有什么其他语言构建的一个集合体。我没有源代码。我尝试阅读的编辑框(RTF 备忘录)属于“Ter32Class”类。当我使用 wm_copy
时,剪贴板中没有任何内容。当我使用 wm_gettext
时,什么也没有。当我使用 wm_keydown
命令时(模拟 Ctrl-Ins 或 Ctrl-< kbd>C)没有任何反应。请注意,我可以让所有这些替代方案在写字板、记事本和 FireFox 中工作,但不能在这个应用程序中使用(顺便说一句,也可以在 OpenOffice 中使用,但这不是问题)。我能够以编程方式从此框中获取文本的唯一方法是使用 autohotkey 和简单的“send ^c
”命令。虽然它有效,但它并不优雅。帮助?!?
更多信息:窗口层次结构:Ter32Class 是 OI_Mdi 的子级,OI_Mdi 是 MDIClient 的子级,而 MDIClient 是 OI_Window 的子级。我正在深入获取适当的句柄,因为它将响应粘贴命令。
我正在使用 Delphi XE,但如果 Delphi XE 专家没有答案,我会喜欢 C++ 或 VB 中的任何解决方案。
The problem: I need to obtain the selected text from a window in a Windows application (not my program). I am doing my work in Delphi XE and the software I am attempting to access is a kluge built over the past 15 years with C, C++, VB and who knows what else. I do not have the source code. The edit box (an RTF memo) I am attempting to read is of the class "Ter32Class". When I use wm_copy
, nothing goes to the clipboard. when I use wm_gettext
, nothing. When I use wm_keydown
commands (to simulate Ctrl-Ins or Ctrl-C) nothing happens. Note that I can get all of these alternatives to work in wordpad, notepad, and FireFox but not this application (or OpenOffice, incidentally, but that's not the issue). The only way I have been able to programmatically obtain text from this box is to use autohotkey with the simple "send ^c
" command. While it works, it is inelegant. HELP?!?
More information: Window hierarchy: Ter32Class is a child of OI_Mdi which is a child of MDIClient, which is a child of OI_Window . I am drilling down to obtain the appropriate handle as it will respond to a paste command.
I am using Delphi XE but I'd love any solution in C++ or VB if no Delphi XE gurus have the answer.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
来自快速宏论坛
和
,因此除非发生了某些更改(发布时间为 2006 年),否则您似乎需要使用其 DLL 来获取文本。
来自子系统(TE Edit 控制网站)
From Quick Macros Forum
and
so unless something has changed (post is 2006), it appears you'll need to use it's dll to get the text.
From Sub Systems (TE Edit control website)