共用方式為


GetCommandLineA 函式 (processenv.h)

擷取目前進程的命令行字串。

語法

LPSTR GetCommandLineA();

傳回值

傳回值是目前進程的命令行字串指標。

言論

傳回值的存留期是由系統管理,應用程式不應該釋放或修改此值。

控制台進程可以使用 主要wmain 函式的 argcargv 自變數,方法是實作這些自變數作為程序進入點。

GUI 進程可以使用 WinMain 或 wWinMa in 函式的 lpCmdLine 自變數,方法是實作這些函式做為程式進入點。

若要將命令行轉換成字串 argv 樣式陣列,請將 GetCommandLineA 的結果傳遞至 CommandLineToArgvW

注意

操作系統提供給進程的命令行可執行檔名稱不一定與呼叫進程提供給 createProcessA 函式命令行中的可執行檔名稱相同。 操作系統可能會在未提供完整路徑的可執行檔名稱前面加上完整路徑。

安全性備註

GetCommandLineA 傳回的命令行是 Unicode 命令行轉換成 8 位進程代碼頁。

對於大部分的程式代碼頁而言,此轉換會遺失,而轉換的命令行可能會與 Unicode 命令行不同,因此可能會產生如下的安全性問題:

  • 轉換可能會改變要當做檔名使用的字串。 例如,如果 ANSI 代碼頁是 Windows-1252,Unicode 字元 U+0100 (含有 macron: Ā 的拉丁大寫字母 A) 會轉換成 0x41 (拉丁大寫字母 A)。 如果使用者傳遞包含字元 Ā 的檔名,則使用 GetCommandLineA 的程式會以字元 A 接收它,並在錯誤的檔案上運作。
  • 轉換可能會改變命令行剖析的方式。 例如,如果 ANSI 代碼頁是 Windows-1252,Unicode 字元 U+FF02 (Fullwidth 引號: “) 會轉換成 0x22 (ASCII 引號) 和 Unicode 字元 U+2010 (連字元: -) 會轉換成0x2D (ASCII 減號)。 這兩者都可能導致命令行檔案自變數誤譯為命令行選項。

若要避免這個問題,請使用 GetCommandLineW 函式來接收 Unicode 命令行,或使用應用程式指令清單(在 Windows 版本 1903 或更新版本上)將 UTF-8 設定為行程代碼頁](/windows/apps/design/globalizing/use-utf8-code-page)。

注意

processenv.h 標頭會將 GetCommandLine 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows XP [傳統型應用程式 |UWP 應用程式]
支援的最低伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
目標平臺 窗戶
標頭 processenv.h (包括 Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2 上的 Windows.h)
連結庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

CreateProcessA 函式

進程和線程函式