Skip to content

API UO Launch zh tw

Codex edited this page Oct 3, 2026 · 1 revision

UO.Launch

Русский · English · Українська · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

UO.Exec · UO.Launch · UO.CallSub · UO.FunRunning · UO.SubExists

ClassicUO • Runtime API

要求作業系統開啟本機程式或文件,例如戰利品報告或外部工具。Basic 腳本應使用 StartScript。

完整語法

UO.Launch(file:Any) -> Integer
UO.Launch(file:Any, parameters:Any) -> Integer
UO.Launch(file:Any, parameters:Any, workingDirectory:Any) -> Integer
UO.Launch(file:Any, parameters:Any, workingDirectory:Any, hidden:Any) -> Integer

參數

  • file — 必要的程式/文件名稱或路徑,轉為文字並去除兩端空白。空值回傳 0 及訊息。建議完整路徑;不要替 file 本身再加外層引號。
  • parameters — 選用的外部程式參數字串,預設空白。其中含空格的路徑用 Chr(34) 加雙引號。這些不是 Basic 參數。
  • workingDirectory — 選用工作目錄。省略或空字串使用目前腳本的目錄;runtime 無法取得時使用用戶端程序的工作目錄。不一定是遊戲或 EXE 的目錄。
  • hidden — 選用 Boolean,預設 False。True 停用系統殼層,要求執行 EXE 且不建立主控台視窗。False 允許文件關聯;GUI 程式仍可能開啟自己的視窗。

傳回值

Integer:Process.Start 回傳程序物件時為 1(True),否則 0(False);可比較 1/True。不是 PID、結束代碼或完成確認。例外會顯示錯誤並回傳 0。文件可能由既有程式開啟而沒有新程序,所以 0 不一定代表文件未開啟。

行為

  • 僅支援依序一至四個參數。要設定 hidden 但保留預設目錄,第三個參數傳空字串。轉為文字時不會先檢查檔案是否存在。
  • 預設目錄來自正在執行的腳本。hidden=True 時先以 workingDirectory 尋找相對程式路徑。名稱搜尋及文件關聯依系統而異;完整路徑較明確。缺少程式或目錄會導致啟動失敗。
  • Launch 不等待結束、不讀取 stdout/stderr,也不因腳本停止而終止外部程式。hidden 不保證所有 GUI 視窗不可見。要求後會釋放 Process 物件,已啟動的程式繼續執行。

內部函式:從呼叫到結果

以下是用戶端的實作階段,不是額外的 Basic 命令。範例輔助程序都有完整定義。

1. CompactLaunch

僅支援依序一至四個參數。要設定 hidden 但保留預設目錄,第三個參數傳空字串。轉為文字時不會先檢查檔案是否存在。

預設目錄來自正在執行的腳本。hidden=True 時先以 workingDirectory 尋找相對程式路徑。名稱搜尋及文件關聯依系統而異;完整路徑較明確。缺少程式或目錄會導致啟動失敗。

專案原始碼: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; 函式 CompactLaunch.

2. Launch / Process.Start

Launch 不等待結束、不讀取 stdout/stderr,也不因腳本停止而終止外部程式。hidden 不保證所有 GUI 視窗不可見。要求後會釋放 Process 物件,已啟動的程式繼續執行。

Integer:Process.Start 回傳程序物件時為 1(True),否則 0(False);可比較 1/True。不是 PID、結束代碼或完成確認。例外會顯示錯誤並回傳 0。文件可能由既有程式開啟而沒有新程序,所以 0 不一定代表文件未開啟。

專案原始碼: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; 函式 Launch / Process.Start.

以下是用戶端的實作階段,不是額外的 Basic 命令。範例輔助程序都有完整定義。

範例

開啟既有報告

# 開啟既有報告
#
# 要求作業系統開啟本機程式或文件,例如戰利品報告或外部工具。Basic 腳本應使用 StartScript。
#
# Integer:Process.Start 回傳程序物件時為 1(True),否則 0(False);可比較 1/True。不是 PID、結束代碼或完成確認。例外會顯示錯誤並回傳
# 0。文件可能由既有程式開啟而沒有新程序,所以 0 不一定代表文件未開啟。

SUB Main()
    # 將既有 loot-report.txt 放在腳本旁。系統使用 .txt 關聯。Main 回傳啟動要求的結果,不是內容或已閱讀的確認。

    Dim started = UO.Launch("loot-report.txt")
    Return started
END SUB

參數與執行說明:

  • 將既有 loot-report.txt 放在腳本旁。系統使用 .txt 關聯。Main 回傳啟動要求的結果,不是內容或已閱讀的確認。

傳入含空格的報告路徑

# 傳入含空格的報告路徑
#
# 要求作業系統開啟本機程式或文件,例如戰利品報告或外部工具。Basic 腳本應使用 StartScript。
#
# Integer:Process.Start 回傳程序物件時為 1(True),否則 0(False);可比較 1/True。不是 PID、結束代碼或完成確認。例外會顯示錯誤並回傳
# 0。文件可能由既有程式開啟而沒有新程序,所以 0 不一定代表文件未開啟。

SUB Main()
    # 目錄及報告必須存在,請換成自己的路徑。Chr(34) 在 arguments 內包住完整報告路徑。系統必須能找到 notepad.exe;False 允許一般視窗。

    Dim report = "C:\UO Scripts\loot report.txt"
    Dim arguments = Chr(34) & report & Chr(34)
    Return UO.Launch("notepad.exe", arguments, "C:\UO Scripts", False)
END SUB

參數與執行說明:

  • 目錄及報告必須存在,請換成自己的路徑。Chr(34) 在 arguments 內包住完整報告路徑。系統必須能找到 notepad.exe;False 允許一般視窗。

不顯示主控台地列出日誌

# 不顯示主控台地列出日誌
#
# 要求作業系統開啟本機程式或文件,例如戰利品報告或外部工具。Basic 腳本應使用 StartScript。
#
# Integer:Process.Start 回傳程序物件時為 1(True),否則 0(False);可比較 1/True。不是 PID、結束代碼或完成確認。例外會顯示錯誤並回傳
# 0。文件可能由既有程式開啟而沒有新程序,所以 0 不一定代表文件未開啟。

SUB Main()
    # Windows/cmd.exe 在腳本目錄建立或覆寫 log-files.txt,列出 *.log。第三個空參數使用腳本目錄,True 隱藏主控台。Main 的 True
    # 只確認程序啟動:檔案可能尚未完成;找不到日誌或工具錯誤不會改變已回傳的結果。

    Dim started = UO.Launch("cmd.exe", "/d /c dir /b *.log > log-files.txt", "", True)
    If started = 0 Then
        Return False
    End If
    Return True
END SUB

參數與執行說明:

  • Windows/cmd.exe 在腳本目錄建立或覆寫 log-files.txt,列出 *.log。第三個空參數使用腳本目錄,True 隱藏主控台。Main 的 True 只確認程序啟動:檔案可能尚未完成;找不到日誌或工具錯誤不會改變已回傳的結果。

Clone this wiki locally