QT6与VS下实现没有CMD窗口的C++控制台程序
一.QT6下实现没有CMD窗口的C++控制台程序
1.普通的控制台程序都会有一个CMD的黑色框,有时候需要在程序中调用一个exe程序,不想CMD窗口出现,下面讲详细的设置方法.
2.代码中添加:
#ifdef Q_OS_WIN //不显示cmd窗口
#include <windows.h>
HWND hWnd = GetConsoleWindow();
ShowWindow(hWnd, SW_HIDE); // 隐藏控制台窗口
#endif
3.具体代码示例
#include <QtCore>
#include <windows.h>
int main(int argc, char *argv[])
{
#ifdef Q_OS_WIN //不显示cmd窗口
#include <windows.h>
HWND hWnd = GetConsoleWindow();
ShowWindow(hWnd, SW_HIDE); // 隐藏控制台窗口
#endif
QFile file("D:/log.txt");
file.open(QIODevice::WriteOnly | QIODevice::Append);
for(int i=0;i<50;i++)
{
file.write(("[" + QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss") + "] 服务运行中\n").toUtf8());
file.flush(); // 实时写入
qDebug()<<i;
}
file.close();
return 0;
}
4.程序中调用外部exe程序
#include <QProcess>
QProcess *process = new QProcess();
// 方法1:直接启动程序(适用于路径中不含空格的情况)
// process->start("C:/Program Files/MyApp/myapp.exe");
// 方法2:使用参数列表(推荐,可处理带空格的路径)
QString program = "C:/Program Files/MyApp/myapp.exe";
QStringList arguments;
arguments << "--param1" << "value1" << "--param2" << "value2";
process->start(program, arguments);
// 等待程序启动
if (!process->waitForStarted()) {
qDebug() << "启动程序失败:" << process->errorString();
delete process;
return 1;
}
qDebug() << "程序已启动,进程ID:" << process->processId();
5.关闭进程
CMD命令行:taskkill /f /im bg_service.exe
代码中:system("taskkill /f /im bg_service.exe");
二.VS2022下实现没有CMD窗口的C++控制台程序
1.普通的控制台程序都会有一个CMD的黑色框,有时候需要在程序中调用一个exe程序,不想CMD窗口出现,下面讲详细的设置方法.
2.代码中添加:
#ifdef Q_OS_WIN //不显示cmd窗口
#include <windows.h>
HWND hWnd = GetConsoleWindow();
ShowWindow(hWnd, SW_HIDE); // 隐藏控制台窗口
#endif
3.具体代码示例
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <fstream>
#include <ctime>
int main()
{
#ifndef Q_OS_WIN //不显示cmd窗口
HWND hWnd = GetConsoleWindow();
ShowWindow(hWnd, SW_HIDE); // 隐藏控制台窗口
#endif
std::ofstream file("D:/Log_vs.txt", std::ios::app);
for (int i = 0; i < 100; ++i) {
time_t now = time(nullptr);
file << "[" << ctime(&now) << "] 数据块 " << i << "\n";
file.flush();
file.rdbuf()->pubsync();
Sleep(1000);
}
file.close();
return 0;
}
4.调用外部exe程序
std::string exePath = R"(D:/service_vs/x64/Debug/service_vs.exe)";
int result = system(exePath.c_str());
// 检查启动结果
if (result == 0) {
std::cout << "成功启动程序: " << exePath << std::endl;
}
else {
std::cout << "启动程序失败,返回码: " << result << std::endl;
}
5.关闭进程
CMD命令行:taskkill /f /im bg_service.exe
代码中:system("taskkill /f /im bg_service.exe");