找回密码
 加入
搜索
查看: 7981|回复: 15

[AU3基础] cmd回显老是乱码,求解

 火.. [复制链接]
发表于 2011-7-24 16:40:24 | 显示全部楼层 |阅读模式
在GUICtrlCreateEdit中回显时,中文总是会乱码!!!求解,用的是win7的系统..
发表于 2011-7-24 22:56:10 | 显示全部楼层
帮顶!!!!!!!!!!
发表于 2011-7-25 07:58:11 | 显示全部楼层
回复 1# 515276542
什么意思
发表于 2011-7-25 12:09:50 | 显示全部楼层
windows CMD本身的BUG,我也遇到过
可能要写个正则,以“>”为分界,直接省略后面所有的乱码
 楼主| 发表于 2011-7-25 14:15:52 | 显示全部楼层
回复 3# netegg 就是这样

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-7-25 14:24:31 | 显示全部楼层
是否64位系统  运行时点击右键选    运行脚本(X64)
 楼主| 发表于 2011-7-25 18:40:29 | 显示全部楼层
回复 6# lainline
是的,正是64位。那我试下先
 楼主| 发表于 2011-7-25 18:42:32 | 显示全部楼层
回复 6# lainline
还是有诶,不过好像没有之前那么严重...
发表于 2011-7-26 08:40:38 | 显示全部楼层
这个问题俺也碰上了,希望能有高人解决
发表于 2011-8-1 08:06:31 | 显示全部楼层
本帖最后由 happytc 于 2011-8-1 08:08 编辑
在GUICtrlCreateEdit中回显时,中文总是会乱码!!!求解,用的是win7的系统..
515276542 发表于 2011-7-24 16:40


乱码问题,应该转一下后,就会大为减少的,象下面这样:

$Pid = Run(@ComSpec & " /c " & $Prompt, @WorkingDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
While True
       $Stream &= StdoutRead($Pid)
       If @error Then ExitLoop
Wend

While True
       $Stream &= StderrRead($Pid)
       If @error Then ExitLoop
WEnd
        
$Stream = DllCall('user32.dll','Int','OemToChar','str',$Stream,'str','')
$Stream = $Stream[2]
ConsoleWrite($Stream)



其实我发现象我上面这样写的,乱码倒不是多大问题,问题更严重的是回显得不全
运行Systeminfo命令,很少能回显全部文本的

大家有什么方法可以解决?
发表于 2011-8-1 13:36:36 | 显示全部楼层
看看是不是字体格式不是UTF8
发表于 2011-8-1 20:25:01 | 显示全部楼层
本帖最后由 3mile 于 2011-8-1 20:27 编辑

借用4楼兄弟的另一个问题贴
http://www.autoitx.com/forum.php ... amp;fromuid=7639113


命令框输完命令"回车"即可
#include <ButtonConstants.au3>
#include <GUIButton.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <GUIImageList.au3>
#include <GuiEdit.au3>
#include <WinAPIEx.au3>
HotKeySet("{F7}", "quit")

Func quit()
        ProcessClose("cmd.exe")
        Exit 0
EndFunc   ;==>quit

Global $PT = 0

$HDL = Run(@ComSpec, "", @SW_HIDE, $STDIN_CHILD + $STDERR_MERGED)
$GUIID = GUICreate("CMDshell", 600, 750)
$DISP = GUICtrlCreateEdit("", 10, 10, 580, 700, $Es_READONLY + $WS_VSCROLL + $WS_HSCROLL + $ES_OEMCONVERT)
GUICtrlSetLimit(-1, 1024 * 1024)
GUICtrlSetFont(-1, 9, 200, 0)
GUICtrlSetBkColor($DISP, 0x000000)
GUICtrlSetColor($DISP, 0x00FF00)
$CMDS = GUICtrlCreateEdit("commands...", 10, 720, 530, 20)
GUICtrlSetBkColor($CMDS, 0x000000)
GUICtrlSetColor($CMDS, 0xFFFFFF)
$BUTN = GUICtrlCreateButton("历史", 540, 720, 50, 20);,$BS_DEFPUSHBUTTON)
GUICtrlSetFont(-1, 8, 800, Default, "微软雅黑")
GUICtrlSetBkColor($BUTN, 0x000000)
GUICtrlSetColor($BUTN, 0x00FF00)
GUISetBkColor(0x000000)
$Dummy = GUICtrlCreateDummy()
GUISetState()

Local $Key[1][2] = [["{Enter}", $Dummy]]
GUISetAccelerators($Key)
_GUICtrlEdit_SetSel($CMDS, 0, -1)

While 1
        $guimsg = GUIGetMsg()
        Switch $guimsg
                Case $GUI_EVENT_CLOSE
                        quit()
                Case $BUTN
                        ShellExecute("out.txt")
;~                         StdinWrite($HDL, _GUICtrlEdit_GetText($CMDS) & @CRLF)
;~                         _GUICtrlEdit_SetSel($CMDS,0,-1)
                Case $Dummy
                        Local $aResult = DllCall("user32.dll", "hwnd", "GetFocus")
                        If $aResult[0] = GUICtrlGetHandle($CMDS) Then
                                If _GUICtrlEdit_GetText($CMDS) = "cls" Then _GUICtrlEdit_SetText($DISP, "")
                                If _GUICtrlEdit_GetText($CMDS) = "exit" Then quit()
                                StdinWrite($HDL, _GUICtrlEdit_GetText($CMDS) & @CRLF)
                                _GUICtrlEdit_SetSel($CMDS, 0, -1)
                        EndIf
        EndSwitch
        
        $msg = StdoutRead($HDL)
        If $msg <> "" Then
                If _GUICtrlEdit_GetLineCount($DISP) > 500 Then
                        $hFile = FileOpen("out.txt", 1)
                        FileWrite($hFile, _GUICtrlEdit_GetText($DISP))
                        FileClose($hFile)
                        _GUICtrlEdit_SetText($DISP, "")
                EndIf
                _GUICtrlEdit_AppendText($DISP, $msg)
;~                 $array = StringSplit($msg, @CRLF)
;~                 _ArrayDisplay($array)
;~                 For $i = 1 To $array[0]
;~                         If $array[$i] = "" Then ContinueLoop
;~                         _GUICtrlEdit_AppendText($DISP, _WinAPI_OemToChar($array[$i]) & @CRLF)
;~                 Next
                $msg = ""
        EndIf
WEnd

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-8-6 22:26:56 | 显示全部楼层
回复 12# 3mile


    这个壳还是不错的,挺好看!
发表于 2011-8-9 00:26:31 | 显示全部楼层
3mile大哥....谢谢分享
发表于 2011-8-9 00:26:36 | 显示全部楼层
3mile大哥....谢谢分享
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 01:19 , Processed in 0.080283 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表