如何使用ShellExecuteEx传递参数?

时间:2017-06-27 10:38:57

标签: winapi ipc shared-memory

我正在使用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);
};

1 个答案:

答案 0 :(得分:2)

使用lpParameters的{​​{1}}成员传递参数。

其他一些评论:

  • 由于您明确使用结构的ANSI版本SHELLEXECUTEINFO,因此对函数调用执行相同操作并使用SHELLEXECUTEINFOA是合适的。
  • 通过初始化结构作为声明的一部分来避免调用ShellExecuteExAZeroMemory
  • 您使用SHELLEXECUTEINFOA p_info = { 0 };但无法关闭进程句柄。这是一个手柄泄漏。
  • 除非您使用SEE_MASK_NOCLOSEPROCESSShellExecuteEx动词来提升流程,否则调用runas会更合适。为什么要CreateProcess直接致电ShellExecuteEx