关于ShellExecute函数,WINDOWS开始>运行,WINDOWS环境变量的疑问?

Amuclan 2004-09-28 12:32:27
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命令看了确实没有,既然没有为什么可以运行呢?

一百分可能不够 不够再加..
...全文
377 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Amuclan 2004-09-28
  • 打赏
  • 举报
回复
惭愧 看不太懂...
SHGetSpecialFolderLocation是什么函数啊 Delphi很喜欢 可惜用的很少...
上面的程序 能否解释一下..
蓝色光芒 2004-09-28
  • 打赏
  • 举报
回复
那你先去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;

Amuclan 2004-09-28
  • 打赏
  • 举报
回复
sorry 最近一直用VB 我写的是VB调用API函数的写法 应该不会是是RunDLL32 ShellExcute....

你说的那种是把一个dll以可执行文件的方式运行,运行其提供的功能(函数) 比如
rundll32.exe shell32.dll,Control_RunDLL desk.cpl 在WINDOWS开始>运行中执行就会把桌面属性调出来 这和WINDOWS环境变量应该没有关系...
dext 2004-09-28
  • 打赏
  • 举报
回复
1. 是不是应该用 RunDLL32 ShellExcute....
2...
3...
4...
DemonLoveLizzy 2004-09-28
  • 打赏
  • 举报
回复
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当然就能识别了。
蓝色光芒 2004-09-28
  • 打赏
  • 举报
回复
引用ShellAPI
ghchen 2004-09-28
  • 打赏
  • 举报
回复
up
zwb666 2004-09-28
  • 打赏
  • 举报
回复
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;
beyondtkl 2004-09-28
  • 打赏
  • 举报
回复
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.

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