1.为什么ShellExecute函数不支持WINDOWS环境变量,而WINDOWS开始>运行就支持 比如:
Call ShellExecute(Me.hwnd, vbNullString, "%systemroot%\NOTEPAD.EXE", vbNullString, vbNullString, SW_SHOWMAXIMIZED)
就不能运行
2.是不是只有WINDOWS API函数CreateProcess才支持WINDOWS环境变量?这个函数用起来好麻烦啊,我还没有试验成功:(
3.WINDOWS开始>运行这个系统功能,请问是封装了哪个API函数 还是封装了哪些API函数?要自己做出一个和他完全一样的可能吗?有已经实现的吗(代码或者控件)?总觉得这个看似简单的开始>运行背后藏着许多高深的东西!还请高手指点..
4.为什么IEXPLORE可以在WINDOWS开始>运行中运行,也可以用ShellExecute运行,但没有任何的环境变量给出IEXPLORE.EXE的路径C:\Program Files\Internet Explorer,我用Set命令看了确实没有,既然没有为什么可以运行呢?一百分可能不够 不够再加..

解决方案 »

  1.   

    1. 是不是应该用 RunDLL32 ShellExcute....
    2...
    3...
    4...
      

  2.   

    sorry 最近一直用VB 我写的是VB调用API函数的写法 应该不会是是RunDLL32 ShellExcute....你说的那种是把一个dll以可执行文件的方式运行,运行其提供的功能(函数) 比如
    rundll32.exe shell32.dll,Control_RunDLL desk.cpl 在WINDOWS开始>运行中执行就会把桌面属性调出来 这和WINDOWS环境变量应该没有关系...
      

  3.   

    那你先去Windows路径不就行了
    function GetSpecialFolderDir(mFolder: Integer): string;
    //CSIDL_BITBUCKET*   回收站 CSIDL_CONTROLS          *   控制面板 ......
    var
      vItemIDList: PItemIDList;
      vBuffer: array[0..MAX_PATH] of Char;
    begin
      SHGetSpecialFolderLocation(0, mFolder, vItemIDList);
      SHGetPathFromIDList(vItemIDList, vBuffer);  //转换成文件系统的路径
      Result := vBuffer;
      Result := Result + '\';   // CSIDL_BITBUCKET
    end;
      

  4.   

    惭愧 看不太懂...
    SHGetSpecialFolderLocation是什么函数啊 Delphi很喜欢 可惜用的很少...
    上面的程序 能否解释一下..
      

  5.   

    SHGetSpecialFolderLocation // shell api 
    WINSHELLAPI HRESULT WINAPI SHGetSpecialFolderLocation(
        HWND hwndOwner,
        int nFolder,
        LPITEMIDLIST *ppidl
    ); Retrieves the PIDL of a special folder. Returns NOERROR if successful, or an OLE-defined error result otherwise. 
    hwndOwner 
    Handle to the owner window the client should specify if it displays a dialog box or message box.
      

  6.   

    function GetSpecialFolderDir(mFolder: Integer): string;
    //CSIDL_BITBUCKET*   回收站 CSIDL_CONTROLS          *   控制面板 ......
    var
      vItemIDList: PItemIDList;
      vBuffer: array[0..MAX_PATH] of Char;
    begin
      SHGetSpecialFolderLocation(0, mFolder, vItemIDList);
      SHGetPathFromIDList(vItemIDList, vBuffer);  //转换成文件系统的路径
      Result := vBuffer;
      Result := Result + '\';   // CSIDL_BITBUCKET
    end;
      

  7.   

    1. SHELLEXECUTE一个程序的时候,只要它在“SYSTEM”、“WINDOWS”、或者自己程序的目录中,那么不必加路径,程序自己会找到的。比如ShellExecute (0, "open", "notepad.exe", nil, nil, 3)
    2. CreateProcess支不支持环境变量不知道,但环境变量也只有那么几个,用API都能简单的得到。
    3. 开始->运行,其实就相当于WINEXEC,(跟VB里的SHELL差不多),你可以把在运行里写的东西放到WINEXEC里试试。
    4. IE是WIN的注册组件,不用加路径可以找到程序也不奇怪。M$想让WIN识别,WIN当然就能识别了。