我在XP系统下VC程序中,想调用windows\system32下的diskpart.exe自动进行分区。但该命令需要带参数。我试验了以下方式:
(1)使用ShellExecute()
char *szDiskPart = "diskpart.exe";
char szCommand[64] = {0};
sprintf(szCommand, "list disk");
ShellExecute(NULL, "open", szDiskPart, szCommand, NULL, SW_SHOW);  
无法实现打印磁盘列表。 将ShellExecute中szCommand改成NULL,倒是可以显示出界面??(2)使用system("diskpart")也可以出现界面,当使用system("diskpart list disk")就不行。请问如何在VC程序中实现,类似在命令行diskpart>后输入list disk的功能???

解决方案 »

  1.   

    ShellExecute(NULL, "open", NULL, "diskpart.exe list disk", NULL, SW_SHOW);
    就可以了
      

  2.   

    diskpart list disk语法错误,找到diskpart带参数使用的正确语法,然后填到system()中去调用
      

  3.   

    To 3楼:diskpart list disk确实是语法错误,只能使用diskpart /s scriptfile.txt的格式,但是system(“diskpart /s scriptfile.txt”),
    但这样如何实现隐藏窗口呢?我试验了都不能达到目的(根本就没有执行partition.txt脚本):
    WinExec("diskpart /s partition.txt >> 3.txt ", SW_SHOW);
    ShellExecute(NULL, "open", "diskpart /s partition.txt >> 3.txt ", NULL, NULL, SW_SHOW);system("diskpart /s partition.txt >> 3.txt ")可以实现功能,但会闪出窗口来,想隐藏怎么办??
      

  4.   

    非常奇怪system("diskpart /s partition.txt >> 3.txt ")可以实现功能。
    而WinExec("diskpart /s partition.txt >> 3.txt ", SW_SHOW); 
    ShellExecute(NULL, "open", "diskpart /s partition.txt >> 3.txt ", NULL, NULL, SW_SHOW); 却不能???谁能说说:system和WinExec,ShellExecute有什么区别???
    大侠们帮忙,再不解决就要丢饭碗了!!
      

  5.   

    用ShellExecute(NULL, "open", NULL, "diskpart /s partition.txt >> 3.txt", NULL, SW_SHOW);
    “diskpart /s partition.txt >> 3.txt”这个是命令行
      

  6.   

    一般我会用CreateProcess,可以返回句柄等待它结束
      

  7.   

    嗯,用CreateProcess和管道应该可以解决