[已解决]能否指定命令行程序运行时cmd窗口的大小(主要是行数)
本帖最后由 hnfeng 于 2023-4-16 11:05 编辑能否指定写的命令行程序运行时cmd窗口的大小(主要是行数)?
目前只能是系统默认的CMD窗口大小,但是默认大小有时不合适,想在双击这个命令行程序时,把CMD窗口增加几行,而不是默认的窗口大小
用CMD的内部命令调节就好了。
mode con cols=120 lines=40 gyp2000 发表于 2023-4-16 07:40
用CMD的内部命令调节就好了。
mode con cols=120 lines=40
这是在CMD里面执行的吧?
我需要的是“在双击这个命令行程序时,指定CMD窗口的行数,而不是默认的行数”
双击命令行程序时,会出现一个CMD,如果AU3里面没有暂停延时的代码,这个CMD窗口会一闪而过,加了延时后就能看到这个CMD窗口了。 在CMD中运行 dir 命令, 窗口尺寸 120 列 40 行
Run(@ComSpec& " /k mode con cols=120 lines=40&&" &"dir", "") 终于明白你说的意思了,你运行一个控制台的程序,这个窗口尺寸是Windows管理的,参数是保存在注册表中的,直接修改不生效。
手动修改cmd窗口尺寸会影响所有控制台程序。你可以重新封装这个控制台程序,通过调用CMD程序的命令行方式启动这个控制台程序就可以临时修改CMD窗口尺寸了。
#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 = $INVALID_HANDLE_VALUE Then
Return SetError(1, 0, 0)
EndIf
$hConsoleOut = $aRet
$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
本帖最后由 gyp2000 于 2023-4-16 10:42 编辑
zghwelcome 发表于 2023-4-16 10:14
看来是我理解错了,我一直以为它是要修改另一个程序的窗口。 gyp2000 发表于 2023-4-16 10:38
他是要修改另一个控制台程序的行数,比如你直接双击运行系统目录中的 ftp.exe 程序,就会弹出控制台。
是吗?你想多了吧 zghwelcome 发表于 2023-4-16 10:41
是吗?你想多了吧
一般都很少写控制台程序,大多都是编辑框实现显示效果。
没想到,还有修改显示行数的需求:face (22): zghwelcome 发表于 2023-4-16 10:14
多谢多谢,搞掂
另一个帖子也是您帮忙搞掂的,再次表示感谢 本帖最后由 hnfeng 于 2023-4-16 11:11 编辑
因为想在双击编译好的控制台程序后显示一些信息,这些信息的行数比系统默认的CMD窗口行数多了点,想一次显示完整,所以有此需求
在我的电脑上没问题,因为我的CMD窗口修改成了默认是50行80列(显示的东西多啦),但是其他电脑上基本都是系统默认的(貌似是25x80)
自己经常在CMD里面运行控制台程序,也喜欢写一些控制台程序。借用批处理,高效+自动
好高深,虽然看不懂DLLCALL,留言学习。
页:
[1]