1、ShellExecute(handle,"open","notepad.exe","c:\MyLog.log","",SW_SHOW );
2、ShellExecute(handle,"open","wordpad.exe","c:\MyLog.log","",SW_SHOW );
3、ShellExecute(handle,"open","c:\My.exe","c:\MyLog.log","",SW_SHOW );

在win2000 server中
执行命令(1)时,通过
执行命令(2)时,出现错误提示“找不到文件”XP下可以通过
执行命令(3)时,不能通过,也没有什么 提示

又特别地
  第3句改为 ShellExecute(handle,"open","c:\My.exe","c:\My Log.log","",SW_SHOW );
“My Love.mp3”分开有空格怎么办???
 
来自:bluebridge, 时间:2003-4-26 2:48:00, ID:1803811
其实不用exe文件参数,windows会自动找到log文件关联的执行程序的。去掉试试。  

来自:tt520, 时间:2003-4-26 2:54:00, ID:1803813
我执行这行代码的目的就是要避开“windows”系统的关联,让文件用我指定的程序打开,可是
XP下都可以通过,Windows 2000下(2)(3)都有问题。
还有就是文件名中间有空格怎么办呢,加“”也不行呀  

来自:thx1180, 时间:2003-4-26 15:37:00, ID:1805201
关于ShellExecute函数:
    在ShellAPI单元中,ShellExecute函数的定义为:

function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,
  Directory: PChar; ShowCmd: Integer): HINST; stdcall;

作用:打开或打印一个指定的文件;
参数说明:
    hWnd hwnd,     //指向父窗口的句柄;
    Operation: PChar,     //指向一个null结尾的串以指明要执行的操作;
                          可以是"open","print","explore",NULL;
    FileName: PChar,    //指向文件名或文件夹名串;
    Parameters: PChar,  //指向一个null结尾的串以指明可执行文件的参数;
                          如果FileName参数为文档,此参数应为NULL;
    Directory: PChar,     //指向一个null结尾的串以指明默认目录;
    ShowCmd: Integer    //文件在打开时是否显示;
                          如果FileName参数为文档,此参数应为0;

来自:tt520, 时间:2003-4-28 9:30:00, ID:1808655
to thx1180 and  所有的高手:
   1. ShellExecute(handle, 'open', 'notepad.exe', 'c:\My love.log', '', SW_SHOW);
      此种情况下,的确都能通过
   2. ShellExecute(handle, 'open', 'wordpad.exe', 'c:\My love.log', '', SW_SHOW);
      此种情况下,运行出错,提示为:“无法找到该文件,请验证给出的文件名或路径是否正确”        
      如果我上述命令改为:
      ShellExecute(handle, 'open', 'winamp.exe', 'c:\My love.mp3', '', SW_SHOW);
      winamp的播放列表里出现:
                                   My.mp3
                                   love.mp3
      即除了记事本以外,其它不支持文件名中有空格,怎么办,怎么办,怎么办???
     
      经过试验发现,
          FileName: PChar,    //指向文件名或文件夹名串,中间可以包含空格;
          Parameters: PChar,  //指向一个null结尾的串以指明可执行文件的参数;
                                如果FileName参数为文档,此参数应为NULL;
                                无论是路径还是文件名,中间都不能包含空格(现
                                在只发现“记事本”可以例外)
                                如何才能让此处也可以包含空格呢??  

来自:thx1180, 时间:2003-4-28 12:10:00, ID:1809403
以下调用方式可以通过:
  ShellExecute(handle, 'open', 'wordpad.exe', '"c:\My love.log"', '', SW_SHOW);
  ShellExecute(handle, 'open', 'C:\Program Files\WINAMP\Winamp.exe', '"D:\MEDIAS\da dao.mp3"', '', SW_SHOW);
即将Parameters部分的参数用双引号括起来。

其实这个问题的出现和应用程序如何处理命令行参数有关,
如果用ParamStr(1)获取第一个命令行参数,一般情况下是以空格
分隔多个参数,如果一个参数中本身含有空格,应该用双引号将这个
参数括起来。  

来自:xlongbuilder, 时间:2003-7-21 11:52:00, ID:2046194
那要是这样怎么办?
cmd.exe
执行 attrib path +s
其中path是变量
怎么做!!
急!!!
 

