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