WinExec的用法是怎么样的?
我用
AnsiString gmd,gme;
gme="start "+gmd; //gmd代表一个绝对路径的全文件名
用 m=system(gme.c_str());打以正常打开
而改用 WinExec(gme.c_str(),SW_SHOWNORMAL); 却怎么总是提示找不到文件呢?WinExec返回的值总是(ERROR_FILE_NOT_FOUND)代表找不到文件呢?
留言回复者:victor, 回复时间:2005-8-23 9:06:20
文件名没写全,路径、文件名等都需要写全了,例如 "C://WINDOWS//NOTEPAD.EXE"
system 命令可以在没有路径或扩展名的情况下,通过 path 环境变量搜索到这个文件运行,WinExec 不搜索,路径和文件名及扩展名都需要完全正确才行
留言回复者:海浪来了, 回复时间:2005-9-6 22:50:11
我不是要执行一个特定的可执行文件,而是要用系统默认的程序打开一个文件!
比如我要双击一个按钮打开"C://MYDRAW//说明.DOC",而系统用于打开这个文件的默认程序可能是Word,也可能是写字板,事先是不特定的,我是想让系统自己去判断,就象在我的电脑中双击了这个“说明.DOC”的效果一样!我查过一些资料,说是写成:
WinExec("start C://MYDRAW//说明.DOC",0)就可以了,但我试了却不行!
留言回复者:海浪来了, 回复时间:2005-9-9 21:44:07
顶一下!
留言回复者:海浪来了, 回复时间:2005-9-13 21:00:11
再顶一下!
留言回复者:victor, 回复时间:2005-9-14 14:49:28
你要的函数是 ShellExecute 而不是 WinExec
你需要的是 ShellExecute 函数。
ShellExecute(Application->Handle, "open", "C://MYDRAW//说明.DOC", NULL, "", SW_SHOWNORMAL); //开启文档
ShellExecute(Application->Handle, "open", "http://www.cppfans.com/", NULL, "", SW_SHOWNORMAL); //打开浏览器浏览网页
ShellExecute(Application->Handle, "open", "mailto:victor@cppfans.com", NULL, "", SW_SHOWNORMAL); //开启默认邮箱发邮件
ShellExecute(Application->Handle, "open", "C://WINDOWS//NOTEPAD.EXE", NULL, "", SW_SHOWNORMAL); //执行可执行文件
ShellExecute(Application->Handle, "open", "C://WINDOWS//", NULL, "", SW_SHOWNORMAL); //开启资源管理器打开文件夹
WinExec 是兼容老版本 Windows 保留的过时的函数,现在用 CreateProcess 函数,作用是开启一个子进程,只能装载可执行文件。
ShellExecute 可以打开可执行文件、关联的文件、URL 等,和双击文件的效果是一样的。
我用
AnsiString gmd,gme;
gme="start "+gmd; //gmd代表一个绝对路径的全文件名
用 m=system(gme.c_str());打以正常打开
而改用 WinExec(gme.c_str(),SW_SHOWNORMAL); 却怎么总是提示找不到文件呢?WinExec返回的值总是(ERROR_FILE_NOT_FOUND)代表找不到文件呢?
留言回复者:victor, 回复时间:2005-8-23 9:06:20
文件名没写全,路径、文件名等都需要写全了,例如 "C://WINDOWS//NOTEPAD.EXE"
system 命令可以在没有路径或扩展名的情况下,通过 path 环境变量搜索到这个文件运行,WinExec 不搜索,路径和文件名及扩展名都需要完全正确才行
留言回复者:海浪来了, 回复时间:2005-9-6 22:50:11
我不是要执行一个特定的可执行文件,而是要用系统默认的程序打开一个文件!
比如我要双击一个按钮打开"C://MYDRAW//说明.DOC",而系统用于打开这个文件的默认程序可能是Word,也可能是写字板,事先是不特定的,我是想让系统自己去判断,就象在我的电脑中双击了这个“说明.DOC”的效果一样!我查过一些资料,说是写成:
WinExec("start C://MYDRAW//说明.DOC",0)就可以了,但我试了却不行!
留言回复者:海浪来了, 回复时间:2005-9-9 21:44:07
顶一下!
留言回复者:海浪来了, 回复时间:2005-9-13 21:00:11
再顶一下!
留言回复者:victor, 回复时间:2005-9-14 14:49:28
你要的函数是 ShellExecute 而不是 WinExec
你需要的是 ShellExecute 函数。
ShellExecute(Application->Handle, "open", "C://MYDRAW//说明.DOC", NULL, "", SW_SHOWNORMAL); //开启文档
ShellExecute(Application->Handle, "open", "http://www.cppfans.com/", NULL, "", SW_SHOWNORMAL); //打开浏览器浏览网页
ShellExecute(Application->Handle, "open", "mailto:victor@cppfans.com", NULL, "", SW_SHOWNORMAL); //开启默认邮箱发邮件
ShellExecute(Application->Handle, "open", "C://WINDOWS//NOTEPAD.EXE", NULL, "", SW_SHOWNORMAL); //执行可执行文件
ShellExecute(Application->Handle, "open", "C://WINDOWS//", NULL, "", SW_SHOWNORMAL); //开启资源管理器打开文件夹
WinExec 是兼容老版本 Windows 保留的过时的函数,现在用 CreateProcess 函数,作用是开启一个子进程,只能装载可执行文件。
ShellExecute 可以打开可执行文件、关联的文件、URL 等,和双击文件的效果是一样的。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
OpenDialog1->Title = "Select application you'll launch";
OpenDialog1->Filter = "EXE File (*.exe)|*.exe";
if (OpenDialog1->Execute())
{
Caption = OpenDialog1->FileName;
ShellExecute(Application->Handle,"open",OpenDialog1->FileName.c_str(),NULL,NULL,SW_SHOW);
}
}
AnsiString Path=ExtractFilePath(Application->ExeName)+"系统测试程序.exe";
WinExec(Path.c_str(),SW_SHOW);
{
OpenDialog1->Title = "Select application you'll launch";
OpenDialog1->Filter = "EXE File (*.exe)|*.exe";
if (OpenDialog1->Execute())
{
Caption = OpenDialog1->FileName;
ShellExecute(Application->Handle,"open",OpenDialog1->FileName.c_str(),NULL,NULL,SW_SHOW);
}
}
AnsiString Path=ExtractFilePath(Application->ExeName)+"系统测试程序.exe";
WinExec(Path.c_str(),SW_SHOW);