首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Clarion隐藏cmd窗口

从Clarion隐藏cmd窗口
EN

Stack Overflow用户
提问于 2014-09-15 23:00:18
回答 4查看 1.3K关注 0票数 1

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

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

代码语言:javascript
运行
复制
Run('Xcopy '&Clip(Loc:Pathfrom)&' '&loc:Pathto')

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

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

EN

回答 4

Stack Overflow用户

发布于 2015-09-22 03:21:56

我理解你为什么不想使用内置的copy命令,因为你需要在你想要拷贝的文件夹下找到每个单独的文件(可能还有文件夹)。如果我是你,我会使用适当的工具: Windows API和隐藏窗口。

代码语言:javascript
运行
复制
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) 

此代码尚未经过测试。

票数 1
EN

Stack Overflow用户

发布于 2017-03-13 12:52:32

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

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

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

根据需要进行调整?

票数 1
EN

Stack Overflow用户

发布于 2014-09-17 04:12:04

不是的。在像xcopy.exe这样的控制台应用程序中使用Clarion RUN()函数时,不可能使用文档中的选项隐藏命令行界面窗口。

Clarion程序示例:

代码语言:javascript
运行
复制
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):

代码语言:javascript
运行
复制
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程序:

代码语言:javascript
运行
复制
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是免费且易于使用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25851041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档