我编写了一个可执行文件,它在屏幕上显示一个窗口并获取一些有用的输入。它绑定到⊞ Win+ N:
#n:: Run "C:\Perso\dev-perso\dly\dly.exe"
我的问题是:这还会打开一个cmd
(或 PS)控制台,有时会覆盖实际程序:
有没有办法在不使用关联控制台的情况下启动可执行文件?
我尝试过,文档,使用Hide
或Min
参数,但这会改变两个程序的行为,而不仅仅是控制台。
答案1
Windows 应用程序有两种类型:图形或控制台。如果可执行文件是控制台应用程序,则启动时会自动显示 CMD 窗口作为其输出。
在程序开始运行之前,Windows 需要知道要使用哪个子系统。一旦程序开始运行,就不可能返回并请求其他模式。在编程中,区别在于程序主过程的定义。
您的程序属于控制台子系统,可能是因为它编程起来更简单(不需要消息泵)。控制台程序可以使用 GetConsoleWindow 函数 与 ShowWindow 函数。
实现这一点的具体代码由您决定,或者您可以询问 堆栈溢出 这是解决编程问题的地方。
答案2
我使用 Java 编写代码;通过 GraalVM 本机编译可执行文件。
要隐藏控制台,我必须在构建可执行文件后执行另一个步骤。
假设我将项目“com.tugalsan.gvm.cloud”编译为本机可执行文件“com.tugalsan.gvm.cloud.exe”。
首先,我使用下面的 cmd 复制带有“noconsole”标签的可执行文件:
copy com.tugalsan.gvm.cloud.exe com.tugalsan.gvm.cloud.noconsole.exe
- 然后我运行“editbin.exe”,如下所示。
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\bin\Hostx64\x64\editbin.exe" /SUBSYSTEM:WINDOWS com.tugalsan.gvm.cloud.noconsole.exe