一个console程序,我怎么能隐藏其出现的DOS窗口,而不结束其进程...... 试试ShowWindow(NULL,0);我没试过,错了别怪我(有可能要incude几个.h文件) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可是你为什么要这样作呢?如果让Explorer (not IE)启动console程序的话,系统会自动为之建立一个console,你不要都不行。如果是command.com(cmd.exe)启动console程序的话,你的console程序会继承cmd.exe的console.如果你自己编一个Win32程序启动你的console程序就好办了。其实你可以编一个Win32 GUI程序,然后用AllocConsole自己来实现console.我还是不明白你的目的是什么? 我的目的就是在WIN NT的后台启动一个进程,让他执行某项功能,而在屏幕上不留有什么痕迹,而在后台确实存在!我不知道还有什么方法可以实现这样的功能!Volition2k 请了! 那你可以写一个Win32 GUI程序,但是不生成窗口,这样不就行了嘛。 简单,重CreateProcess创建进程的时候制定不要显示窗口的选项:CreateProcess( NULL, szRunParam, //文件名 NULL, NULL, FALSE, CREATE_NO_WINDOW, //不要显示窗口 NULL, NULL, &si, &pi); use winexec() with : HIDEmaybe ok to u 还没解决吗??vc 的目录中有个例子就是vc编译器的源代码的一部分search *spawn.Cthen u get the answer 将控制台程序转化为WIN 2000的一个服务程序,这不就得了?哈哈 堕落天使的方法可以呀我们这边就是这样实现的,Dos窗口不出现我们是一个telnet服务器,等待一个连接请求到达以后,为其开启一个进程,这个进程执行cmd.exe程序,利用CreateProcess中的参数,这个进程不会出现在屏幕上。只要设置一个参数,很简单啊 开启进程代码如下: STARTUPINFO si; ZeroMemory(&si,sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); si.lpReserved = NULL; si.lpReserved2 = NULL; si.cbReserved2 = 0; si.lpDesktop = NULL; char SysDir[256]; GetSystemDirectory(SysDir,256); si.dwFlags = 0; si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; si.hStdInput = sList[lCurNum].readInput; si.hStdOutput = sList[lCurNum].writeOutput; si.hStdError = sList[lCurNum].writeError;// si.wShowWindow = SW_SHOWDEFAULT; si.wShowWindow = SW_HIDE; //注意这个参数,可以隐藏cmd.exe的窗口 PROCESS_INFORMATION pi; Log("为用户启动进程..."); CreateProcess(getenv("COMSPEC"),NULL,NULL,NULL,TRUE,CREATE_NEW_CONSOLE,NULL,SysDir,&si,&pi); 我不太理解大家的意思,大家指的是在CONSOLE程序中重新启动别的程序吗?我的程序是INT MAIN开始的,如何让自己的窗口隐藏? 我来教你怎么做HWND hWnd;SetConsoleTitle("HEHE");hWnd=::FindWindow(NULL,"HEHE");ShowWindow(hWnd,SW_HIDE);//下面是你的程序行不行? 我认为你遇到的问题不是因为CONSOLE的问题,不要界面的应用程序你可以写一个WIN32 APPLICATION. 我现在是在改造一个CONSOLE程序,如果是WIN32 APPLICATION就简单多了 在CreateProcess的时候将输入输出定向到管道上去。 SECURITY_DESCRIPTOR sd; SECURITY_ATTRIBUTES sa; LPSECURITY_ATTRIBUTES lpsa = NULL; if (IsWindowsNT()) { InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION); SetSecurityDescriptorDacl(&sd, true, NULL, false); sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.bInheritHandle = true; sa.lpSecurityDescriptor = &sd; lpsa = &sa; } // Create the Pipe and get r/w handles HANDLE hReadPipe; HANDLE hWritePipe; assert(CreatePipe(&hReadPipe, &hWritePipe, lpsa, 2500000)); // initialize STARTUPINFO struct STARTUPINFO si; memset(&si, 0, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); si.dwFlags = 0; si.wShowWindow = SW_SHOW; si.hStdOutput = 0; si.hStdError = 0; PROCESS_INFORMATION pi; Application->ProcessMessages(); if( CreateProcess(NULL, Edit1->Text.c_str(), NULL,//security NULL,// security TRUE,//inherits handles 0, 0, 0, &si, &pi) ){ CloseHandle(pi.hThread); WaitForSingleObject(pi.hProcess, INFINITE); } 真是的!int WINAPI WinMain(){//做你要做的事,CreateWindow()根本就不是必须的!即使你Create了Window,只要不ShowWindow(..)也一样见不到。return 0;} 学windows编程什么书籍比较不错点儿! 现在搞压缩的用的是什么算法(大概的),为什么这么不稳定? 自制鼠标的问题 菜单怎样显示位图? 急!代理服务器和用软件实现的firewall有什么区别吗 简单问题:GetDocument() 想要ADO编程的源码 从头来吧。一步一步学习,大虾指点下。谢谢~ 关于TabStrip控件的! 关于CEditView的小问题 昨天晚上单位里的同事都出去喝洒,我一个人在单位里哭了一晚上 在VC中制作异形窗体,如何做
系统会自动为之建立一个console,你不要都不行。如果是command.com(cmd.exe)启动
console程序的话,你的console程序会继承cmd.exe的console.如果你自己编一个
Win32程序启动你的console程序就好办了。其实你可以编一个Win32 GUI程序,
然后用AllocConsole自己来实现console.
我还是不明白你的目的是什么?
我不知道还有什么方法可以实现这样的功能!
Volition2k 请了!
CreateProcess(
NULL,
szRunParam, //文件名
NULL,
NULL,
FALSE,
CREATE_NO_WINDOW, //不要显示窗口
NULL,
NULL,
&si,
&pi);
with :
HIDEmaybe ok to u
vc 的目录中有个例子就是vc编译器的源代码的一部分search *spawn.Cthen u get the answer
我们这边就是这样实现的,
Dos窗口不出现我们是一个telnet服务器,等待一个连接请求到达以后,为其开启一个进程,这个进程执行cmd.exe程序,利用CreateProcess中的参数,这个进程不会出现在屏幕上。
只要设置一个参数,很简单啊
ZeroMemory(&si,sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.lpReserved = NULL;
si.lpReserved2 = NULL;
si.cbReserved2 = 0;
si.lpDesktop = NULL;
char SysDir[256];
GetSystemDirectory(SysDir,256);
si.dwFlags = 0;
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.hStdInput = sList[lCurNum].readInput;
si.hStdOutput = sList[lCurNum].writeOutput;
si.hStdError = sList[lCurNum].writeError;
// si.wShowWindow = SW_SHOWDEFAULT;
si.wShowWindow = SW_HIDE; //注意这个参数,可以隐藏cmd.exe的窗口
PROCESS_INFORMATION pi; Log("为用户启动进程...");
CreateProcess(getenv("COMSPEC"),NULL,NULL,NULL,TRUE,CREATE_NEW_CONSOLE,NULL,SysDir,&si,&pi);
我的程序是INT MAIN开始的,如何让自己的窗口隐藏?
SetConsoleTitle("HEHE");
hWnd=::FindWindow(NULL,"HEHE");
ShowWindow(hWnd,SW_HIDE);
//下面是你的程序行不行?
不要界面的应用程序你可以写一个WIN32 APPLICATION.
SECURITY_ATTRIBUTES sa;
LPSECURITY_ATTRIBUTES lpsa = NULL;
if (IsWindowsNT()) {
InitializeSecurityDescriptor(&sd,
SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, true, NULL, false);
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = true;
sa.lpSecurityDescriptor = &sd;
lpsa = &sa;
}
// Create the Pipe and get r/w handles
HANDLE hReadPipe;
HANDLE hWritePipe;
assert(CreatePipe(&hReadPipe,
&hWritePipe,
lpsa,
2500000));
// initialize STARTUPINFO struct
STARTUPINFO si;
memset(&si, 0, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = 0;
si.wShowWindow = SW_SHOW;
si.hStdOutput = 0;
si.hStdError = 0;
PROCESS_INFORMATION pi;
Application->ProcessMessages();
if( CreateProcess(NULL,
Edit1->Text.c_str(),
NULL,//security
NULL,// security
TRUE,//inherits handles
0,
0,
0,
&si,
&pi) ){
CloseHandle(pi.hThread);
WaitForSingleObject(pi.hProcess, INFINITE);
}
int WINAPI WinMain()
{
//做你要做的事,CreateWindow()根本就不是必须的!即使你Create了Window,只要不ShowWindow(..)也一样见不到。
return 0;
}