hnfeng 发表于 2023-4-15 20:12:39

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

本帖最后由 hnfeng 于 2023-4-16 11:05 编辑

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

目前只能是系统默认的CMD窗口大小,但是默认大小有时不合适,想在双击这个命令行程序时,把CMD窗口增加几行,而不是默认的窗口大小

gyp2000 发表于 2023-4-16 07:40:53

用CMD的内部命令调节就好了。
mode con cols=120 lines=40

hnfeng 发表于 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窗口了。

gyp2000 发表于 2023-4-16 09:16:25

在CMD中运行 dir 命令, 窗口尺寸 120 列 40 行
Run(@ComSpec& " /k mode con cols=120 lines=40&&" &"dir", "")

gyp2000 发表于 2023-4-16 09:55:08

终于明白你说的意思了,你运行一个控制台的程序,这个窗口尺寸是Windows管理的,参数是保存在注册表中的,直接修改不生效。
手动修改cmd窗口尺寸会影响所有控制台程序。你可以重新封装这个控制台程序,通过调用CMD程序的命令行方式启动这个控制台程序就可以临时修改CMD窗口尺寸了。

zghwelcome 发表于 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 = $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:38:03

本帖最后由 gyp2000 于 2023-4-16 10:42 编辑

zghwelcome 发表于 2023-4-16 10:14

看来是我理解错了,我一直以为它是要修改另一个程序的窗口。

zghwelcome 发表于 2023-4-16 10:41:16

gyp2000 发表于 2023-4-16 10:38
他是要修改另一个控制台程序的行数,比如你直接双击运行系统目录中的 ftp.exe 程序,就会弹出控制台。

是吗?你想多了吧

gyp2000 发表于 2023-4-16 10:45:02

zghwelcome 发表于 2023-4-16 10:41
是吗?你想多了吧

一般都很少写控制台程序,大多都是编辑框实现显示效果。
没想到,还有修改显示行数的需求:face (22):

hnfeng 发表于 2023-4-16 10:57:08

zghwelcome 发表于 2023-4-16 10:14


多谢多谢,搞掂

另一个帖子也是您帮忙搞掂的,再次表示感谢

hnfeng 发表于 2023-4-16 11:03:21

本帖最后由 hnfeng 于 2023-4-16 11:11 编辑

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

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

zdphj 发表于 2023-4-21 12:35:45

好高深,虽然看不懂DLLCALL,留言学习。
页: [1]
查看完整版本: [已解决]能否指定命令行程序运行时cmd窗口的大小(主要是行数)