用ShellExecuteEx函数执行一个vc写的exe,vc程序的返回函数是return(n)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用ShellExecuteEx函数执行一个vc写的exe,vc程序的返回函数是return(n)相关的知识,希望对你有一定的参考价值。

n是vc程序的返回值,我怎样得到n的值呢?
用shellexecute这个api获取到它所执行程序完成后的返回值,是.exe。顺便能编写一个简单的exe可执行的么

参考技术A shellexecute返回的并不是目标程序的main返回值,这样做:
STARTUPINFO si=sizeof(si);
PROCESS_INFORMATION pi;
si.dwFlags=STARTF_USESHOWWINDOW;//指定wShowWindow成员有效
si.wShowWindow=TRUE;//此成员设为TRUE的话则显示新建进程的主窗口
BOOL bRet=CreateProcess(
L"xx:\\xx.exe",//目标文件名
NULL,
NULL,//默认进程安全性
NULL,//默认进程安全性
FALSE,//指定当前进程内句柄不可以被子进程继承
CREATE_NEW_CONSOLE,//为新进程创建一个新的控制台窗口
NULL,//使用本进程的环境变量
NULL,//使用本进程的驱动器和目录
&si,
&pi);
if (bRet)

DWORD dwExitCode;
CloseHandle(pi.hThread);
DWORD dwResult=WaitForSingleObject(pi.hProcess, INFINITE);
GetExitCodeProcess(pi.hProcess, &dwExitCode);
CloseHandle(pi.hProcess);
printf("%d\n",dwResult);
printf("%d\n",dwExitCode);


以上代码是执行目标exe,等待其退出,得到main函数的返回值,用的是CreateProcess
需要#include <Windows.h>

如何使用 ShellExecuteEx 传递参数?

【中文标题】如何使用 ShellExecuteEx 传递参数?【英文标题】:How to pass arguments with ShellExecuteEx? 【发布时间】:2017-06-27 10:38:56 【问题描述】:

我将 IPC 用于共享内存。

我需要用 IPC 打开另一个程序,但我想知道如何传递参数。

下面是我的 IPC 类的执行函数。

int execute(std::string exePath, std::string exeName, int console = 1)

    SHELLEXECUTEINFOA p_info;

    ZeroMemory(&p_info, sizeof(SHELLEXECUTEINFOA)); //초기화
    p_info.cbSize = sizeof(SHELLEXECUTEINFOA);
    p_info.lpFile = exeName.c_str(); // 파일 이름
    p_info.lpDirectory = exePath.c_str(); //파일 위치

    p_info.nShow = console; //콘솔 show
    p_info.fMask = SEE_MASK_NOCLOSEPROCESS;

    return ShellExecuteEx(&p_info);
;

【问题讨论】:

您可以使用lpParameters 成员或SHELLEXECUTEINFO,但是如果您不需要提升 - 最好使用Createprocess 而不是ShellExecuteEx 【参考方案1】:

使用SHELLEXECUTEINFOlpParameters 成员传递参数。

其他一些cmets:

由于您显式使用 ANSI 版本的结构 SHELLEXECUTEINFOA,因此对函数调用执行相同操作并使用 ShellExecuteExA 是合适的。 通过将结构初始化为声明的一部分来避免调用ZeroMemorySHELLEXECUTEINFOA p_info = 0 ; 您使用SEE_MASK_NOCLOSEPROCESS 但未能关闭进程句柄。这是句柄泄漏。 除非您使用ShellExecuteExrunas 动词来提升进程,否则调用CreateProcess 似乎更合适。既然可以直接打电话给CreateProcess,为什么还要叫ShellExecuteEx

【讨论】:

以上是关于用ShellExecuteEx函数执行一个vc写的exe,vc程序的返回函数是return(n)的主要内容,如果未能解决你的问题,请参考以下文章

VC中用ShellExecute等函数执行exe出现错误,但是鼠标双击就可以,这是为啥?

ShellExecuteEx函数的作用

ShellExecuteEx函数的作用

Windows函数 ShellExecuteEx

QT creator 如何调用VC写的静态库

用VC写的第一个窗口程序 Hello World!