gpt4 book ai didi

c++ - 如何隐藏命令窗口并显示 EditBox 控件中的所有潜在错误?

转载 作者:行者123 更新时间:2023-11-28 05:55:32 29 4
gpt4 key购买 nike

我正在 Borland C++ Builder 中创建简单的应用程序。

我的代码是这样的:

void __fastcall TForm1::Button3Click(TObject *Sender)
{


system("java -jar decompile.jar -o Source/ file.jar");

}

现在我想隐藏命令窗口并在 EditBox 控件中显示所有潜在错误。如果没有错误,EditBox 控件应保持为空。

Edit1->Text= "ERROR";

最佳答案

  1. 使用 TMemo 代替 TEdit 日志框

    它有多行并且支持滚动条。这对日志来说要好得多。

  2. 参见 how to redirect commnd promt output to file

    我不会使用 JAVA 但你可以试试:

    system("java -jar decompile.jar -o Source/ file.jar > errorlog.txt");

    或:

    system("java -jar decompile.jar -o Source/ file.jar >> errorlog.txt");

    您还可以包含应用程序路径

    AnsiString exepath=ExtractFilePath(Application->ExeName);

    因此,您将文件保存到已知位置,而不是在运行时很容易更改的实际路径...

  3. 参见 How can I run a windows batch file but hide the command window?

    因此您需要直接将CreateProcessjava.execommand.com 一起使用。我从未做过隐藏的事情,所以请按照链接的Q/A 中的答案进行操作。如果您不知道如何使用 CreateProcess(对于初学者来说可能会不知所措)那么我就是这样使用它的(它不会隐藏只是启动一个 exe...)

    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    SECURITY_ATTRIBUTES attr0,attr1;

    ZeroMemory(&si,sizeof(si));
    ZeroMemory(&pi,sizeof(pi));
    si.cb=sizeof(si);

    attr0.nLength=sizeof(SECURITY_ATTRIBUTES);
    attr0.bInheritHandle=TRUE;
    attr0.lpSecurityDescriptor=NULL;
    attr1=attr0;
    CreateProcess(NULL,"some_app.exe > logfile.txt",&attr0,&attr1,TRUE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);

    你可以使用:

    TerminateProcess(pi.hProcess,0);

    强制终止应用....

现在,当我将所有内容放在一起时,我得到了这个:

AnsiString s,logfile;
STARTUPINFO si;
PROCESS_INFORMATION pi;
SECURITY_ATTRIBUTES attr0,attr1;

ZeroMemory(&si,sizeof(si));
ZeroMemory(&pi,sizeof(pi));
si.cb=sizeof(si);
// hide the process
si.wShowWindow=SW_HIDE;
si.dwFlags=STARTF_USESHOWWINDOW;

attr0.nLength=sizeof(SECURITY_ATTRIBUTES);
attr0.bInheritHandle=TRUE;
attr0.lpSecurityDescriptor=NULL;
attr1=attr0;

// Application local path log filename
logfile=ExtractFilePath(Application->ExeName)+"logfile.txt";
DeleteFileA(logfile); // delete old log just to be sure
// command line string to run (instead of "dir" use "java -jar decompile.jar -o Source/ file.jar")
s="cmd /c dir > \""+logfile+"\"";

CreateProcess(NULL,s.c_str(),&attr0,&attr1,TRUE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);

// wait for execution with some timeout...
for (int i=0;i<100;i++)
{
if (FileExists(logfile)) break;
Sleep(100);
}
// copy the log into TMemo mm_log ...
if (FileExists(logfile)) mm_log->Lines->LoadFromFile(logfile); else mm_log->Text="No log file found";

mm_log 是我复制日志文件的备忘录。此示例仅运行 dir 命令来显示目录信息...因此请使用您的 JAVA ... 正如我在 rem 中所建议的那样。如果您使用的是较旧的 OS,请使用 command 而不是 cmd。您还可以使用 FileExists 来确定它是哪一个 ...

关于c++ - 如何隐藏命令窗口并显示 EditBox 控件中的所有潜在错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34238129/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com