c# - 如何使用 WinAPI 读取 MessageBox 文本

标签 c# .net windows winapi messagebox

如何读取标准 Win 消息框(信息)的消息?

使用

SendMessage(this.HandleControl, WM_GETTEXT, builder.Capacity, builder);

我只能读取消息框的标题或按钮的文本,而不能读取消息本身。

谢谢。

笔记(来自问答):

this.HandleControl 是消息框窗口的处理程序

Spy++ 显示没有子控件禁止按钮。这就是它让我想到 Message Boxes 有自己的方式来保存文本而不使用标签的原因

这是一个用 delphi 编写的遗留应用程序,根据 Spy++,按钮的类是 TButton,但除了对话框窗口内的按钮外,仍然没有其他控件。

检查记事本窗口后,图像和文本都是“可选择的”,我想我的应用程序没有使用标准 MessageBox。不过,我该如何从事物中提取文本呢?我可以看到 Spy++ Finder 工具无法选择我的 Delphi 应用程序中的任何标签。

最佳答案

消息文本位于模态 MessageBox 对话框窗口的标签控件中。您必须获取 MessageBox 对话框的窗口句柄 (win32 API FindWindow),然后检索控件的窗口句柄 (win32 API GetDlgItem),然后从该窗口中检索文本 win32 API GetWindowText。

编辑——

TCHAR text[51] = {0};
HWND msgBox = ::FindWindow(NULL, TEXT("MessageBoxCaption"));
HWND label = ::GetDlgItem(msgBox, 0xFFFF);
::GetWindowText(label, text, sizeof(text)-1);

关于c# - 如何使用 WinAPI 读取 MessageBox 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5978879/

相关文章:

.net - XmlSchema.Read 给出 COMException "Catastrophic failure"

c# - 如何在后台启动进程?

c# - 如何在不继承的情况下向自定义错误页面提供错误消息?

c# - 使用 C# 并使用 foreach 从 JSON 字符串获取二级值

c# - 你能将浮点值精确地比较为零吗?

.net - 在 WCF 客户端中连接返回的对象实例

.net - 如何保护 .NET DLL

windows - 在运行时更改进程名称

python - 如何在没有命令提示符窗口的情况下运行 wxPython 对话框?

c# - 部署自定义 SSIS 2012 组件