调用system函数时,如何隐藏其dos窗口 现在要运行一个基于命令行的程序,使用system函数,启动后出现一个dos窗口,由于时间比较长,不美观,想要隐藏这个窗口,不知道有什么办法。用其他的函数(如shellexec)不知道是否可行。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 system函数好象没有提供这样的功能你可以使用CreateProcess来启动一个进程BOOL CreateProcess( LPCTSTR lpApplicationName, // name of executable module LPTSTR lpCommandLine, // command line string LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD BOOL bInheritHandles, // handle inheritance option DWORD dwCreationFlags, // creation flags LPVOID lpEnvironment, // new environment block LPCTSTR lpCurrentDirectory, // current directory name LPSTARTUPINFO lpStartupInfo, // startup information LPPROCESS_INFORMATION lpProcessInformation // process information);把dwCreationFlags这个参数设置为CREATE_NO_WINDOW这个对console程序有效,对纯DOS下的程序无效希望对你有所帮助! 使用WinExec可以的,不过你得知道使用的应用程序的名称 ShellExecute(..................., SW_HIDE) 用这个 WinExec("xxx.exe", 0); 我用过不会显示 Dos 程序的窗体。 也可以使用ShellExecute();ShellExecute(NULL, NULL,"xxx.exe", NULL, NULL, SW_SHOWNORMAL); ShellExecute,WinExce都可以达到这个要求 ShellExecute(NULL, NULL,"xxx.exe", NULL, NULL, SW_HIDE);WinExec("xxx.exe", SW_HIDE); 要是我就使用CreateProcess函数,不但可以达到你的功能,还能重新定向标准的输入输出等等,因为有时候你不但要执行他,还要获取他执行的结果啊BOOL CreateProcess( LPCTSTR lpApplicationName, // name of executable module LPTSTR lpCommandLine, // command line string LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD BOOL bInheritHandles, // handle inheritance option DWORD dwCreationFlags, // creation flags LPVOID lpEnvironment, // new environment block LPCTSTR lpCurrentDirectory, // current directory name LPSTARTUPINFO lpStartupInfo, // startup information LPPROCESS_INFORMATION lpProcessInformation // process information);通过后两个参数你可以做很多有意义的事 用CreateProcess,最后一个参数有进程句柄。调用WaitForSingleObject即可,如:PROCESS_INFORMATION pi={0}; if(CreateProcess(NULL,cmdLine,NULL,NULL,TRUE,NULL,NULL,NULL,&s,&pi)) { WaitForSingleObject(pi.hProcess ,INFINITE); //等待进程执行完毕 CloseHandle(pi.hProcess ); CloseHandle(pi.hThread ); } 是的,和上面几位一样,此时我推荐使用 CreateProcess 来代替 system 设置创建时的参数为 CREATE_NO_WINDOW 来阻目 Dos 窗口的显示,如下所示 :STARTUPINFO si;ZeroMemory(&si, sizeof(si));si.cb = sizeof STARTUPINFO;PROCESS_INFORMATION pi;BOOL res = CreateProcess(NULL,"c:\\winnt\\system32\\cmd.exe", // 执行你的 dos 命令NULL,NULL,NULL,NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW,NULL,NULL,&si,&pi);if (TRUE == res){CloseHandle(pi.hProcess);CloseHandle(pi.hThread);}不要忘记了释放资源哦, good luck. ^_^ vc如何读取.dat文件数据 MDI创建新窗口问题 如何判段本机是否已经联上inter网? 请问使用cStdioFile打开一个文本文件以后如何知道已经读到文件结尾了? 为什么我不能删除帖子呢? 一个对话框应用程序能不能和doc/ view结构结合起来??? IE浏览器坏了!其大家帮忙! 树型控件中的ImageList? 使对话框最小化渐变到托盘区。 请教一个关于非客户区按钮的ToolTip的问题,一定给分,高手请来看看! 怎样编程实现对CStatic类文字颜色的设置? 求在多文档中注册 多个菜单 多个工具栏的方法???
你可以使用CreateProcess来启动一个进程
BOOL CreateProcess(
LPCTSTR lpApplicationName, // name of executable module
LPTSTR lpCommandLine, // command line string
LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD
LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
BOOL bInheritHandles, // handle inheritance option
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // new environment block
LPCTSTR lpCurrentDirectory, // current directory name
LPSTARTUPINFO lpStartupInfo, // startup information
LPPROCESS_INFORMATION lpProcessInformation // process information
);
把dwCreationFlags这个参数设置为CREATE_NO_WINDOW
这个对console程序有效,对纯DOS下的程序无效希望对你有所帮助!
WinExec("xxx.exe", SW_HIDE);
BOOL CreateProcess(
LPCTSTR lpApplicationName, // name of executable module
LPTSTR lpCommandLine, // command line string
LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD
LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
BOOL bInheritHandles, // handle inheritance option
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // new environment block
LPCTSTR lpCurrentDirectory, // current directory name
LPSTARTUPINFO lpStartupInfo, // startup information
LPPROCESS_INFORMATION lpProcessInformation // process information
);
通过后两个参数你可以做很多有意义的事
PROCESS_INFORMATION pi={0};
if(CreateProcess(NULL,cmdLine,NULL,NULL,TRUE,NULL,NULL,NULL,&s,&pi))
{
WaitForSingleObject(pi.hProcess ,INFINITE);
//等待进程执行完毕
CloseHandle(pi.hProcess );
CloseHandle(pi.hThread );
}
ZeroMemory(&si, sizeof(si));
si.cb = sizeof STARTUPINFO;PROCESS_INFORMATION pi;
BOOL res = CreateProcess(NULL,
"c:\\winnt\\system32\\cmd.exe", // 执行你的 dos 命令
NULL,
NULL,
NULL,
NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW,
NULL,
NULL,
&si,
&pi);if (TRUE == res)
{
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
不要忘记了释放资源哦, good luck. ^_^