Compilation 在C+中隐藏控制台窗口+;建设者 我使用的是NavaCeCo C++ 10.2“东京”命令行编译器,它是一个小的足迹编译器,它以压缩的形式分布,并且容易“可移植”。

Compilation 在C+中隐藏控制台窗口+;建设者 我使用的是NavaCeCo C++ 10.2“东京”命令行编译器,它是一个小的足迹编译器,它以压缩的形式分布,并且容易“可移植”。,compilation,c++builder,Compilation,C++builder,我正在尝试使用Win32 API实现这个小型关闭托盘程序 #include <windows.h> int main() { mciSendString("Set CDAudio Door Closed Wait", 0, 0, 0); return 0; } #包括 int main() { mciSendString(“设置CD音频门关闭等待”,0,0,0); 返回0; } 使用bcc32c Close.cpp编译它可以正常工作,但是双击可执行

我正在尝试使用Win32 API实现这个小型
关闭托盘
程序

#include <windows.h>

int main()
{
  mciSendString("Set CDAudio Door Closed Wait", 0, 0, 0); 
  return 0;
}
#包括
int main()
{
mciSendString(“设置CD音频门关闭等待”,0,0,0);
返回0;
}
使用bcc32c Close.cpp编译它可以正常工作,但是双击可执行文件时控制台窗口会显示为它应该显示的状态。 是否有一种方法可以取消它的存在,如Microsoft编译器使用的
/SUBSYSTEM:WINDOWS

更新:例如,为了在
Digital Mars
中实现这一点,我使用
sc source.c
编译源文件,然后像这样使用它的链接器
Optlink

链接source.obj、、winmm.lib/子系统:windows

因为在Digital Mars中编译它是不够的,它需要链接到
winmm.lib
,而Embarcadero的编译器会自动完成这项工作

更新2:我还看到了一个选项
-tW
使taget在Windows上可执行,但它不起作用,所以使用
bcc32x-mwindows
,因为它基于叮当声,仍然没有得到所需的结果。

您可以尝试一下

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
               LPSTR lpCmdLine, int CmdShow) {
               
  mciSendString("Set CDAudio Door Closed Wait", 0, 0, 0);

  
  return 0;
}
我不知道这个开关在你的编译器上是否起作用

更新:如果不需要,可以省略WinMain参数

int WINAPI WinMain() {
你可以试试

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
               LPSTR lpCmdLine, int CmdShow) {
               
  mciSendString("Set CDAudio Door Closed Wait", 0, 0, 0);

  
  return 0;
}
我不知道这个开关在你的编译器上是否起作用

更新:如果不需要,可以省略WinMain参数

int WINAPI WinMain() {

正确的处理方法是制作一个GUI应用程序(
/SUBSYSTEM:WINDOWS
,带有
WinMain()
),而不是控制台应用程序(
/SUBSYSTEM:console
,带有
main()
),并且不要在代码中创建任何UI。但我不确定如何使用命令行编译器制作GUI应用程序。您可以使用
ShowWindow(GetConsoleWindow(),SW_HIDE)
,但是隐藏一个您没有的控制台窗口是不好的。@RemyLebeau您的建议会使控制台窗口闪烁并在几秒钟内消失,我正在寻找一种完全禁用它的方法。只有一种方法可以正确禁用控制台,也就是说,首先不要创建控制台应用程序。我建议在C++Builder IDE中创建一个无窗口GUI应用程序,然后使其输出显示调用编译器的参数,然后您可以将这些设置移植到命令行编译器(或者,您可以简单地使用命令行编译IDE项目,并让它为您处理编译器的复杂性)我没有IDE,只是命令行编译器,我想你是对的,这一个比其他的更严格,如果它不是Windows应用程序,它不会编译为一个。MSBuild可能更好,但它不是一个压缩的可移植文件夹,其次,如果你不做静态链接,它可能会添加
msvcrt
依赖项。C++Builder应用程序不使用MSVCRT正确的处理方法是使用
/SUBSYSTEM:WINDOWS
WinMain()
)制作GUI应用程序,而不是控制台应用程序(
/SUBSYSTEM:console
main()
),只是不在代码中创建任何UI。但我不确定如何使用命令行编译器创建GUI应用程序。可以使用
ShowWindow(GetConsoleWindow(),SW_HIDE)
,但是隐藏一个你没有的控制台窗口是不好的。@RemyLebeau你的建议会使控制台窗口在几秒钟内闪烁并消失,我正在寻找一种完全禁用它的方法。只有一种方法可以正确禁用控制台,那就是首先不要创建控制台应用程序。我会建议在C++Builder IDE中创建一个无窗口GUI应用程序,然后启用其输出以显示调用编译器的参数,然后您可以将这些设置移植到命令行编译器(或者,您可以简单地使用命令行编译IDE项目,并让它为您处理编译器的复杂性)我没有IDE,只是命令行编译器,我想你是对的,这一个比其他的更严格,如果它不是Windows应用程序,它不会编译为一个。MSBuild可能更好,但它不是一个压缩的可移植文件夹,其次,如果你不做静态链接,它可能会添加
msvcrt
依赖项。C++Builder应用程序不使用msvcrtIt,但有些注意事项是,你忘记了一个字母,
设置CDAudio Door close**d**
,第二个,标志是
-tW
bcc32c
,因为
bcc32
在这个版本中不存在,而且可执行文件的大小是61KB,而GCC是30KB,Digital Mars是12KB。谢谢,通过更改为命令字符串编辑了答案。它可以工作,但有些注意事项是,您忘记了一个字母,
设置CDAudio Door close**d**
,第二个字母,标志是
-tW
bcc32c
,因为
bcc32
在此版本中不存在,而且可执行文件的大小是61KB,而GCC为30KB,数字为12KBal Mars。谢谢,编辑了答案,更改为命令字符串。