有没有一种方法来隐藏号角8 cmd窗口?
我跑xcopy复制领域中的应用,所以它看起来是这样定义的文件:
Run('Xcopy '&Clip(Loc:Pathfrom)&' '&loc:Pathto')
即Run(' C:\Temp\Temp.tps c:\Bakup\')
也许有一个cmd或者号角命令不显示黑色的窗口,但只能做复制?
有没有一种方法来隐藏号角8 cmd窗口?
我跑xcopy复制领域中的应用,所以它看起来是这样定义的文件:
Run('Xcopy '&Clip(Loc:Pathfrom)&' '&loc:Pathto')
即Run(' C:\Temp\Temp.tps c:\Bakup\')
也许有一个cmd或者号角命令不显示黑色的窗口,但只能做复制?
号使用号角RUN()
中包含一个控制台应用程序功能xcopy.exe
,它是不可能隐藏使用记录选择命令行界面窗口。
例如号角程序:
PROGRAM
MAP
END
pathFrom cstring('C:\Temp\Temp.tps') !You could use STRING instead of CSTRING, but then must use CLIP(pathFrom) below
pathTo cstring('c:\Backup\')
CODE
!You will see a black cmd.exe console window open to run ththe following CLI command
Run('xcopy ' & pathFrom & ' ' & pathTo, true) !second parameter of true means to wait for the program being "run" to complete.
然而,要解决的一个方法是使用非控制台应用程序做的工作,或者干脆运行与隐藏的命令行界面的控制台应用程序。 我已经做了与后者的AutoIt 。 正如歌乐提供Run()
函数,这样做的AutoIt,但隐藏窗口的附加功能。
AutoIt脚本(runhidden.au3编译为runhidden.exe):
Opt("TrayIconHide",1) ;This hides AutoIT's default systray icon from appearing
dim $command = $CmdLine[1] & ' ' & $CmdLine[2] & ' ' & $CmdLine[3] & ' ' & $CmdLine[4]
Run ( $command,"",@SW_HIDE)
实施例号角程序,其采用的编译AutoIt脚本以上:
PROGRAM
MAP
END
pathFrom cstring('C:\Temp\Temp.tps')
pathTo cstring('c:\Backup\')
CODE
!You won't see a black cmd.exe console window opened by the following CLI command:
Run('runhidden.exe xcopy '& pathFrom & ' ' & pathTo, true)
你不必使用了AutoIt针对上述技术,但AutoIt的是免费的,易于使用。
除非有某种原因,你更喜欢使用命令行复制/ xcopy命令,为什么不使用号角内置的复制功能来复制文件?
我明白你为什么不想使用内置COPY命令,如果你需要找到的每一个文件(也可能是文件夹也行)要复制这个文件夹下。 如果我是你,我会使用适当的工具来做到这一点:Windows API的和隐藏的窗口。
PROGRAM
SW_HIDE EQUATE(0)
SW_SHOW EQUATE(5)
MAP
MODULE('SHELL')
ShellExecute(hWnd,|
*CSTRING Operation,|
*CSTRING PathAndFileName,|
*CSTRING CommandLineParameters,|
*CSTRING DefaultDirectory,|
LONG ShowCommandCode),|
hInstance,|
PASCAL,RAW,NAME('ShellExecuteA')
END
END
LOC:OPN CSTRING(50)
LOC:NSTR CSTRING(100
LOC:CMD CSTRING(255)
LOC:DD CSTRING(255)
CODE
LOC:OPN = 'open'
LOC:NSTR = 'C:\Temp\Temp.tps c:\Bakup\'
LOC:DD = 'C:\Temp'
LOC:Cmd = 'XCOPY'
ShellExecute(0{PROP:Handle},LOC:OPN,LOC:CMD,LOC:NSTR,LOC:DD,SW_HIDE)
此代码没有经过测试。
也许使用的CreateProcess API函数与CREATE_NO_WINDOW
标志是另一种方式来做到这一点?
你应该能够找到在左右的地方号角代码的一些例子。 一个很好的出发点是CreateProcessCaptureOutput
的方法CML_System_IO_CaptureStdOutput.clw
在ClarionMagLibrary发现:
https://github.com/devroadmaps/ClarionMagLibrary/tree/master/libsrc
根据需要调整吗?