在 CmdShell 和 bat_do 中,命令的执行结果会通过EM_REPLACESEL消息添加到RichEdit控件编辑框中,但 ping 等一些命令的执行结果添加到RichEdit控件编辑框中会显示在同一行。
经对比分析ping 等一些命令的执行结果和添加到RichEdit控件编辑框中的结果,发现出现问题的原因在于:ping 等一些命令的执行结果中有一些换行符为 0dh, 0dh, 0ah,这些换行符在添加到 RichEdit控件编辑框的过程中,会被替换为 020h(即空格),于是所有的结果就显示在同一行了。
我的一种解决办法是对ping 等一些命令的执行结果进行处理,把0dh, ……, 0dh,换为 0dh。相应代码为:
;--- Check & skip 0dh series ; buffer--保存命令处理结果的内存首地址 ; bytesRead--命令处理结果长度(字节) lea esi, buffer mov edi, esi add bytesRead, esi xor eax, eax;AL--当前字符, AH--前一字符 @TranBegin: cmp esi, bytesRead jg @TranEnd mov al, byte ptr [esi] cmp al, 0dh jne @TranCopy cmp ah, 0dh jne @SkipTran @TranCopy: mov byte ptr [edi], al inc edi @SkipTran: mov ah, al inc esi jmp @TranBegin @TranEnd: