求助(VC++) 隐藏Console窗口无效
2014-10-07 20:19
387 查看
[逝去的100~~ 2014/10/07 20: 20]
程序想要实现控制台窗口的隐藏,但是窗口每次运行总会弹出来。为什么呢?
代码如下:
想法是通过CreateProcess来实现窗口的隐藏,添加以下的代码,确实实现了窗口的隐藏,但不是本意:
运行的效果图如下:
![](https://img-blog.csdn.net/20141007200013258?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2h5bm90dHJ5dGhpcw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
看了其他的介绍说:要达到DOS程序运行时不显示窗口的效果,有两种可能:一是创建该DOS进程时,指定不创建窗口;二是隐藏该DOS进程有窗口。我这里都明确指定了啊。
Help
程序想要实现控制台窗口的隐藏,但是窗口每次运行总会弹出来。为什么呢?
代码如下:
// Mini.cpp : 定义控制台应用程序的入口点。 #include "stdafx.h" #pragma comment(lib,"ws2_32.lib") #include <winsock2.h> #include <windows.h> //#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) #define MAX_SER 10 #define HOST_PATH 256 #define HOSTNAME_SIZE HOST_PATH #define MasterPort 999 //定义监听的端口 char hostName[MAX_PATH]={0}; unsigned short maxService; unsigned short port; void Service(LPVOID lpv); int LoopControl(SOCKET llistenfd,int isMultiTasking); void initial(); int initSockets(void); //初始化Windows Socket int main(int argc, char * argv[]) { SOCKET listenFd,acceptfd; struct sockaddr_in serverAddr,clientAddr; int nSize=sizeof(sockaddr_in); int err; PROCESS_INFORMATION ProcessInfo; STARTUPINFO StartupInfo; char szCMDPath[255]; initial(); initSockets(); //分配内存资源 ZeroMemory(&ProcessInfo, sizeof(PROCESS_INFORMATION)); ZeroMemory(&StartupInfo, sizeof(STARTUPINFO)); GetEnvironmentVariable("COMSPEC",szCMDPath,sizeof(szCMDPath)); //GetStartupInfo(&StartupInfo); //创建socket //listenFd=socket(PF_INET,SOCK_STREAM,0); listenFd=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,0); if(listenFd==INVALID_SOCKET){ printf("error:out of socket resource \n"); return 1; } //bind本机的端口 serverAddr.sin_family=AF_INET; //协议类型是INET serverAddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY); //本机IP serverAddr.sin_port=htons(MasterPort); //绑定端口为5054 err=bind(listenFd,(const struct sockaddr *)&serverAddr,sizeof(serverAddr)); if(err==INVALID_SOCKET){ printf("error: unable to bind socket \n"); return 1; } //listen 监听端口 err=listen(listenFd,3); if(err==INVALID_SOCKET){ printf("error: listen socket failed \n"); return 1; } printf("listen......"); acceptfd=accept(listenFd,(struct sockaddr *)&clientAddr,&nSize); //接收客户连接的准备 //配置隐藏窗口结构体 StartupInfo.cb=sizeof(STARTUPINFO); StartupInfo.wShowWindow=SW_HIDE; StartupInfo.dwFlags=STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW; //StartupInfo.cbReserved2=0; //StartupInfo.lpReserved2=NULL; StartupInfo.hStdInput=(HANDLE)listenFd; StartupInfo.hStdOutput=(HANDLE)listenFd; StartupInfo.hStdError=(HANDLE)listenFd; //创建匿名管道 CreateProcess(NULL,szCMDPath,NULL,NULL,TRUE,CREATE_NO_WINDOW,NULL,NULL,&StartupInfo,&ProcessInfo); WaitForSingleObject(ProcessInfo.hProcess,INFINITE); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); printf("server is down \n"); //关闭进程句柄 closesocket(listenFd); closesocket(acceptfd); WSACleanup(); return 0; } void initial() { maxService=3; port=5054; } /* * Winsock服务初始化 */ int initSockets(void) { WSADATA wsaData; WORD sockVersion; //typedef unsigned short WORD(16) int err; sockVersion=MAKEWORD(2,2); err=WSAStartup(sockVersion,&wsaData); if(err!=0) { printf("error %d :winsock not avaliable\n",err); } printf("environemnt invaild success.....\n"); return 0; }
想法是通过CreateProcess来实现窗口的隐藏,添加以下的代码,确实实现了窗口的隐藏,但不是本意:
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
运行的效果图如下:
看了其他的介绍说:要达到DOS程序运行时不显示窗口的效果,有两种可能:一是创建该DOS进程时,指定不创建窗口;二是隐藏该DOS进程有窗口。我这里都明确指定了啊。
Help
相关文章推荐
- 求助(VC++) 隐藏Console窗体无效
- 隐藏Console窗口无效(续1)
- VC Console(控制台)程序如何隐藏CMD窗口
- VC++小技巧之隐藏Console窗口
- VC Console(控制台)程序如何隐藏CMD窗口
- 隐藏console窗口方法
- VC 仿QQ窗口靠边自动收缩隐藏效果
- [VC/MFC]实现程序运行时隐藏窗口 (多种方法,推荐方法2)
- VC++技巧 在控制台程序中隐藏控制台窗口
- VC实现解压 隐藏解压窗口
- VC隐藏控制台窗口
- 隐藏subprocess时的console窗口
- VC中如何编译无Console窗口的Console程序
- VC++ 如何隐藏控制台程序窗口
- 隐藏Console形式无效(继续1)
- OpenCV学习 隐藏 Console 窗口
- VC窗口启动隐藏时闪烁问题解决方法
- VC Console(控制台)程序如何隐藏CMD窗口
- VC基于对话框,文档程序启动时隐藏窗口总结
- VC++无效化控制台窗口的关闭按钮(菜单)