我用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下程序运行过程中会显示进度,所需要时间等等相关信息,现在我怎么把这些信息也显示出来呢?
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下程序运行过程中会显示进度,所需要时间等等相关信息,现在我怎么把这些信息也显示出来呢?
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);
}
我是要得到一些結果,比如DOS下程序輸出是putchar,printf,這些在DOS下是可以看到的,現在我要把這些顯示的內容在一個界面上顯示,還有在DOS下顯示進度可能用putchar('.'); fflush(stdout);這樣的語句來顯示的,而這些在界面上又如何顯示
CString command="dir>"; //假设这是你的命令
CString filename="d:\\test.txt"; //这是你的文件名
command+=filename; //那么先把字符串合并
在CreateProcess的第二个参数中用:(LPTSTR)command
这样试试。
我愿再送50分,現在用CreatProcess與Createpipe實現了我要的功能,現在我界面上有八個Button按鈕,每個按鈕都是實現剛才用CreatProcess與Createpipe所實現的功能,問題是我怎么樣讓這八個按鈕并行工作,也就是我點button1執行這個動作,然后還要能點其他的按鈕執行同樣的動作,這個怎么做才好呢?
我愿再送50分,現在用CreatProcess與Createpipe實現了我要的功能,現在我界面上有八個Button按鈕,每個按鈕都是實現剛才用CreatProcess與Createpipe所實現的功能,問題是我怎么樣讓這八個按鈕并行工作,也就是我點button1執行這個動作,然后還要能點其他的按鈕執行同樣的動作,這個怎么做才好呢?
呵呵,看來那50分全送給你是不夠了,沒問題,我會再給!
我又想到一個方法,用消息的方法
就是我在winmain函數中定義一接受按鈕的消息,然後每點一個按鈕就為該按鈕發一個消息,當然為了使八個動作都能在不同時該點擊執行,可能還要用到進程。
有人做過嗎?