ShellExecute成功后返回值究竟是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ShellExecute成功后返回值究竟是啥?相关的知识,希望对你有一定的参考价值。

看网上的文章介绍是返回被启动的程序的句柄,而看msdn上则说则是一个大于32的值

究竟哪个是正确的?

另外,如果msdn上是正确的,那我要如何取得被启动的程序的句柄啊?

有没有高手能说一下,谢谢^_^

它的返回值是PROCESS_INFORMATION。
返回值可能有的错误如下: = 0 内存不足
ERROR_FILE_NOT_FOUND = 2; 文件名错误
ERROR_PATH_NOT_FOUND = 3; 路径名错误
ERROR_BAD_FORMAT = 11; EXE 文件无效
SE_ERR_SHARE = 26; 发生共享错误
SE_ERR_ASSOCINCOMPLETE = 27; 文件名不完全或无效
SE_ERR_DDETIMEOUT = 28; 超时
SE_ERR_DDEFAIL = 29; DDE 事务失败
SE_ERR_DDEBUSY = 30; 正在处理其他 DDE 事务而不能完成该 DDE 事务
SE_ERR_NOASSOC = 31; 没有相关联的应用程序
//ShowCmd 参数可选值:SW_HIDE = 0; 隐藏
SW_SHOWNORMAL = 1; 用最近的大小和位置显示, 激活
SW_NORMAL = 1; 同 SW_SHOWNORMAL
SW_SHOWMINIMIZED = 2; 最小化, 激活
SW_SHOWMAXIMIZED = 3; 最大化, 激活
SW_MAXIMIZE = 3; 同 SW_SHOWMAXIMIZED
SW_SHOWNOACTIVATE = 4; 用最近的大小和位置显示, 不激活
SW_SHOW = 5; 同 SW_SHOWNORMAL
SW_MINIMIZE = 6; 最小化, 不激活
SW_SHOWMINNOACTIVE = 7; 同 SW_MINIMIZE
SW_SHOWNA = 8; 同 SW_SHOWNOACTIVATE
SW_RESTORE = 9; 同 SW_SHOWNORMAL
SW_SHOWDEFAULT = 10; 同 SW_SHOWNORMAL
SW_MAX = 10; 同 SW_SHOWNORMAL
参考技术A 参考MSDN的说法,这个函数的返回值是一个整数,只是在返回时被转换成了一个HINSTANCE类型,不过它并不是一个真正的HINSTANCE,所以它唯一的作用就是重新转换成整数,来判断操作是否成功。

如果需要控制创建的应用程序,必须使用另外的API
CreateProcess
它的返回参数PROCESS_INFORMATION包含了子进程的句柄。本回答被提问者采纳
参考技术B 函数】
ShellExecute

【操作系统】
Win9X:Yes
WinNT:Yes

【声明】
ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

【说明】

 
查找与指定文件关联在一起的程序的文件名

【返回值】

Long,非零表示成功,零表示失败。会设置GetLastError

【其它】

【参数表】
hwnd ----------- Long,指定一个窗口的句柄,有时候,windows程序有必要在创建自己的主窗口前显示一个消息框

lpOperation ---- String,指定字串“open”来打开lpFlie文档,或指定“Print”来打印它

lpFile --------- String,想用关联程序打印或打开一个程序名或文件名

lpParameters --- String,如lpszFlie是可执行文件,则这个字串包含传递给执行程序的参数

lpDirectory ---- String,想使用的完整路径

nShowCmd ------- Long,定义了如何显示启动程序的常数值。参考ShowWindow函数的nCmdShow参数

实例如下:

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Const SW_SHOWNORMAL = 1
Private Sub Form_Load()
'Send an E-Mail to the KPD-Team
ShellExecute Me.hwnd, vbNullString, "mailto:KPDTeam@Allapi.net", vbNullString, "C:\", SW_SHOWNORMAL
End Sub

请问delphi中ShellExecute的功能,和直接用show有啥不同?

都是显示所创建的新界面,有什么不一样,在实现什么功能时需要使用ShellExecute?
并且 我用ShellExecute 打开的界面 无法对界面的按键等的进行操作 这个是与ShellExecute有关吗?

参考技术A ShellExecute 和winexec相似,也是用于打开文件的,不同的是winexec只能打开一些应用程序(如*.exe),而shellexecute可以打开的不止,如*.txt可以也可以打开,而winexec不能 参考技术B 楼主还没理解如何打开界面 show是delphi 的内部函数,shellExecute是shellapi提供的系统外部函数用于打开其他exe程序,内部元素控制起来当然很容易了,外部元素也不是不能控制,需要很复杂的过程才能控制 参考技术C 让注册表马上生效而不重启的最有效最直接办法就是
结束 Explorer.exe 文件 然后在
文件/新建任务/数据 explorer 就可以更新了

可以使用 C# 的 Process.Start();
Process.Kill();
具体方法可以查询百度哦
参考技术D ShellExecute可以打开其他的EXE文件本回答被提问者和网友采纳

以上是关于ShellExecute成功后返回值究竟是啥?的主要内容,如果未能解决你的问题,请参考以下文章

ShellExecute的返回值是进程的句柄吗

jQuery 的最后返回究竟是啥?

VB中Shell函数和ShellExecute函数的使用方法、联系、区别?

请问delphi中ShellExecute的功能,和直接用show有啥不同?

ShellExecute打开程序失败。

“通过引用传递”究竟是啥意思?