如题,ShellExecute在传递参数的时候,如果传递多个参数是怎样的?
如果所传递的参数其中一个是变量,那应该怎样写 ?下面这段代码对不 ?ShellExecute(Handle,'open','bg.exe','1  ExtractFileName(openpicturedialog1.FileName)',nil,SW_SHOW);

解决方案 »

  1.   

    打开记事本程序的代码
    ShellExecute(Handle,'Open','NotePad.exe',nil,nil,SW_SHOW);
      

  2.   

    参考资料如下:    HINSTANCE   ShellExecute(   
        
              HWND   hwnd,           //运行的窗口句拼   
              LPCTSTR   lpOperation, //   运行方式   
              LPCTSTR   lpFile, //   文件及路径   
              LPCTSTR   lpParameters, //   参数(一般程序没有)   
              LPCTSTR   lpDirectory, //   默认搜索路径   
              INT   nShowCmd   //   当程序运行后的显示方式   
      )   
            
      1、如果lpFile是一个可执行文件则ShellExecute直接执行它;如果lpFile是一个数据文件,则ShellExecute首先在注册表中查找和这种类型数据文件相关练的可执行文件,如果找到则执行这个可执行文件,否则启动失败,函数返回值为ERROR_FILE_NOT_FOUND   
        
      2、lpParameters是参数,如果lpFile是EXE文件,则参数有用,否则没用。   
        
      3、lpDirectory搜索路经可以不指定。   
          
      4、lpOperation是打开方式,可以为   
          "open",lpFile必须是一个文件   
          "explorer",   lpFile必须是一个文件夹   
          "print"三中类型,lpFile必须是一个文件   
      CmdShow   Long,为窗口指定可视性方面的一个命令。请用下述任何一个常数     
      SW_HIDE   隐藏窗口,活动状态给令一个窗口     
      SW_MINIMIZE   最小化窗口,活动状态给令一个窗口     
      SW_RESTORE   用原来的大小和位置显示一个窗口,同时令其进入活动状态     
      SW_SHOW   用当前的大小和位置显示一个窗口,同时令其进入活动状态     
      SW_SHOWMAXIMIZED   最大化窗口,并将其激活     
      SW_SHOWMINIMIZED   最小化窗口,并将其激活     
      SW_SHOWMINNOACTIVE   最小化一个窗口,同时不改变活动窗口     
      SW_SHOWNA   用当前的大小和位置显示一个窗口,不改变活动窗口     
      SW_SHOWNOACTIVATE   用最近的大小和位置显示一个窗口,同时不改变活动窗口     
      SW_SHOWNORMAL   与SW_RESTORE相同  
    另见楼主另一贴:
    http://community.csdn.net/Expert/topic/5320/5320879.xml?temp=.7111322
      

  3.   

    dBASEIII 兄,这样只是传递了参数为常量 时的情况;我代码里传递的另一个参数是变量,这样传递不了
      

  4.   

    命令行参数LPCTSTR只是一个字符串而已,比如,你可以ShellExecute(Handle,'open','bg.exe','1 '+ExtractFileName(openpicturedialog1.FileName),'c:\',SW_SHOW);
      

  5.   

    再比如:
    ShellExecute(Handle,'open','bg.exe',变量S1 + ' ' + 变量S2,nil,SW_SHOW);或者你干脆这样:var
      LPS : string;
      S1,S2 : string;
    begin
      S1 := ....
      S2 := .......
      LPS := S1 + S2;
      ShellExecute(Handle,'open','bg.exe',LPS,'F:\',SW_SHOW);
      ...
    end;意思你应该是明白的。要么是我把你的本意理解偏了
      

  6.   

    还是不行我们可以这样无聊一下,A.bat 
        @echo off
         if "%1" == "" exit 
         echo %2
    B.bat
        @echo off
        call a.bat del  delphi
        pause这样批处理显示的就是delphi而我想在把del作为第一个参数,delphi作为第二个参数,然后用程序调用如下:var
        cF:string;
        dF:string;
        sF:string;begin  cF:='del';
      dF:='delphi';
      sF:=cF+dF;
      ShellExecute(Handle,'open','a.bat',PChar(sF),nil,SW_SHOW);end;这样运行后批处理没有接受到第二个参数
      

  7.   

    a.bat内容如下:
    @echo off
    if "%1" == "" exit 
    echo %1
    echo %2
    pausevar
        cF:string;
        dF:string;
        sF:string;
    begin
      cF:='del';
      dF:='delphi';
      sF:=cF+' '+dF;
      ShellExecute(Handle,'open','a.bat',PChar(sF),'c:\',SW_SHOW);
    end;运行结果是:
    del
    delphi
    按任意键继续...
      

  8.   

    ShellExecute(NULL, "open", "http://www.google.com",/ NULL, NULL, SW_SHOWNORMAL);