【发布时间】:2011-05-12 13:40:06
【问题描述】:
如何阅读标准Win消息框(Info)的消息?
使用
SendMessage(this.HandleControl, WM_GETTEXT, builder.Capacity, builder);
我只能读取消息框的标题或按钮的文本,而不能读取消息本身。
谢谢。
笔记(来自问答):
this.HandleControl 是消息框窗口的处理程序
Spy++ 没有显示按钮栏的子控件。这就是让我想到消息框有自己的方式来保存文本而不使用标签的原因
这是一个用delphi编写的遗留应用程序,按钮的类是Spy++中的TButton,但除了对话框窗口中的按钮之外,仍然没有其他控件。
检查记事本窗口后,图像和文本都是“可选择的”,我猜我的应用程序没有使用标准消息框。仍然,我该如何从事物中提取文本?我可以看到 Spy++ Finder 工具无法选择我的 delphi 应用程序中的任何标签。
【问题讨论】:
-
我们在这里讨论的是什么种类的消息框?由 Win32 API 创建的标准
MessageBox类型的消息框?他们肯定有一个包含文本的标签控件。自 Windows 95 以来,该控件的 ID 一直是0xFFFF。您绝对应该使用 Spy++ 看到它。用更多细节更新您的问题。 -
如果没有窗口句柄,那么您将不得不进行屏幕抓取和 OCR。
-
尝试模拟复制操作 (Ctrl-C),然后从剪贴板中获取文本:消息框允许以这种方式复制整个内容(如果操作正确)。
-
@Cody @Stefan Delphi 的
ShowMessage()例程确实对 CTRL+C 有特殊处理。 -
我记得与旧版本的 Visual Foxpro 集成时遇到过类似问题。只有窗体是实际的 Windows 窗口。 Thr 子控件在内部绘制和处理。我认为 VFP 团队中的一些人希望继续创建 Delphi,以便实现它。
标签: c# .net windows winapi messagebox