CommandLineToArgvW 函式 (shellapi.h)

剖析 Unicode 命令行字串,並傳回命令行自變數的指標陣列,以及這類自變數的計數,其方式類似於標準 C 運行時間 argvargc 值。

語法

LPWSTR * CommandLineToArgvW(
  [in]  LPCWSTR lpCmdLine,
  [out] int     *pNumArgs
);

參數

[in] lpCmdLine

類型: LPCWSTR

包含完整命令行之 Null 終止 Unicode 字串的指標。 如果此參數是空字串,函式會傳回目前可執行文件的路徑。

[out] pNumArgs

類型: int*

int 的指標,接收傳回的陣列元素數目,類似於argc

傳回值

類型: LPWSTR*

LPWSTR 值的陣列指標,類似於argv

如果函式失敗,則傳回值為 NULL。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

備註

CommandLineToArgvW 所傳回的位址是 LPWSTR 值陣列中第一個項目的位址;此陣列中的指標數目是以 pNumArgs 表示。 Null 終止 Unicode 字串的每個指標都代表命令行上找到的個別自變數。

CommandLineToArgvW 會為自變數字串的指標,以及自變數字串本身配置連續記憶體區塊;呼叫端應用程式必須釋放不再需要自變數清單所使用的記憶體。 若要釋放記憶體,請使用 LocalFree 函式的單一呼叫。

如需 argvargc 自變數慣例的詳細資訊,請參閱 自變數定義剖析 C Command-Line 自變數

GetCommandLineW 函式可用來取得適合用來作為 lpCmdLine 參數的命令行字串。

此函式接受包含程式名稱的命令行;程式名稱可以用引弧括住。

CommandLineToArgvW 在後面加上引號字元時,具有反斜杠字元的特殊解譯 (“) 。 此解譯假設任何先前的自變數都是有效的文件系統路徑,否則可能會發生無法預期的行為。

這個特殊解譯會控制剖析器所追蹤的「引號」模式。 當這個模式關閉時,空格符會終止目前的自變數。 開啟時,空格符會新增至自變數,就像所有其他字元一樣。

  • 2n 個反斜杠後面接著引號,會產生 n 個 反斜杠,後面接著開始/結束引號。 這不會成為剖析自變數的一部分,而是切換「以引號為單位」模式。
  • (2n) + 1 反斜杠後面接著引號再次產生 n 個反斜杠,後面接著引號常值 (“) 。 這不會切換「引號」模式。
  • n 反斜杠後面沒有加上引號,只會產生 n 個反斜杠。
重要  

CommandLineToArgvW 會將引號外的空格符視為自變數分隔符。 不過,如果 lpCmdLine 以任意數量的空格符開頭, CommandLineToArgvW 會將第一個自變數視為空字串。 忽略 lpCmdLine 結尾的過多空格符。

 

範例

下列範例示範如何剖析 Unicode 命令行字串。 程式代碼會在結束時釋放自變數清單的記憶體。

#include <windows.h>
#include <stdio.h>
#include <shellapi.h>

int __cdecl main()
{
   LPWSTR *szArglist;
   int nArgs;
   int i;

   szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
   if( NULL == szArglist )
   {
      wprintf(L"CommandLineToArgvW failed\n");
      return 0;
   }
   else for( i=0; i<nArgs; i++) printf("%d: %ws\n", i, szArglist[i]);

// Free memory allocated for CommandLineToArgvW arguments.

   LocalFree(szArglist);

   return(1);
}

規格需求

需求
最低支援的用戶端 Windows 2000 專業版、Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server、Windows Server 2003 [僅限傳統型應用程式]
目標平台 Windows
標頭 shellapi.h
程式庫 Shell32.lib
Dll Shell32.dll (6.0 版或更新版本)