VC++中调用cmd的集中方式
2016-09-22 09:12
267 查看
1. system方法:
原型:[cpp] view plain copy
int __cdecl system(const char *);
例如:
[cpp] view plain copy
system("ipconfig");
2. WinExec方法:
相比于system方法,WinExec方法多了一个窗口参数:原型:
[cpp] view plain copy
UINT WinExec(
LPCSTR lpCmdLine,
UINT uCmdShow
);
例如:
WinExec("ipconfig", SW_SHOW);
参数可以是:SW_SHOW,,SW_SHOWMAXIMIZED,SW_SHOWMINIMIZED等等,总体用法是差不多的。
3. ShellExecute方法:
这个方法主要用于open,edit,find等方法的操作:原型:
[cpp] view plain copy
HINSTANCE ShellExecute(
HWND hwnd,
LPCTSTR lpOperation,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);
例如:
[cpp] view plain copy
ShellExecute(NULL,"open","abc.xls",NULL,NULL,SW_HIDE);//打开默认路径的abc.xls文件
4.可回显的调用方法:
这个方法步骤比较复杂,是通过创建一个新进程来模拟cmd命令行,将写命令行和回显通过管道的方式呈现。例如:
[cpp] view plain copy
void CTestMFCDlg::OnOK()
{
// TODO: Add extra validation here
SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if(!CreatePipe(&hRead,&hWrite,&sa,0))
{
MessageBox("CreatePipe Failed");
return;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si,sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
char cmdline[200];
CString tmp,stredit2;
GetDlgItemText(IDC_EDIT_CMD,stredit2);
tmp.Format("cmd /C %s",stredit2);
sprintf(cmdline,"%s",tmp);
if(!CreateProcess(NULL,cmdline,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
MessageBox("CreateProcess failed!");
return;
}
CloseHandle(hWrite);
char buffer[4096] = {0};
CString strOutput;
DWORD bytesRead;
while(1)
{
if(NULL == ReadFile(hRead,buffer,4095,&bytesRead,NULL))
{
break;
}
strOutput += buffer;
SetDlgItemText(IDC_EDIT_TEXT,strOutput);
UpdateWindow();
Sleep(1000);
}
CloseHandle(hRead);
}
以上是在一个MFC中点击OnOK按钮后,将IDC_EDIT_CMD编辑框中的命令执行,并将1秒内cmd命令的回显答应到IDC_EDIT_TEXT编辑框中的实现
相关文章推荐
- VC中调用cmd命令的四种方式
- 在VC中调用WebService(托管方式)
- VC中调用外部程序方式
- ADO方式,VC调用Execute执行INSERT INTO插入变量SQL语句的写法
- [VC]MFC程序动态调用plugin DLL的方式
- 谈谈VC++中两种函数调用方式的区别
- VC中COM组件的几种调用方式
- VC中调用外部程序方式总结
- 转的VC调用Matlab,动态库方式
- VC 调用 cmd
- 像VB一样在VC中隐式调用COM(VC的后期绑定方式)
- 如何在QT下调用VC/MFC编写的DLL,分为两种方式。
- VC中调用外部程序方式总结
- VC 6中使用不同调用规范的函数在符号文件里的表示方式
- C#中调用cmd两种方式
- 在VC中调用Web Service (非托管方式)
- VC调用COM的方式总结
- VC中调用外部程序方式总结
- VC调用CMD命令通过控制台管道获取输出结果
- VC中调用外部程序方式总结