How do I convert argv to lpCommandLine parameter of CreateProcess?

后端 未结 4 631
深忆病人
深忆病人 2021-01-29 14:37

Let I want to write an application, that launches another application. Like this:

# This will launch another_app.exe
my_app.exe another_app.exe 
# This will laun         


        
4条回答
  •  野的像风
    2021-01-29 15:09

    There is no Win32 API that does the reverse of CommandLineToArgvW(). You have to format the command line string yourself. This is nothing more than basic string concatenation.

    Microsoft documents the format for command-line arguments (or at least the format expected by VC++-written apps, anyway):

    Parsing C++ Command-Line Arguments

    Microsoft C/C++ startup code uses the following rules when interpreting arguments given on the operating system command line:

    • Arguments are delimited by white space, which is either a space or a tab.

    • The caret character (^) is not recognized as an escape character or delimiter. The character is handled completely by the command-line parser in the operating system before being passed to the argv array in the program.

    • A string surrounded by double quotation marks ("string") is interpreted as a single argument, regardless of white space contained within. A quoted string can be embedded in an argument.

    • A double quotation mark preceded by a backslash (\") is interpreted as a literal double quotation mark character (").

    • Backslashes are interpreted literally, unless they immediately precede a double quotation mark.

    • If an even number of backslashes is followed by a double quotation mark, one backslash is placed in the argv array for every pair of backslashes, and the double quotation mark is interpreted as a string delimiter.

    • If an odd number of backslashes is followed by a double quotation mark, one backslash is placed in the argv array for every pair of backslashes, and the double quotation mark is "escaped" by the remaining backslash, causing a literal double quotation mark (") to be placed in argv.

    It should not be hard for you to write a function that takes an array of strings and concatenates them together, applying the reverse of the above rules to each string in the array.

提交回复
热议问题