有没有办法在Clarion 8中隐藏cmd窗口?
我运行xcopy来复制应用程序字段中定义的文件,所以它看起来像这样:
Run('Xcopy '&Clip(Loc:Pathfrom)&' '&loc:Pathto')
即。 Run(' C:\Temp\Temp.tps c:\Bakup\')
。
也许有一个cmd或Clarion命令不显示黑色窗口但只进行复制?
答案 0 :(得分:0)
没有。将Clarion RUN()
函数与xcopy.exe
等控制台应用程序一起使用时,无法使用记录的选项隐藏命令行界面窗口。
示例Clarion计划:
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做了后者。正如Clarion提供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脚本的Clarion程序示例:
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是免费且易于使用的。
答案 1 :(得分:0)
除非您有什么理由希望使用命令行copy / xcopy命令,为什么不使用Clarion内置的复制功能来复制文件?
答案 2 :(得分:0)
我理解为什么你不想使用内置的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)
此代码尚未经过测试。
答案 3 :(得分:0)
也许使用带有CREATE_NO_WINDOW
标志的CreateProcess API函数是另一种方法吗?
您应该能够在Clarion代码中找到一些示例。一个很好的起点是ClarionMagLibrary中CreateProcessCaptureOutput
的{{1}}方法:
https://github.com/devroadmaps/ClarionMagLibrary/tree/master/libsrc
根据需要调整一下?