在VC++程序中调用DOS命令例子
来源:互联网 发布:网络系统工程师考试 编辑:程序博客网 时间:2024/05/20 06:05
方法一:
CString FindDevice(char* szCmdLine)
{char szDirectory[MAX_PATH] = {0};
GetCurrentDirectory(MAX_PATH,szDirectory);
char TempFile[MAX_PATH] = {0};
wsprintf(TempFile,"%s\\NetStatus.txt",szDirectory);
SECURITY_ATTRIBUTES sa = {sizeof(sa),NULL,TRUE};
SECURITY_ATTRIBUTES* psa = NULL;
DWORD dwShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE;
OSVERSIONINFO osVersion = {0};
osVersion.dwOSVersionInfoSize = sizeof(osVersion);
if (GetVersionEx(&osVersion))
{
if (osVersion.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
psa = &sa;
dwShareMode |= FILE_SHARE_DELETE;
}
}
HANDLE hConsoleRedirect = CreateFile(TempFile,GENERIC_WRITE,dwShareMode,psa,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
ASSERT(hConsoleRedirect != INVALID_HANDLE_VALUE);
STARTUPINFO s = {sizeof(s)};
s.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
s.hStdOutput = hConsoleRedirect;
s.wShowWindow = SW_HIDE;
s.dwFlags = STARTF_USESTDHANDLES;
s.hStdOutput = hConsoleRedirect;
PROCESS_INFORMATION pi = {0};
if (CreateProcess(NULL,szCmdLine,NULL,NULL,TRUE,CREATE_NO_WINDOW,NULL,szDirectory,&s,&pi))
{
WaitForSingleObject(pi.hProcess,INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
CloseHandle(hConsoleRedirect);
CFile myFile(TempFile,CFile::modeRead);
ASSERT(myFile.m_hFile != NULL);
char* pszNetStatus = new char[(unsigned int)(myFile.GetLength()+1)];
ZeroMemory(pszNetStatus,(size_t)(myFile.GetLength()+1));
myFile.Read(pszNetStatus,(Unit)(myFile.GetLength()+1));
myFile.Close();
DeleteFile(TempFile);
CString strOutPut;
strOutPut = CString(pszNetStatus);
delete pszNetStatus;
return strOutPut;
}
方法二
SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite;
bool isconn;
sa.nLength=sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor=NULL;
sa.bInheritHandle=TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
{
return NULL;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb=sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError=hWrite;
si.hStdOutput=hWrite;
si.wShowWindow=SW_HIDE;
si.dwFlags=STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
char runcmd[128] = "c://windows//system32//cmd.exe /c ";
sprintf(runcmd,"%s %s",runcmd,cmd);
if (!CreateProcess(NULL,runcmd,NULL,NULL,TRUE,0,NULL,NULL,&si,&pi))
{
return NULL;
}
CloseHandle(hWrite);
char buffer[256]={0};
DWORD bytesRead;
ReadFile(hRead,buffer,256,&bytesRead,NULL) && (bytesRead > 0);
memset(buffer,0,256);
- 在VC++程序中调用DOS命令例子
- 在wince程序中调用DOS命令例子
- 在VC的非控制台程序中调用DOS界面
- 在VC的非控制台程序中调用DOS界面
- [C++] 在程序里调用DOS命令
- [C++] 在程序里调用DOS命令
- 在vc中多次调用dos命令,循环使用CreateProcess的
- 在VB中调用DOS命令
- 在Winform中调用Dos命令
- vc调用dos命令总结
- vc调用dos命令总结
- 在java程序中执行dos命令
- 在c++程序中执行DOS命令
- VC中执行dos命令
- 在VC程序中调用服务组件
- 如何在VC++中调用外部程序
- vc调用dos命令总结(systerm)
- 在VB中调用DOS命令,如何得知DOS命令是否已经执行完毕
- Android开发规范
- 13章 运算符重载
- IRP_MN_START_DEVICE分发例程中的前进和等待IRP总结
- 3D拓扑自动布局之Web Workers篇
- 【json】json_encode() 函数介绍
- 在VC++程序中调用DOS命令例子
- LLVM(一):简单介绍
- USACO 1.3 Barn Repair (barn1)
- 编程珠玑--位图在排序中的使用
- three.js学习点滴(1) — 创建场景
- VS2008反汇编小解(转)
- Android之drawable state各个属性详解
- USACO 1.3 Calf Flac (calfflac)
- 判断一个单链表是否有环及环的链接点(转)