`
caobihole
  • 浏览: 953530 次
文章分类
社区版块
存档分类
最新评论

RichEdit控件在处理EM_REPLACESEL消息中有bug?附一种解决办法

 
阅读更多

RichEdit控件在处理EM_REPLACESEL消息中有bug?附一种解决办法

Purple Endurer 原创
2007-10-27 第1

在 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:

分享到:
评论

相关推荐

    C#写的QQ自动发消息.rar

    ////找到窗体顺序上的第一个RichEdit20A控件,其实就是消息显示框 IntPtr hwndRichEdit = NativeMethods.FindWindowEx(hWnd, IntPtr.Zero, "RichEdit20A", null); ////利用spy++,可以看到消息输入框的父窗体是...

    文本框使用示例(SDK)VC源代码

    本代码示范了文本框的各种用法:选择,删除,撤销,重复,剪切,复制,粘贴,查找,替换等功能 关键字:editbox,EM_REPLACESEL,EM_SETSEL

    DELPHI文本整理器

    // Edit.Perform(EM_REPLACESEL, 1, LPARAM(PChar(s))); end; // Edit显示行号 // ------------------------------------------------------------------------------ // 去除空行 // Memo1.Text := StringReplace...

    让电脑做傻事 欢迎大家查看

    m_before.ReplaceSel( _T("\r\n") ); CString strTemp = str; int nRet = -1; CString strTChar = ToTChar( strTemp, &nRet ); strSave += strTChar; strSave += _T("\r\n"); CString strbfln = ...

    flash action script 经典字典教程大全,学flash必备

    flash action script 经典字典教程大全,学flash必备 -- --(递减) ++ ++(递增) ! !(逻辑 NOT) ......._highquality _highquality、Button._highquality、MovieClip._highquality、TextField._highquality ...

Global site tag (gtag.js) - Google Analytics