@
ko1haha V 站截图我没搞明白浏览器中怎么玩。不过我写的汇编有自己的风格,与 AI 生成的不一样。把我主过程拷贝一份贴出来就行了。
_main proc
local @
szAppProcessId[24]:DWORD
local @
szAppLauncherProcessId[24]:DWORD
local @
szStrA2W[MAX_PATH_X8]:WORD
local @
length:DWORD
local @
pos:DWORD
invoke RtlZeroMemory, addr @
szAppProcessId, sizeof @
szAppProcessId invoke RtlZeroMemory, addr @
szAppLauncherProcessId, sizeof @
szAppLauncherProcessId invoke RtlZeroMemory, addr @
szStrA2W, sizeof @
szStrA2W invoke _IsWow64
;初始化当前目录、ini 文件路径
invoke DoInit
;设置工作目录
invoke SetCurrentDirectoryW, addr szExeDirW
invoke GetParameters
invoke lstrcpyW, addr szExecutedCmdStrW, addr szIniCommandLineW
.if bIsLogEnabled
invoke StdOutRichText3AAW, 11B, CTXT("[Log] "), DW_CONSOLE_TEXT_ATTR_DEFAULT, CTXT("Before {var} expand: "), 011B, addr szExecutedCmdStrW
invoke StdOut, addr SZ_NEW_LINEA
.endif
invoke StrReplaceWAW, addr szExecutedCmdStrW, CTXT("{EXE_DIR}"), addr szExeDirW
invoke StrReplaceWAW, addr szExecutedCmdStrW, CTXT("{EXE_NAME}"), addr szExeNameWithoutExtW
invoke StrReplaceWAW, addr szExecutedCmdStrW, CTXT("{APP_PATH}"), addr szAppRealPathW
invoke StrReplaceWAW, addr szExecutedCmdStrW, CTXT("{QUOTATION_MARK}"), addr SZ_QUOTATION_MARK_CHARW
invoke StrReplaceWAW, addr szExecutedCmdStrW, CTXT("{%0}"), addr szCommandLineParameter0W
invoke StrReplaceWAW, addr szExecutedCmdStrW, CTXT("{%1}"), addr szCommandLineParameter1W
invoke StrReplaceWAW, addr szExecutedCmdStrW, CTXT("{%2}"), addr szCommandLineParameter2W
invoke StrReplaceWAW, addr szExecutedCmdStrW, CTXT("{%3}"), addr szCommandLineParameter3W
invoke StrReplaceWAW, addr szExecutedCmdStrW, CTXT("{%4}"), addr szCommandLineParameter4W
invoke StrReplaceWAW, addr szExecutedCmdStrW, CTXT("{%5}"), addr szCommandLineParameter5W
invoke StrReplaceWAW, addr szExecutedCmdStrW, CTXT("{%6}"), addr szCommandLineParameter6W
invoke StrReplaceWAW, addr szExecutedCmdStrW, CTXT("{%7}"), addr szCommandLineParameter7W
invoke StrReplaceWAW, addr szExecutedCmdStrW, CTXT("{%8}"), addr szCommandLineParameter8W
invoke StrReplaceWAW, addr szExecutedCmdStrW, CTXT("{%9}"), addr szCommandLineParameter9W
invoke StrReplaceWAW, addr szExecutedCmdStrW, CTXT("{%*}"), addr szCommandLineParametersW
.if bIsLogEnabled
invoke StdOutRichText3AAW, 11B, CTXT("[Log] "), DW_CONSOLE_TEXT_ATTR_DEFAULT, CTXT("After {var} expand: "), 10B, addr szExecutedCmdStrW
;invoke MultiByteToWideChar, CP_ACP, 0, addr szExecutedCmdStrW, -1, addr szExecutedCmdStrW, MAX_PATH_X8
invoke StdOut, addr SZ_NEW_LINEA
invoke StdOut, addr SZ_NEW_LINEA
.endif
invoke SetConsoleOutputCP, 65001
invoke SetConsoleCP, 65001
invoke CreateProcessW, NULL, addr szExecutedCmdStrW, NULL, NULL, NULL, NORMAL_PRIORITY_CLASS, NULL, NULL, addr stStartUp, addr stProcInfo
.if eax
mov bHasChildProcess, TRUE
.if bIsLogEnabled
invoke wsprintf, addr @
szAppProcessId, CTXT("%u"), stProcInfo.dwProcessId
invoke StdOutRichText3LnA, 11B, CTXT("[Log] "), DW_CONSOLE_TEXT_ATTR_DEFAULT, CTXT("Child process ID: "), 10B, addr @
szAppProcessId invoke StdOut, addr SZ_NEW_LINEA
; invoke StdOut, addr SZ_NEW_LINEA
.endif
invoke WaitForSingleObject, stProcInfo.hProcess, INFINITE
invoke CloseHandle, stProcInfo.hProcess
invoke CloseHandle, stProcInfo.hThread
.else
mov bHasChildProcess, FALSE
ifdef WINDOWS
invoke MessageBoxAW, CTXT("[Error] Cannot launch App: "), addr szExecutedCmdStrW, CTXT("[Error] Cannot launch App")
endif
invoke StdOutRichText3LnAAW, 100B, CTXT("[Error] "), DW_CONSOLE_TEXT_ATTR_DEFAULT, CTXT("Cannot launch App: "), 100B, addr szExecutedCmdStrW
invoke StdOutLastErrorMessage
.endif
ret
_main endp