在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);

0 0
原创粉丝点击