获取DOS窗口信息的方法
网上有相似的代码,现在整理一下大家分享采用建立管道的方法,需要添加文件windows.h
//create pipe
{
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/None.gifHANDLE hReadPipe, hWritePipe;
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/None.gifSECURITY_ATTRIBUTES sa;
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/None.gifsa.nLength =
sizeof(SECURITY_ATTRIBUTES);
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/None.gifsa.lpSecurityDescriptor = NULL; //使用系统默认的安全描述符
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/None.gifsa.bInheritHandle = TRUE; //一定要为TRUE,不然句柄不能被继承。
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/None.gifCreeatePipe(&hReadPipe,&hWritePipe,&sa,0); //创建pipe内核对象,设置好hReadPipe,hWritePipe.
}
//create process
{
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/None.gifSTARTUPINFO si;
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/None.gifPROCESS_INFORMATION pi;
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/None.gifsi.cb =
sizeof(STARTUPINFO);
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/None.gifGetStartupInfo(&si);
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/None.gifsi.hStdError = hWritePipe; //设定其标准错误输出为hWritePipe
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/None.gifsi.hStdOutput = hWritePipe; //设定其标准输出为hWritePipe
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/None.gifsi.wShowWindow = SW_HIDE;
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/None.gifsi.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/None.gifif (!CreateProcess(NULL,"c:\\windows\\system32\\cmd.exe/c dir /?"
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gifmhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif ,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)) mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/dot.gif{
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif MessageBox("Error on CreateProcess()");
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif return;
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif}
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/None.gifCloseHandle(hWritePipe);
}
//get dos info
{
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gifmhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gifchar buffer[4096] =
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/dot.gif{0};
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/None.gifDWORD bytesRead;
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gifmhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gifwhile (1) mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/dot.gif{
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif if (ReadFile(hReadPipe,buffer,4095,&bytesRead,NULL) == NULL)//从hReadPipe中读出数据.
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif
break;
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif Sleep(200);
mhtml:file://D:\数据资料\web\Windows中的管道技术 - Shipfi (春暖花开,开满我的阳台) - 博客园.mht!http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif}
} 刚才的太乱了重发一个
//create pipe
{
SECURITY_ATTRIBUTES sa;
HANDLE hReadPipe, hWritePipe;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hReadPipe, &hWritePipe, &sa, 0))
{
MessagePopup("Error", "Error On CreatePipe()");
return -1;
}
}
//create process
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWritePipe;
si.hStdOutput = hWritePipe;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW |STARTF_USESTDHANDLES;
if (!CreateProcess(NULL, "c:\\windows\\system32\\cmd.exe/c dir /?",NULL,NULL,TRUE, DETACHED_PROCESS, NULL,NULL,&si,&pi))
{
MessagePopup("Error", "Error on CreateProcess()");
return -1;
}
CloseHandle(hWritePipe);
}
//read info
{
while (1)
{
if (ReadFile(hReadPipe, buffer, 4095, &bytesRead, NULL) == 0) break;
Sleep(200);
}
CloseHandle(hReadPipe);
} 谢谢分享! 什么东西啊!看不明白,看来要多多努力加油啊! 请问大家:怎样在VB环境下获得DOS窗口信息?
页:
[1]