找回密码
 加入
搜索
查看: 413|回复: 11

[网络通信] [已解决]能否指定命令行程序运行时cmd窗口的大小(主要是行数)

[复制链接]
发表于 2023-4-15 20:12:39 | 显示全部楼层 |阅读模式
本帖最后由 hnfeng 于 2023-4-16 11:05 编辑

能否指定写的命令行程序运行时cmd窗口的大小(主要是行数)?

目前只能是系统默认的CMD窗口大小,但是默认大小有时不合适,想在双击这个命令行程序时,把CMD窗口增加几行,而不是默认的窗口大小
发表于 2023-4-16 07:40:53 | 显示全部楼层
用CMD的内部命令调节就好了。
mode con cols=120 lines=40
 楼主| 发表于 2023-4-16 08:32:22 | 显示全部楼层
gyp2000 发表于 2023-4-16 07:40
用CMD的内部命令调节就好了。
mode con cols=120 lines=40

这是在CMD里面执行的吧?
我需要的是“在双击这个命令行程序时,指定CMD窗口的行数,而不是默认的行数”

双击命令行程序时,会出现一个CMD,如果AU3里面没有暂停延时的代码,这个CMD窗口会一闪而过,加了延时后就能看到这个CMD窗口了。
发表于 2023-4-16 09:16:25 | 显示全部楼层
在CMD中运行 dir 命令, 窗口尺寸 120 列 40 行
Run(@ComSpec& " /k mode con cols=120 lines=40&&" &"dir", "")
发表于 2023-4-16 09:55:08 | 显示全部楼层
终于明白你说的意思了,你运行一个控制台的程序,这个窗口尺寸是Windows管理的,参数是保存在注册表中的,直接修改不生效。
手动修改cmd窗口尺寸会影响所有控制台程序。你可以重新封装这个控制台程序,通过调用CMD程序的命令行方式启动这个控制台程序就可以临时修改CMD窗口尺寸了。
发表于 2023-4-16 10:14:30 | 显示全部楼层



#AccAu3Wrapper_UseX64=n
#AccAu3Wrapper_Change2CUI=Y
#NoTrayIcon
Local $lines = 15, $cols = 50
_SetConsoleSize($lines, $cols)
Sleep(50000)
Func _SetConsoleSize($lines = 15, $cols = 50)
        Local $aRet, $iErr, $hConsoleOut, $tCoord, $tDword
        Local Const $INVALID_HANDLE_VALUE = -1
        Local Const $STD_INPUT_HANDLE = -10
        Local Const $STD_OUTPUT_HANDLE = -11
        Local Const $STD_ERROR_HANDLE = -12
        Local Const $tagSMALL_RECT = 'SHORT Left;SHORT Top;SHORT Right;SHORT Bottom;'
        $aRet = DllCall("Kernel32.dll", "hwnd", "GetStdHandle", "dword", $STD_OUTPUT_HANDLE)
        If @error Or UBound($aRet) <> 2 Or $aRet[0] = $INVALID_HANDLE_VALUE Then
                Return SetError(1, 0, 0)
        EndIf
        $hConsoleOut = $aRet[0]
        $tCoord = DllStructCreate("SHORT X;SHORT Y;")
        DllStructSetData($tCoord, "X", $cols)
        DllStructSetData($tCoord, "Y", $lines)
        $tDword = DllStructCreate("DWORD Coord", DllStructGetPtr($tCoord))
        DllCall("kernel32.dll", "BOOL", "SetConsoleScreenBufferSize", "handle", $hConsoleOut, "DWORD", DllStructGetData($tDword, "Coord"))
        $tSMALL_RECT = DllStructCreate($tagSMALL_RECT)
        DllStructSetData($tSMALL_RECT, 3, $cols - 2)
        DllStructSetData($tSMALL_RECT, 4, $lines - 2)
        DllCall("Kernel32.dll", "bool", "SetConsoleWindowInfo", "handle", $hConsoleOut, 'BOOL', True, 'struct*', $tSMALL_RECT)
        DllCall("Kernel32.dll", "bool", 'SetConsoleTitleW', 'wstr', '控制台 lines=' & $lines & '  cols=' & $cols)
        ConsoleWrite(@CRLF & 'lines=' & $lines & @CRLF & 'cols=' & $cols)
        $tCoord = 0
        $tSMALL_RECT = 0
        $tDword = 0
EndFunc 


发表于 2023-4-16 10:38:03 | 显示全部楼层
本帖最后由 gyp2000 于 2023-4-16 10:42 编辑

看来是我理解错了,我一直以为它是要修改另一个程序的窗口。
发表于 2023-4-16 10:41:16 | 显示全部楼层
gyp2000 发表于 2023-4-16 10:38
他是要修改另一个控制台程序的行数,比如你直接双击运行系统目录中的 ftp.exe 程序,就会弹出控制台。

是吗?你想多了吧
发表于 2023-4-16 10:45:02 | 显示全部楼层
zghwelcome 发表于 2023-4-16 10:41
是吗?你想多了吧

一般都很少写控制台程序,大多都是编辑框实现显示效果。
没想到,还有修改显示行数的需求
 楼主| 发表于 2023-4-16 10:57:08 | 显示全部楼层

多谢多谢,搞掂

另一个帖子也是您帮忙搞掂的,再次表示感谢
 楼主| 发表于 2023-4-16 11:03:21 | 显示全部楼层
本帖最后由 hnfeng 于 2023-4-16 11:11 编辑

因为想在双击编译好的控制台程序后显示一些信息,这些信息的行数比系统默认的CMD窗口行数多了点,想一次显示完整,所以有此需求
在我的电脑上没问题,因为我的CMD窗口修改成了默认是50行80列(显示的东西多啦),但是其他电脑上基本都是系统默认的(貌似是25x80)

自己经常在CMD里面运行控制台程序,也喜欢写一些控制台程序。借用批处理,高效+自动

发表于 2023-4-21 12:35:45 | 显示全部楼层
好高深,虽然看不懂DLLCALL,留言学习。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-28 05:52 , Processed in 0.072709 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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