1

有没有办法在 Clarion 8 中隐藏 cmd 窗口?

我运行 xcopy 来复制应用程序字段中定义的文件,因此它看起来像这样:

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

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

也许有一个 cmd 或 Clarion 命令不显示黑色窗口而只进行复制?

4

4 回答 4

1

也许使用带有标志的CreateProcess API 函数CREATE_NO_WINDOW是另一种方法?

您应该能够在 Clarion 代码中找到一些示例。一个很好的起点是在 ClarionMagLibraryCreateProcessCaptureOutput中找到的方法:CML_System_IO_CaptureStdOutput.clw

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

根据需要调整?

于 2017-03-13T04:52:31.730 回答
1

我理解您为什么不想使用内置的 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) 

此代码未经测试。

于 2015-09-21T19:21:55.657 回答
0

不可以。将 ClarionRUN()功能与 类似的控制台应用程序一起使用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 是免费且易于使用的。

于 2014-09-16T20:12:03.853 回答
0

除非出于某些原因您更喜欢使用命令行 copy/xcopy 命令,否则为什么不直接使用 Clarion 内置的 Copy 功能来复制文件呢?

于 2014-09-27T12:07:10.140 回答