正確解析命令列參數是 Windows 程式開發的基礎。本程式將 GetCommandLine 取得的原始字串逐字元以十六進位顯示,幫助開發者理解各種啟動方式(命令提示字元、捷徑、檔案關聯)下的參數格式差異。
start:
invoke GetCommandLine
mov esi, eax
invoke lstrcat, addr OutString, eax
invoke lstrcat, addr OutString, addr Crlf
invoke lstrlen, esi
mov ecx, eax
cld
L1: push ecx
xor eax, eax
lodsb
invoke dw2hex, eax, addr Temp
invoke lstrcat, addr OutString, addr Temp+6
invoke lstrcat, addr OutString, addr Fg
pop ecx
loop L1
invoke MessageBox, NULL, addr OutString, addr szCaption, MB_OK
invoke ExitProcess, NULL
逐字元轉十六進位(dw2hex 來自 masm32.lib),以空格分隔顯示。
| 情境 | 觀察重點 |
|---|---|
| Console 子系統,命令列執行 | 參數直接附加,程式路徑可能無引號 |
| Windows 子系統,命令列執行 | 同 Console,但無主控台視窗 |
| 建立捷徑並設定參數 | 程式路徑常被引號括住,參數緊接其後 |
| 無任何參數直接啟動 | 字串以單一空白 (0x20) 結尾 |
撰寫通用參數解析器時,務必處理:
參考前文「利用組語從命令列擷取檔案名稱」的 GetFileNameFromCommandLine 即為符合上述規則的健全實作。