如何得到 Windows 系统消息框中的文字

Posted by Admin L in Windows & PC Software on 09-03-2012.

作者:牧山道人
原文地址:https://www.seeksunslowly.com/get-windows-message-box-text-sc
转载请注明出处,谢谢。
___________________________________
有时,我们需要复制某软件弹出的 Windows 系统消息框中的文字——写作需要或不便于粘贴截屏的场合。
这,看起来是个高难度的问题,估计要借助某个专门的软件才能完成。
但,事实上,它很简单,的确很简单,为什么这么简单而大家几乎都不知道——因为非程序员很少去这样尝试,程序员又很少去看 MessageBox 的源代码。
______________________________
答案也很简单:按<Ctrl+C>。
______________________________
下面举一例。
下图是关闭 EditPlus 中未保存的文档时出现的 Windows 系统消息框
EditPlus 保存文件对话框

当您看到该对话框时,直接按下<Ctrl+C>,即可将上图所有文件复制到系统剪贴板,在其他可接受文字输入的地方,按下<Ctrl+V>即可得到,比如,我现在按<Ctrl+V>,将得到以下内容:
—————————
EditPlus 3
—————————
Save changes to Noname3 *?
—————————
Yes No Cancel
—————————

是不是既神奇又简单?
_____________________________________________________________________
需要注意的是:
1、该操作只针对各软件中调用的 Windows 系统对话框(信息、询问、警告、禁止等)。
2、一般只对非 Windows 系统本身的消息框有效,比如,本道在 Win7 中,无法复制出删除文件对话框中的文本。
_____________________________________________________________________
下附 Delphi 中的相关代码,供参考(感谢网友 CodeCoolie 提供):
[cc lang=”delphi”]
procedure TMessageForm.CustomKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if (Shift = [ssCtrl]) and (Key = Word(‘C’)) then
  begin
    Beep;
    WriteToClipBoard(GetFormText);
  end;
end;

function TMessageForm.GetFormText: String;
var
  DividerLine, ButtonCaptions: string;
  I: integer;
begin
  DividerLine := StringOfChar(‘-‘, 27) + sLineBreak;
  for I := 0 to ComponentCount – 1 do
    if Components[I] is TButton then
      ButtonCaptions := ButtonCaptions + TButton(Components[I]).Caption +
        StringOfChar(‘ ‘, 3);
  ButtonCaptions := StringReplace(ButtonCaptions,’&’,”, [rfReplaceAll]);
  Result := Format(‘%s%s%s%s%s%s%s%s%s%s’, [DividerLine, Caption, sLineBreak,
    DividerLine, Message.Caption, sLineBreak, DividerLine, ButtonCaptions,
    sLineBreak, DividerLine]);
end;
[/cc]

【赞赏 / Reward】

微信         支付宝         PayPal

Post a comment