隐藏号角cmd窗口(Hide cmd window from Clarion)

2019-10-20 23:00发布

有没有一种方法来隐藏号角8 cmd窗口?

我跑xcopy复制领域中的应用,所以它看起来是这样定义的文件:

Run('Xcopy '&Clip(Loc:Pathfrom)&' '&loc:Pathto')

Run(' C:\Temp\Temp.tps c:\Bakup\')

也许有一个cmd或者号角命令不显示黑色的窗口,但只能做复制?

Answer 1:

号使用号角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的是免费的,易于使用。



Answer 2:

除非有某种原因,你更喜欢使用命令行复制/ xcopy命令,为什么不使用号角内置的复制功能来复制文件?



Answer 3:

我明白你为什么不想使用内置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) 

此代码没有经过测试。



Answer 4:

也许使用的CreateProcess API函数与CREATE_NO_WINDOW标志是另一种方式来做到这一点?

你应该能够找到在左右的地方号角代码的一些例子。 一个很好的出发点是CreateProcessCaptureOutput的方法CML_System_IO_CaptureStdOutput.clw在ClarionMagLibrary发现:

https://github.com/devroadmaps/ClarionMagLibrary/tree/master/libsrc

根据需要调整吗?



文章来源: Hide cmd window from Clarion
标签: cmd clarion