我用CreateProcess这个函数调用了一个原先在DOS下运行的程序prgflash.exe,其在DOS下运行是带参数的,形式如下:
h:\>prgflash.exe mid_34kd_img.bin COM2 115200
现在我想通过点一下BUTTON按钮调用这个程序运行,这个我实现了,其实现如下:
void CCreateProcessDlg::OnButton1() 
{
// TODO: Add your control notification handler code here
 STARTUPINFO StartupInfo;
   PROCESS_INFORMATION ProcessInfo;
    StartupInfo.cb = sizeof(StartupInfo);
   StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
   StartupInfo.wShowWindow = SW_SHOWNOACTIVATE ;
   GetStartupInfo(&StartupInfo);   BOOL fRet=::CreateProcess(NULL,
         "prgflash.exe",
         NULL,
         NULL,
         FALSE,
         CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS,
         NULL,
         NULL,
         &StartupInfo,
         &ProcessInfo);
}
问题是:1 我怎么才能知道我这程序有没有实现与DOS下运行一样的功能,因为在DOS下运行时,在DOS界面上是可以看到运行结果的?
        2 我怎么让其中的一些运行结果在现在的对话框中显示出来,比如在DOS下程序运行过程中会显示进度,所需要时间等等相关信息,现在我怎么把这些信息也显示出来呢?

解决方案 »

  1.   

    不好意思,刚才代码中有点问题,现改正如下:
    void CCreateProcessDlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
     STARTUPINFO StartupInfo;
       PROCESS_INFORMATION ProcessInfo;
        StartupInfo.cb = sizeof(StartupInfo);
       StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
       StartupInfo.wShowWindow = SW_SHOWNOACTIVATE ;
       GetStartupInfo(&StartupInfo);   BOOL fRet=::CreateProcess(NULL,
             "prgflash.exe mid_34kd_img.bin COM2 115200",
             NULL,
             NULL,
             FALSE,
             CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS,
             NULL,
             NULL,
             &StartupInfo,
             &ProcessInfo);
    }
      

  2.   

    参考以下链接http://www.codeproject.com/dialog/quickwin.asp
      

  3.   

    http://community.csdn.net/Expert/topic/4403/4403431.xml?temp=.7469599
      

  4.   

    謝謝 Snow_Ice11111(雪上加冰),不過我的控制與那個還不一樣
    我是要得到一些結果,比如DOS下程序輸出是putchar,printf,這些在DOS下是可以看到的,現在我要把這些顯示的內容在一個界面上顯示,還有在DOS下顯示進度可能用putchar('.'); fflush(stdout);這樣的語句來顯示的,而這些在界面上又如何顯示
      

  5.   

    管道,创建进程的参数中可以设定stdout/stderr,你创建一个管道接收这些信息。
      

  6.   

    我快要結貼了,不過還有點小問題,那位高人可以再幫我一下呢,CreateProcess中參數的問題,我把要傳的參數寫在代碼中是可以了,不過我想把這個參數用一個變量來表示,因為參數名是不固定的,所以用變量來控制它方便一點,不過我用變量試了,程序運行時就認不到參數了,有點怪,比如我的參數原是一個文件的名字,把這個文件名寫在代碼中是可以的,但現在我用一個變量來代替,而這個變量值就是這個文件名,不過這樣不行了,那位會的,幫幫我吧,我都搞了一天一夜了,真鬱悶死了。
      

  7.   

    把CreateProcess中第二个参数强制转换为LPTSTR类型,如:
    CString command="dir>";    //假设这是你的命令
    CString filename="d:\\test.txt";    //这是你的文件名
    command+=filename;        //那么先把字符串合并
    在CreateProcess的第二个参数中用:(LPTSTR)command
    这样试试。
      

  8.   

    Snow_Ice11111(雪上加冰) ,真的很感謝你的幫助,基本實現,馬上把大部分數送給
    我愿再送50分,現在用CreatProcess與Createpipe實現了我要的功能,現在我界面上有八個Button按鈕,每個按鈕都是實現剛才用CreatProcess與Createpipe所實現的功能,問題是我怎么樣讓這八個按鈕并行工作,也就是我點button1執行這個動作,然后還要能點其他的按鈕執行同樣的動作,這個怎么做才好呢?
      

  9.   

    Snow_Ice11111(雪上加冰) ,真的很感謝你的幫助,基本實現,馬上把大部分數送給
    我愿再送50分,現在用CreatProcess與Createpipe實現了我要的功能,現在我界面上有八個Button按鈕,每個按鈕都是實現剛才用CreatProcess與Createpipe所實現的功能,問題是我怎么樣讓這八個按鈕并行工作,也就是我點button1執行這個動作,然后還要能點其他的按鈕執行同樣的動作,這個怎么做才好呢?
      

  10.   

    我要實現同一動作(從兩個ComboBox和一人Edit中把參數選好,然后點Button執行按鈕)八次,現在我的問題就是不能八個同時運行,或者我想要其中的那几個運行就點那几個Button.你說的方法我試了,不知怎么實現不了,也有可能是我的代碼有問題,我現在想用創建線程的方法來實現,能指點我一二嗎?
    呵呵,看來那50分全送給你是不夠了,沒問題,我會再給!
      

  11.   

    有那位會的嗎?本人肯定給分!我現在問題是:當我選擇好參數點Button執行后,如果我還要為另一個同樣的執行選擇參數時,那些ComboBox和Edit就不能工作了,所以我想用創建進程的方法,不知行不行,如果那位大俠有更好的方法,不妨指點一二,謝謝!
      

  12.   

    怎么沒有人頂啊!
    我又想到一個方法,用消息的方法
    就是我在winmain函數中定義一接受按鈕的消息,然後每點一個按鈕就為該按鈕發一個消息,當然為了使八個動作都能在不同時該點擊執行,可能還要用到進程。
    有人做過嗎?