如何阅读标准Win消息框(Info)的消息?
使用
SendMessage(this.HandleControl, WM_GETTEXT, builder.Capacity, builder);
我只能阅读消息框的标题或按钮的文本,而不能阅读消息本身。
感谢。
this.HandleControl
是消息框窗口的处理程序
Spy ++显示没有子控件禁止按钮。这就是它让我觉得Message Boxes有自己的方式来保持文本不使用标签
这是一个用delphi编写的遗留应用程序,根据Spy ++,按钮的类是TButton,但是除了对话框窗口中的按钮之外,没有任何控件。
检查记事本窗口后,Image&文本是“可选择的”,我想我的应用程序不使用std MessageBox。仍然,我如何从文本中提取文本?我可以看到Spy ++ Finder工具无法在我的delphi应用程序中选择标签。
答案 0 :(得分:7)
消息文本位于模式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);
答案 1 :(得分:2)
尝试模拟复制操作(Ctrl-C),然后从剪贴板中获取文本:messageboxes允许以这种方式复制整个内容(如果它们已正确完成)。
OP评论说:有效,谢谢。我最终可能会这样做。理想情况下,我们希望保持我们的实施重点独立,但在专用PC和OCR之间进行选择我可能会走第一条路线。
就我个人而言,我已经在Delphi 6中对它进行了测试,结果看起来像这样:
---------------------------
Confirm
---------------------------
You are about to close the program
WARNING: Are you sure?
---------------------------
Yes No
---------------------------
注意:这是基于“Stefan”在对原始问题的评论中提出的答案