来自:xlongbuilder, 时间:2003-7-21 14:07:00, ID:2046606
问题解决
d :='c:/4';
path:='/c attrib "'+d+'" +s';
ShellExecute(handle, 'open','cmd.exe', pchar(path),'', SW_SHOW);

我的问题来自于这样一个应用:
我要在程序中打开各种格式的文件,如打开.ppt、.pdf、.txt、.doc等等,但程序并不知道用什么应用程序打开,所以只能用ShellExecuteEx()这个SHELL函数,但这个函数却不能得到打开.pdf等文件格式的应用程序的进、线程ID,所以不能控制该应用程序。怎么办?
回复人: Delver(老农) ( ) 信誉:100 2002-06-11 21:40:49Z 得分:0
?
SHELLEXECUTEINFO的成员hProcess就是新创建的进程的句柄
Top
回复人: Delver(老农) ( ) 信誉:100 2002-06-11 21:42:21Z 得分:0
?
SHELLEXECUTEINFO的成员hProcess就是新创建进程的句柄
Top
回复人: jiangsheng(蒋晟.MSMVP2004Jan) ( ) 信誉:243 2002-06-11 23:13:27Z 得分:0
?
/* Compile options needed: none
*/ 

#include <windows.h>
#include <stdio.h>

void main(void)
{
   PROCESS_INFORMATION pInfo;
   STARTUPINFO         sInfo;
   DWORD               exitCode;

   sInfo.cb              = sizeof(STARTUPINFO);
   sInfo.lpReserved      = NULL;
   sInfo.lpReserved2     = NULL;
   sInfo.cbReserved2     = 0;
   sInfo.lpDesktop       = NULL;
   sInfo.lpTitle         = NULL;
   sInfo.dwFlags         = 0;
   sInfo.dwX             = 0;
   sInfo.dwY             = 0;
   sInfo.dwFillAttribute = 0;
   sInfo.wShowWindow     = SW_SHOW;

   if (!CreateProcess(NULL,
                "command.com /c dir c:\\*.bat",
                      NULL,
                      NULL,
                      FALSE,
                      0,
                      NULL,
                      NULL,
                      &sInfo,
                      &pInfo)) {
      printf("ERROR: Cannot launch child process\n");
      exit(1);
   }

   // Give the process time to execute and finish
   WaitForSingleObject(pInfo.hProcess, 5000L);

   if (GetExitCodeProcess(pInfo.hProcess, &exitCode))
   {
      switch(exitCode)
      {
         case STILL_ACTIVE: printf("Process is still active\n");
                            break;
         default:           printf("Exit code = %d\n", exitCode);
                            break;
      }
   }
   else {
      printf("GetExitCodeProcess() failed\n");
   }
}
Top
回复人: deadhorse(死马) ( ) 信誉:91 2002-06-11 23:25:05Z 得分:0
?
对拉,不要shellexecute,用createprocess比较好
Top
回复人: polarisxu(北极星) ( ) 信誉:99 2003-02-10 16:37:44Z 得分:0
?
	SHELLEXECUTEINFO ShExecInfo = {0};
要用下面的设置
	ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
	bRet = ShellExecuteEx(&ShExecInfo);

则hProcess不会是零。

Top
回复人: wbj_song(小郎) ( ) 信誉:100 2003-02-12 11:20:18Z 得分:0
?
	ZeroMemory(&NameServersei, sizeof(NameServersei));
	NameServersei.cbSize = sizeof(NameServersei);
	NameServersei.fMask = SEE_MASK_NOCLOSEPROCESS;
	NameServersei.hwnd = NULL;
	NameServersei.lpVerb = NULL;
	NameServersei.lpFile = "文件名";//"1.ppt"
	NameServersei.lpParameters ="文件运行参数.没有就为空";
	NameServersei.lpDirectory ="文件目录";// "C:\Bin";
	NameServersei.nShow = SW_HIDE;
	NameServersei.hInstApp = NULL;
	ShellExecuteEx(&NameServersei);

//*************************************************
         TerminateProcess(NameServersei.hProcess, 0);//放在想结束线程的地方