腳本英雄 Scripting Hero ( 版本: 2.3.9 Plus )
__________________________________________________( 關於 )

(1) [ 腳本英雄 ] 為本人(余明倫 ymlk)自主研發創造出來的程式,本人保有著作權以及最後解釋權。
(2) [ 腳本英雄 ] 主程式Hero.exe,禁止修改及轉賣,發現不當行為請立刻通知本作者。
(3)本人同意可以任何形式轉發 [ 腳本英雄 ],須註明來源出處及原作者。
(4)編寫完成之腳本文件(.TXT檔),不得用於商業用途,希望能夠分享給大家。

注意事項如下:
(1)主程式會綁電腦序號,即可重灌 Windows 不受影響。(格式化及模組化受到周圍變更的影響)
(2)若要換電腦系統,原有雲端帳號匹配後不符合,必須重新購買,恕不補發或退款,提醍注意。
(3)線上遊戲加裝防外掛系統,主程式不一定可行用,如果無法可行用就算了,恕不補發或退款。
(4)主程式掛線上遊戲有機率百分之不準確計算,官方取締抓到不法行為遭帳號被封鎖,否則後果自行負責,恕不補發或退款。

InternetWeb -> http://ymlk.myds.me
DisCord     -> http://discord.gg/mueUUBY
FaceBook    -> http://www.facebook.com/ScriptingHero
FB Groups   -> http://www.facebook.com/groups/741269133859332

__________________________________________________( 免費 / 付費 )

免費    -> 一般鍵鼠和圖色不含特殊功能
付費
VIP -> 特殊突破遊戲遮蔽
~Lib.MouseMsg
~Lib.KeybdMsg
~Lib.GetPixel
~Lib.ScanPixel
~Lib.FindImage
~Lib.Capture


需要試用特殊功能,請到網頁輸入驗證碼後開通即可。

http://ymlk.myds.me/check/

__________________________________________________( 程式參考重點 )

Encoding是編碼格式的文字預設為ANSI,不是Unicode、 UCS-2、UTF-8碼格式。
字符 Byte:1280 是一行長度總共個字符,超過記憶庫以上發生錯誤。

__________________________________________________( 程式外額工具指令 )

請輸入腳本檔名:.site     (雲端腳本)
請輸入腳本檔名:.exe      (腳本打包單獨執行檔)
請輸入腳本檔名:.window   (查詢所有視窗句柄)
請輸入腳本檔名:.obtype   (查詢執行句柄權限)
請輸入腳本檔名:.screen   (螢幕防睡眠狀態)


__________________________________________________( 程式暫停執行 )

組合鍵[暫停]:Shift + Esc
console視窗內按[enter]啟動工作

__________________________________________________( 開頭符號 $ 是局域變量 )

$aaa = 1
$bbb = 10 / 2
$ccc = $aaa + ( 20 * 2 ) - $bbb

__________________________________________________( 支援多重陣列變量,後面需要加 [] )

$aaa[1] = 10
$aaa[1][2] = 20
$bbb = $aaa[1] + $aaa[1][2]

__________________________________________________( 公開變量 $PRF. 不管全域變量和局部變量什麼都能通 )

$prf.a = 123
Def: Call()
    ~Dos.Print($prf.a "\x0a")
End Def
~Call()
~Dos.System("pause")

註: $PRF. 變量未設置自動補給設定 = 0

__________________________________________________( 數學符號運算 )

$aaa = (1 + 2)  '圓括號
$aaa = 1 * 2    '乘法
$aaa = 1 / 2    '除法
$aaa = 1 + 2    '加法
$aaa = 1 - 2    '減法
$aaa = 1 % 2    '餘數
$aaa = 4 &= 4   '邏輯 AND 運算子
$aaa = 2 |= 4   '邏輯 OR  運算子
$aaa = 2 ^= 4   '邏輯 XOR 運算子
$aaa = 100 << 2 '位元左移 1=100+100->200  2=200+200->400
$aaa = 100 >> 2 '位元右移 1=25+25->50     2=50+50->100

__________________________________________________( ++ -- 符號優先前後計算加減1 )

$i = 0
++$i '前置遞增(先加1再傳回變數)
--$i '前置遞減(先減1再傳回變數)
$i++ '後置遞增(先傳回變數再加1)
$i-- '後置遞減(先傳回變數再減1)
Cmp( $i++ < 10 )
    ~Dos.Print($i "\x0a")
Loop
~Dos.System("Pause")

__________________________________________________( 條件判斷式 )

Cmp   (條件比較)
      '條件成立時,執行這裡的敘述。
End


Cmp   (條件比較)
      '條件成立時,執行這裡的敘述。
ElCmp (否則條件比較)
      '條件成立時,執行這裡的敘述。
End


'範例說明
Cmp(1==2)
        ~Dos.Print("對不對\x0a")
ElCmp(2==2)
        ~Dos.Print("對\x0a")
ElCmp()
        ~Dos.Print("不對\x0a")
End
~Dos.System("pause")

__________________________________________________( 迴圈條件判斷式 )

Cmp   (條件比較)
      '條件成立時,執行這裡的敘述。
Loop  (條件比較)


Cmp   (條件比較)
      '條件成立時,執行這裡的敘述。
ElCmp (否則條件比較)
      '條件成立時,執行這裡的敘述。
Loop  (條件比較)

__________________________________________________( Break )

Cmp (條件比較)
    '條件成立時,執行這裡的敘述。
    Break
    '中斷迴圈。
Loop

__________________________________________________( Continue )

Cmp (條件比較)
    '條件成立時,執行這裡的敘述。
    Continue
    '略過條件,不執行這裡的敘述。
Loop

__________________________________________________( 執行條件判斷結果 )

Cmp (1) 或 Cmp ()
    '執行迴圈主體。
Loop


Cmp (0)
    '不執行迴圈主體。
Loop


Cmp (123 == 456)
        '== 等於條件。
End


Cmp (123 <> 456)
        '<> 不等於條件。
End


Cmp (123 <= 456)
        '<= 小於到大於等於條件。
End


Cmp (123 >= 456)
        '>= 大於到小於等於條件。
End


Cmp (123 < 456)
        '< 小於到大於條件。
End


Cmp (123 > 456)
        '> 大於到小於條件。
End


Cmp (123 == 456 && 789 == 123)
        '&& 和等於條件。
End


Cmp (123 == 456 || 789 == 123)
        '|| 或等於條件。
End

__________________________________________________( Loop可替Cmp條件判斷式 )

$a = 0
Cmp
    ~Dos.Print($a++"\x0a")
Loop ($a < 10)
~Dos.System("pause")

__________________________________________________( ~Cmp 簡便條件判斷式 )

$ret = ~Cmp(1 > 10, ~AAA(1, 2), ~BBB(4, 5))
~Dos.Print("計算結果 : " $ret "\x0a")
~Dos.System("pause")

Def: AAA( $a, $b )
    ~Dos.Print("$a + $b : " $a " + " $b "\x0a")
    return $a + $b
End Def

Def: BBB( $a, $b )
    ~Dos.Print("$a * $b : " $a " * " $b "\x0a")
    return $a * $b
End Def


__________________________________________________( GoTo 跳轉標籤 )

:Main
...
GoTo Main


GoTo Main
...
:Main

__________________________________________________( Exit 離開主程式 )

Exit

__________________________________________________( 特殊字符 )

\x 限2個位元,範圍內 00 ~ FF
~Dos.Print("  \x0a  ")  '換行字符
~Dos.Print("  \x0d  ")  '歸位字符
~Dos.Print("  \x09  ")  'Tab
~Dos.Print("  \x5c  ")  '\ 符號
~Dos.Print("  \x28  ")  '( 符號
~Dos.Print("  \x29  ")  ') 符號
~Dos.Print("  \x22  ")  '" 符號
~Dos.Print("  \x2c  ")  ', 符號

__________________________________________________( '註解符號 )

'註解符號不會受到影響執行
~Dos.Print("12345")  '註解符號不會受到影響執行

__________________________________________________( </ ... /> 區域內註解 )

~Dos.Print("弟弟,看到我嗎?\x0a")
</
~Dos.Print("妹妹,看到我嗎?\x0a")
/>
~Dos.System("pause")
__________________________________________________( 後尾 \ 連接詞 )

'注意:(字符 Byte)個字符有限制,超過個字符以上已略過處理。
~Dos.Print("12345" \
           "abcde" \
           "ABCDE")

__________________________________________________( 16進位轉換10進位 )

'0x 不限位元,範圍內 0 ~ F
$aaa = 0x123

__________________________________________________( 使用 Def: ... End Def )

Def:  函式名稱( 參數1 , 參數2 ... )
     '函式內容,無返回值。
End Def

__________________________________________________( Return 返回值 )

Def:  函式名稱( 參數1 , 參數2 ... )
     '函式內容,有返回值( Return )。
     Return 返回值數據資料。
End Def

__________________________________________________( 符號 ~ 使用呼叫函數 Def: )

'Def: ... End Def 區域內結構 $Var 表示局部變量,不是全域變量。

Def: ABC($a, $b)
        ~Dos.Print($a " + " $b " = ")
        ~Dos.Print($a + $b)
        ~Dos.Print("\x0a")
End Def

~ABC(1, 2) '呼叫 ABC 程序
~Dos.System("pause")

__________________________________________________( 陣列參數 $argv[] )

Def: ABC($argv[])
        ~Dos.Print($argv.length "\x0a" \
                   $argv[0]     "\x0a" \
                   $argv[1]     "\x0a" \
                   $argv[2]     "\x0a")
End Def

~ABC(10, 20, 30)
~Dos.System("pause")

__________________________________________________( 內建函式說明 )

~DLLMsg 呼叫 WinAPI 訊息,有兩個(int 整數 , str 字串)傳遞訊息和資料型別返回值
整數資料型別:int
字串資料型別:str
參數僅限型別:整數,字串  <不支援:雙精度浮點數>
~DLLMsg(檔案模組, 資料型別, 函數名稱, 傳遞資料, 傳遞資料, 傳遞資料, ...) '最多 13 個參數
返回值:無/有

如果有數值要傳送當字串的話,請前頭 @ 符號轉字串
$a = ~DLLMsg("User32.DLL", "int", "MessageBoxA", 0, 12345, "Message", 0)
參數: 12345 傳送訊息會崩潰的問題,請改 @12345 傳送字串訊息
$a = ~DLLMsg("User32.DLL", "int", "MessageBoxA", 0, @12345, "Message", 0)
計算公式用變數可支援 @$count
$count = 1 + 2 + 3 + 4 + 5
$a = ~DLLMsg("User32.DLL", "int", "MessageBoxA", 0, @$count, "Message", 0)

---------------------------------------------------------------------------------------------------

~DLLMsg支援ByRef有四個資料型別 <int_ref> <&int_ref> <str_ref> <&str_ref> 讀取DLLMsg參數返回數據
整數資料型別:<int_ref> <&int_ref>
字串資料型別:<str_ref> <&str_ref>
$hWnd = ~Lib.FindWindow(0, "BlueStacks")
$ref = ""
~DLLMsg("User32.DLL", "int", "GetClassNameA", $hWnd, <str_ref>$ref, 255)
~Dos.Print($ref "\x0a")
返回值:有

---------------------------------------------------------------------------------------------------

~COMMsg 呼叫 Activex DLL(COM) 訊息,有兩個(int 整數 , str 字串)傳遞訊息和資料型別返回值
整數資料型別:int
字串資料型別:str
參數僅限型別:雙精度浮點數,整數,字串
~COMMsg(COM模組, 資料型別, 函數名稱, 傳遞資料, 傳遞資料, 傳遞資料, ...) '最多 13 個參數
返回值:無/有

示範: ~COMMsg實現呼叫自動說話功能
$code = "你好嗎"
~COMMsg("Wscript.Shell", "int", "Run", "cmd.exe /c echo " $code "| clip.exe", 0) '啟動剪貼簿
~COMMsg("Wscript.Shell", "int", "Run", "notepad.exe") '啟動記事本
Cmp(1)
    ~Lib.Sleep(1000)
    ~COMMsg("Wscript.Shell", "int", "sendkeys", "^v") '貼上
Loop

如果有數值要傳送當字串的話,請前頭 @ 符號轉字串(請參考 ~DLLMsg 同上)

---------------------------------------------------------------------------------------------------

~COMMsg支援ByRef有二個資料型別 <int_ref> <str_ref> 讀取COMMsg參數返回數據
整數資料型別:<int_ref>
字串資料型別:<str_ref>
$intX = 0
$intY = 0
$ret  = ~COMMsg("dm.dmsoft", "int", "FindPic", 0, 0, 2000, 2000, "C:\abc.bmp", "000000", 0.9, 0, <int_ref>$intX, <int_ref>$intY)
~Dos.Print($intX "\x0a")
~Dos.Print($intY "\x0a")
返回值:有

############################################################################################( Lib )

後台滑鼠訊息
~Lib.MouseMsg(視窗句柄, 訊息, 座標 X, 座標 Y, 焦點激活)
訊息     = 0    游標移動
訊息     = 2    左按下
訊息     = 4    左放開
訊息     = 8    右按下
訊息     = 16   右放開
訊息     = 32   中按下
訊息     = 64   中放開

訊息     = 120  前滾輪
訊息     = -120 後滾輪
訊息     = 100  X1按下
訊息     = 101  X1放開
訊息     = 200  X2按下
訊息     = 201  X2放開

焦點激活 = 0    無
焦點激活 = 1    1號模式
(已付費VIP可開通)
焦點激活 = 2    2號模式 (已付費VIP可開通)
焦點激活 = 3    3號模式 (已付費VIP可開通)
返回值:無

~LMouseClick(視窗句柄, 座標 X, 座標 Y) '滑鼠左鍵單點擊

Def: LMouseClick($hWnd, $x, $y)
       ~Lib.MouseMsg($hWnd, 2, $x, $y, 0)
       ~Lib.Sleep(200)
       ~Lib.MouseMsg($hWnd, 4, $x, $y, 0)
End Def


~RMouseClick(視窗句柄, 座標 X, 座標 Y) '滑鼠右鍵單點擊

Def: RMouseClick($hWnd, $x, $y)
       ~Lib.MouseMsg($hWnd, 8, $x, $y, 0)
       ~Lib.Sleep(200)
       ~Lib.MouseMsg($hWnd, 16, $x, $y, 0)
End Def

---------------------------------------------------------------------------------------------------

後台鍵盤訊息
~Lib.KeybdMsg(視窗句柄, 訊息, 鍵碼, 焦點激活)
訊息     = 0    按下
訊息     = 2    放開
焦點激活 = 0    無
焦點激活 = 1    1號模式 (已付費VIP可開通)
焦點激活 = 2    2號模式 (已付費VIP可開通)
焦點激活 = 3    3號模式 (已付費VIP可開通)
返回值:無


~KeybdClick(視窗句柄, 鍵碼) '鍵盤單點擊

Def: KeybdClick($hWnd, $Vk)
        ~Lib.KeybdMsg($hWnd, 0, $Vk, 0)
        ~Lib.Sleep(200)
        ~Lib.KeybdMsg($hWnd, 2, $Vk, 0)
End Def


---------------------------------------------------------------------------------------------------

發送對話字符訊息
~Lib.SendString(視窗句柄, "字符模式", "字串訊息")
字符模式 = "A"  (單字元模式 ANSI)
字符模式 = "W"  (雙字元模式 Unicode / UTF-8)

返回值:無

---------------------------------------------------------------------------------------------------

判斷是否按到鍵碼
~Lib.GetKey(鍵碼)
返回值:有

示範:
~Dos.Print("按F2啟動,F3離開\x0a")
Cmp
    Cmp(~Lib.GetKey(113))    
'113 = F2
    ~Dos.Print("你按到F2\x0a")
        Cmp(~Lib.GetKey(114))  
'114 = F3
            ~Dos.Print("你按到F3離開了\x0a")
            Break
        ElCmp
            ~Dos.Print("@")
            ~Lib.Sleep(100)
      Loop
    End
    ~Lib.Sleep(100)
Loop

---------------------------------------------------------------------------------------------------

停留延遲
0.5秒 = 500  毫秒
1秒   = 1000 毫秒
~Lib.Sleep(毫秒/ms)
返回值:無

---------------------------------------------------------------------------------------------------

查找父視窗句柄
~Lib.FindWindow("類別", "標題")
返回值:有

---------------------------------------------------------------------------------------------------

16進位轉換10進位
~Lib.Dec(16進位)
返回值:有

---------------------------------------------------------------------------------------------------

10進位轉換16進位
~Lib.Hex(10進位)
返回值:有

---------------------------------------------------------------------------------------------------

ComBoBox清單中選取
~Lib.InputComBoBox("提示字串訊息", "字串設定置", "預設字串設定置")
返回值:有

示範:
$ret = "紅水瓶"
$src = ~Lib.InputComboBox("你好\x0a道具清單中選取", "血量|血魔|紅水瓶|藍水魔", $ret)
~Dos.Print($src "\x0a")
~Dos.System("timeout /t 3")


---------------------------------------------------------------------------------------------------


彈出式輸入方塊
~Lib.InputBox("提示字串訊息", "字串設定置")
返回值:有

---------------------------------------------------------------------------------------------------

RGB轉換10進位
~Lib.RGB(R數值, G數值, B數值)
返回值:有

顏色數值轉換RGB碼
$Color = 12345678
$R = $Color % 256
$G = $Color / 256   % 256
$B = $Color / 65536 % 256
~Dos.Print("紅 red   = " $R "\x0a")
~Dos.Print("綠 green = " $G "\x0a")
~Dos.Print("藍 blue  = " $B "\x0a")
~Dos.System("pause")

---------------------------------------------------------------------------------------------------

取得視窗邊界區域資訊
~Lib.GetWiCr(視窗句柄, 旗標)
旗標 = 0     GetWindowRect.left
旗標 = 1     GetWindowRect.top
旗標 = 2     GetWindowRect.right
旗標 = 3     GetWindowRect.bottom
旗標 = 4     GetClientRect.left
旗標 = 5     GetClientRect.top
旗標 = 6     GetClientRect.right
旗標 = 7     GetClientRect.bottom
返回值:有

---------------------------------------------------------------------------------------------------

取得目前滑鼠座標
~Lib.GetXY(座標)
示範:
$x = ~Lib.GetXY(x)
$y = ~Lib.GetXY(y)
返回值:有

示範:
'後台取得目前滑鼠座標
$hWnd = ~Lib.FindWindow(0, "標題")
Cmp
    $x = ~Lib.GetXY(x) - ~Lib.GetWiCr(0)
    $y = ~Lib.GetXY(y) - ~Lib.GetWiCr(1)
    ~Dos.Print("座標:" $x "," $y "\x0a")
    ~Lib.Sleep(200)
Loop


---------------------------------------------------------------------------------------------------

讀取顏色值
~Lib.GetPixel(視窗句柄, 畫面模式, 座標X, 座標Y)
畫面模式 = "GDI" -> Window(反應快)  /  "DX" -> DirectX(反應慢 -> 已付費VIP可開通)

示範:
$hWnd = ~Lib.FindWindow(0, "遊戲視窗名")
$ret  = ~Lib.GetPixel($hWnd, "GDI", 123, 456)
~Dos.Print("Color:" $ret "\x0a")
~Dos.System("pause")

返回值:有
使用前先測試 ~Lib.Capture 數據資料狀況


---------------------------------------------------------------------------------------------------

搜尋色碼比對

(1)固定位置顏色比對
~Lib.ScanPixel(視窗句柄, 畫面模式, 左上角X, 左上角Y, 顏色值, 偏位座標及顏色x|y|color, 模糊偏色值, 濾鏡, 縱橫)

(2)全搜尋顏色比對
~Lib.ScanPixel(視窗句柄, 畫面模式, 左上角X(啟點), 左上角Y(啟點), 右下角X(終點), 右下角Y(終點), 顏色值, 偏位座標及顏色x|y|color, 模糊偏色值, 濾鏡, 縱橫)

畫面模式                     = "GDI" -> Window(反應快)  /  "DX" -> DirectX(反應慢 -> 已付費VIP可開通)
位座標及頻色 x | y | color = 正負x|正負y|顏色值  /  0 無
模糊偏色值                   = 0.5 ~ 1 (顏色是否變化 1 正常  0.5 ~ 0.9 模糊偏色)
濾鏡                         = 0 ~ 3 ( 0 = 正常  /  1 = 濾鏡[反相]  /  2 = 濾鏡[連環畫]  /  3 = 濾鏡[色溫] )

縱橫                         = 0 往上到下  /  1 往左到右
返回值:有 (零值 = 色碼不符合  /  非零值 = 色碼符合)
使用前先測試 ~Lib.Capture 數據資料狀況


示範(1):
$hWnd = ~Lib.FindWindow(0, "遊戲視窗名")
$Color = ~Lib.ScanPixel($hWnd, "GDI", 100, 200, ~Lib.RGB(128,128,128), 0, 0.9, 0, 0)
~Dos.Print($Color "\x0a")
~Dos.System("pause")

示範(2):
$hWnd = ~Lib.FindWindow(0, "遊戲視窗名")
$Color = ~Lib.ScanPixel($hWnd, "GDI", 0, 0, ~Lib.GetWiCr($hWnd, 6), ~Lib.GetWiCr($hWnd, 7), ~Lib.RGB(128,128,128), -4|2|~Lib.RGB(21,63,39), 0.9, 0, 0)
~Dos.Print($Color "\x0a")
$Color = ~String.Split($Color, " ")
Cmp($Color[0])
    ~Dos.Print("X="$Color[1] " Y=" $Color[2] "\x0a")
ElCmp()
    ~Dos.Print("找不到啦\x0a")
End
~Dos.System("pause")

---------------------------------------------------------------------------------------------------

搜尋圖形比對次數最多16個數據,返回值最多10個數據 [意思搜尋找到相同圖色再來繼續搜尋到完為止,總和次數和座標]
注意( BMP )檔案存取限制24位元色彩和圖檔要求寬高為 1~100(width) * 1~100(height) 像素

(1)固定位置圖形比對
~Lib.FindImage(視窗句柄, 畫面模式, 左上角X, 左上角Y, BMP載入圖檔, 模糊偏色值, 濾鏡, 縱橫)

(2)全搜尋圖形比對
~Lib.FindImage(視窗句柄, 畫面模式, 左上角X(啟點), 左上角Y(啟點), 右下角X(終點), 右下角Y(終點), BMP載入圖檔, 模糊偏色值, 濾鏡, 縱橫)

面模式   = "GDI" -> Window(反應快)  /  "DX" -> DirectX(反應慢 -> 已付費VIP可開通)
模糊偏色值 = 0.5 ~ 1 (顏色是否變化 1 正常  0.5 ~ 0.9 模糊偏色)
濾鏡       = 0 ~ 3 ( 0 = 正常  /  1 = 濾鏡[反相]  /  2 = 濾鏡[連環畫]  /  3 = 濾鏡[色溫] )
縱橫       = 0 往上到下  /  1 往左到右
返回值:有 (零值 = 圖色不符合  /  非零值 = 圖色符合)
使用前先測試 ~Lib.Capture 數據資料狀況


想要略過色碼先手動用小畫家編輯 BMP 原圖補色 RGB(255, 128, 1) => 略過色碼

示範(1):
$hWnd = ~Lib.FindWindow(0, "遊戲視窗名")
$Color = ~Lib.FindImage($hWnd, "GDI", 100, 200, "圖檔1|圖檔2", 0.9, 0, 0)
~Dos.Print($Color "\x0a")
~Dos.System("pause")

示範(2):
$hWnd = ~Lib.FindWindow(0, "遊戲視窗名")
$Color = ~Lib.FindImage($hWnd, "GDI", 0, 0, ~Lib.GetWiCr($hWnd, 6), ~Lib.GetWiCr($hWnd, 7), "目錄資料夾\|圖檔1|圖檔2", 0.9, 0, 0)
~Dos.Print($Color "\x0a")
$Color = ~String.Split($Color, "\x0a")
Cmp($Color[0])
    $Color = ~String.Split($Color[1], " ")
    ~Dos.Print("X="$Color[1] " Y=" $Color[2] "\x0a")
ElCmp()
    ~Dos.Print("找不到啦\x0a")
End
~Dos.System("pause")

說明:目錄資料夾\ '是放在目錄圖檔裡資料庫 \


---------------------------------------------------------------------------------------------------

區域屏幕捕獲擷圖
~Lib.Capture(視窗句柄, 畫面模式, 左上角X(啟點), 左上角Y(啟點), 右下角X(終點), 右下角Y(終點), "存檔名", "詳細留言", 濾鏡)

畫面模式 = "GDI" -> Window(反應快)  /  "DX" -> DirectX(反應慢 ->
已付費VIP可開通)
濾鏡     = 0 ~ 3 ( 0 = 正常  /  1 = 濾鏡[反相]  /  2 = 濾鏡[連環畫]  /  3 = 濾鏡[色溫] )

返回值:無

屏幕捕獲抓圖出來視窗擷圖及座標資料,可以用小畫家來打開看圖色及座標。
~Lib.Capture 數據相連提供給圖色及座標( ~Lib.MouseMsg / ~Lib.GetPixel / ~Lib.ScanPixel / ~Lib.FindImage )

'視窗框擷圖
~Lib.Capture($hWnd, "GDI", 0, 0, ~Lib.GetWiCr($hWnd, 6), ~Lib.GetWiCr($hWnd, 7), "存檔名","", 0)

---------------------------------------------------------------------------------------------------

產生造字圖檔
~Lib.FontBmp("來源文字訊息", 字型大小, 字型粗體, 字型間距, "字型家族", 字型顏色文字, 字型外框陰影, "存檔名")
字型大小     = 8 ~ 72
字型粗體     = 0 ~ 1
字型間距     = 0 ~ 10
字型家族     = 可選  "細明體"  "新細明體"  "標楷體"  "微軟正黑體"
字型外框陰影 = ~Lib.RGB(255, 128, 1) '同背景色
返回值:無

示範:
' "字型家族" 有多種不同字型的變化,交給 ~Lib.FindImage 找圖附加糢糊偏色值機率很高都找得到
~Lib.FontBmp("給予任務", 12, 0, 0, "細明體", ~Lib.RGB(0, 0, 0), ~Lib.RGB(255, 128, 1), "存檔名")

---------------------------------------------------------------------------------------------------

色碼過濾
~Lib.Colorfilter("圖片檔", 顏色值, 偏色範圍, 正反過濾值)
偏色範圍 = 0 ~ 100

過濾值   = 0 反  /  1 正  /  2 反背  /  3 正背
返回值:無

---------------------------------------------------------------------------------------------------


螢幕錄影  <注意:沒有加入錄音!>
~Lib.ScreenREC(視窗句柄, "錄影存檔名", 時間計時器)
時間計時器 = 1 ~ 60 秒

返回值:無
(電腦配備等級強弱速度有差異,幀速率無法準確。)

---------------------------------------------------------------------------------------------------

最小化可調支援截圖
視窗句柄:建議用(父窗口)
~Lib.Minimized(視窗句柄)
返回值:無

---------------------------------------------------------------------------------------------------

讀取某視窗句柄
~Lib.GetEnumWindow("標題")
返回值:有 (零值 = 執行檔不存在  /  非零值 = 標題存在) [注意:一行容量空間有限]

示範(1):
$hWnd = ~String.Split(~Lib.GetEnumWindow("記事本"), "\x0a")
Cmp( $hWnd[0] == 0 )
    ~Dos.Print("\x0a錯誤,沒有開啟視窗!\x0a")
    ~Dos.System("pause")
    Exit
End
~Dos.Print($hWnd)
$Ex = ~String.Split($hWnd[1], "\x0c")
~Dos.Print($Ex[0] "\x0a")
~Dos.Print($Ex[1] "\x0a")
~Dos.System("pause")

---------------------------------------------------------------------------------------------------

讀取執行模組句柄
~Lib.ExeBaseAddr("LineageR.exe")
返回值:有 (零值 = 執行模組不存在  /  非零值 = 執行模組存在)

示範:
$BaseAddr = ~Lib.ExeBaseAddr("LineageR.exe")+0x708DB38
$BaseAddr = ~Lib.ByteMemory($hWnd, $BaseAddr, 8)
$BaseAddr = ~Lib.ByteMemory($hWnd, ~Lib.Dec($BaseAddr)+0x740, 8)
$BaseAddr = ~Lib.ByteMemory($hWnd, ~Lib.Dec($BaseAddr)+0x20,  8)
$BaseAddr = ~Lib.ByteMemory($hWnd, ~Lib.Dec($BaseAddr)+0xB18, 8)
$BaseAddr = ~Lib.ByteMemory($hWnd, ~Lib.Dec($BaseAddr)+0x158, 8)
$BaseAddress = ~Lib.Dec($BaseAddr)+0x68
$ret = ~Lib.Dec(~Lib.ByteMemory($hWnd, $BaseAddress, 4)) '血量基址
~Dos.Print("血量:" $ret "\x0a")
~Dos.System("pause")


---------------------------------------------------------------------------------------------------

客戶端送出文字 [連接埠口最大可用的socket port數目 0 ~ 65535]
~Lib.ClientMsg(IP位址, 連接埠口, "字符模式", 送出訊息)
字符模式 = "A" (單字元模式 ANSI)
字符模式 = "W" (雙字元模式 Unicode / UTF-8)

返回值:有 (0 = 未連接至服務端  /  1 = 連接至服務端)

服務端接收文字 [連接埠口最大可用的socket port數目 0 ~ 65535]
~Lib.ServerMsg(連接埠口)
返回值:有

示範:
'客戶端
Cmp(1)
    ~Dos.Print("請輸入送出文字:")
    $str = ~Dos.Gets()
    $msg = ~Lib.ClientMsg("127.0.0.1", 1234, "A", $str)
    Cmp(~String.StrCmp($str, "exit"))
        ~Dos.Print(~Lib.ServerMsg(5678))
        ~Dos.System("pause")
        Exit
    End
Loop

'服務端
Cmp(1)
    $msg = ~Lib.ServerMsg(1234)
    Cmp(~String.StrCmp($msg, "exit"))
        $msg = ~Lib.ClientMsg("127.0.0.1", 5678, "A", "哦~ 你要離開了。拜拜!\x0a\x0a")
        Exit
    End
    ~Dos.Print($msg.ip " : " $msg.port " -> " $msg "\x0a\x0a")
Loop

---------------------------------------------------------------------------------------------------

客戶端檔案上傳 [連接埠口最大可用的socket port數目 0 ~ 65535]
~Lib.ClientFile(IP位址, 連接埠口, "檔名上傳")
返回值:有 (0 = 未連接至服務端  /  1 = 連接至服務端)

服務端接收檔案 [連接埠口最大可用的socket port數目 0 ~ 65535]
~Lib.ServerFile(連接埠口, "儲存檔名")
返回值:無

---------------------------------------------------------------------------------------------------

剪貼板:剪下
~Lib.SetClip("字串")
返回值:無

剪貼板:貼上
~Lib.GetClip()
返回值:有

---------------------------------------------------------------------------------------------------

讀取本程式版本
~Lib.Ver()
返回值:有

---------------------------------------------------------------------------------------------------

綁定後台座標窗口(限制64位元應用程式)
~Lib.BackPoint(視窗句柄, 座標 X, 座標 Y)
返回值:無

有分三者綁定後台座標及鍵狀態
======================================================================
(1)
~Lib.BackPoint($hWnd, $x, $y)  '綁定後台座標窗口,滑鼠手動操作由鼠標無法移過去。
~Lib.BackPoint($hWnd, 0, 0)    '恢復原來座標狀態
判斷座標需要來源[Alt + Print Screen 組合鍵]截圖放在小畫家讀取像素座標


(2)
~Lib.BackPoint($hWnd, -1, -1)  '獲取鍵狀態
~Lib.BackPoint($hWnd, -1, 0)   '恢復原來獲取鍵狀態

(3)
~Lib.BackPoint($hWnd, -2, -2)  '異步鍵狀態
~Lib.BackPoint($hWnd, -2, 0)   '恢復原來異步鍵狀態


示範: (記得要加~Lib.Sleep延遲處理)
$x = 1227
$y = 32
~Lib.BackPoint($hWnd, $x+1, $y+31) '綁定座標
~Lib.Sleep(200)
~Lib.MouseMsg($hWnd, 0, $x, $y, 1)
~Lib.Sleep(200)
~Lib.MouseMsg($hWnd, 2, $x, $y, 1)
~Lib.Sleep(200)
~Lib.MouseMsg($hWnd, 4, $x, $y, 1)
~Lib.Sleep(200)
~Lib.BackPoint($hWnd, 0, 0)        '恢復原來座標狀態

---------------------------------------------------------------------------------------------------

搜索 BYTE 記憶體
說明:?? 9? ?9 問號是未知數值
說明:7E+5 等於 7E 7F 80 81 82 83  [支援範圍 +1 ~ +F]

~Lib.ScanMemory(進程句柄, "byte數組")
返回值:有

示範:
'讀取視窗代碼
$hWnd = ~Lib.FindWindow(0, "遊戲視窗名")
$sec = ~time.Clock()

$ret = ~Lib.ScanMemory($hWnd, "03 00 ?? 00 F7+3 62 79 08") + 8
$sec = ~time.Clock() - $sec
~Dos.Print("搜尋花時間計算(毫秒):" $sec "\x0a")
~Dos.Print("基址:0x" ~lib.Hex($ret) "\x0a")
~Dos.System("pause")


---------------------------------------------------------------------------------------------------

讀寫Byte位元記憶體
~Lib.ByteMemory(視窗句柄, 基址, 位元)            '讀取Byte 1~8個位元
~Lib.ByteMemory(視窗句柄, 基址, ByteCode, 位元)  '覆寫Byte 1~8個位元
返回值:有/無

示範:
$hWnd = ~Lib.FindWindow(0, "遊戲視窗名")
$BaseAddress = 0x75C50F40                           '基址
~lib.ByteMemory($hwnd, $BaseAddress, 0xaabbccdd, 4) '覆寫
$ret =
~lib.ByteMemory($hwnd, $BaseAddress, 4)      '讀取
~dos.print($ret"\x0a")
~dos.print(~lib.dec($ret)"\x0a")                    '讀取位元數值
~dos.system("pause")


---------------------------------------------------------------------------------------------------

注入奪取特權碼 & 複製特權碼(限制64位元應用程式)

~Lib.Inject("執行檔名")
~Lib.DupPriv("視窗句柄")

返回值:有 (0 = 失敗 / 1 = 成功)
注意:只限執行一次注入程序後,不能繼續重覆,否則會失效。
     若要重覆注入,目標EXE程序也要重開程序對有效。
示範:

(1)注入
~Dos.TextColor(14, 0)
~Dos.Print("
遊戲啟動前,腳本英雄要開前面。\x0a")
Cmp (
~Lib.Inject("LineageR.exe"))
    ~Dos.TextColor(10, 0)
    ~Dos.Print("
注入成功!\x0a")
ElCmp
    ~Dos.TextColor(12, 0)
    ~Dos.Print("注入失敗!\x0a")
End
~Dos.TextColor(7, 0)
~Dos.System("timeout /t 5")


(2)呼叫
$hWnd = ~Lib.FindWindow(0, "LineageW ")
~Dos.Print("複製特權碼:"
~Lib.DupPriv($hWnd) "\x0a")
cmp
    ~mousexy($hWnd, 1197, 30)

    ~lib.sleep(1500)
   
    ~mousexy($hWnd, 1270, 30)

    ~lib.sleep(1500)
loop

def: mousexy($hWnd, $x, $y)
    ~Lib.BackPoint($hWnd, $x+1, $y+31) '綁定座標
    ~Lib.Sleep(200)
    ~Lib.MouseMsg($hWnd, 0, $x, $y, 1)

    ~Lib.Sleep(200)
    ~Lib.MouseMsg($hWnd, 2, $x, $y, 1)
    ~Lib.Sleep(200)
    ~Lib.MouseMsg($hWnd, 4, $x, $y, 1)
    ~Lib.Sleep(200)
    ~Lib.BackPoint($hWnd, 0, 0)        '恢復原來座標狀態
end def


---------------------------------------------------------------------------------------------------

############################################################################################( Dos )

印字
~Dos.Print("字串")
返回值:無

示範:
~Println("你好嗎")
Def: Println($text)
    ~Dos.Print("["~Time.Hour(0)":"~Time.Minute(0)":"~Time.Second(0)"]" $text "\x0a")
End Def

---------------------------------------------------------------------------------------------------

Dos 指令
~Dos.System("字串")
返回值:無

示範:
~Dos.System("pause") '暫停執行

---------------------------------------------------------------------------------------------------

讀取字串
~Dos.Gets()
返回值:有

---------------------------------------------------------------------------------------------------

讀取鍵碼
~Dos.Getch()
返回值:有

---------------------------------------------------------------------------------------------------

取得視窗範圍最大容量
~Dos.GetSize(座標)
示範:
$x = ~Dos.GetSize(x)
$y = ~Dos.GetSize(y)
返回值:有

---------------------------------------------------------------------------------------------------

游標讀取座標
~Dos.GetPos(座標)
示範:
$x = ~Dos.GetPos(x)
$y = ~Dos.GetPos(y)
返回值:有

---------------------------------------------------------------------------------------------------

顯示游標 / 隱藏游標
~Dos.Cursor(數值)
示範:
~Dos.Cursor(0) '顯示
~Dos.Cursor(1) '隱藏
返回值:無

---------------------------------------------------------------------------------------------------

變更游標的座標位置
x : 直欄,其範圍是 0 ~ 79
y : 橫列,其範圍是 0 ~ 24
~Dos.GotoXY(座標 X, 座標 Y)
返回值:無

---------------------------------------------------------------------------------------------------

前景和背景屬性設定
0  黑   ->   背景正常狀況
1  藍
2  綠
3  藍綠
4  紅
5  紫
6  黃
7  白   ->   前景正常狀況
8  灰
9  淡藍
10 淡綠
11 淡藍綠
12 淡紅
13 淡紫
14 淡黃
15 亮白
~Dos.TextColor(前景, 背景)
返回值:無

---------------------------------------------------------------------------------------------------

清除螢幕
~Dos.Clrscr(左, 上, 右, 下)
示範:
~Dos.Clrscr(0, 0, 79, 24)
返回值:無

---------------------------------------------------------------------------------------------------

改變矩形的顏色
~Dos.ChangeRect(左, 上, 右, 下)
示範:
~Dos.ChangeRect(0, 0, 79, 24)
返回值:無

---------------------------------------------------------------------------------------------------

更改字符單元格
~Dos.ChangeChar(左, 上, 右, 下, 字符單元格)
示範:
~Dos.ChangeChar(0, 0, 79, 24, "@")
返回值:無


---------------------------------------------------------------------------------------------------

剪切區域移動本文
x : 直欄,其範圍是 0 ~ 79
y : 橫列,其範圍是 0 ~ 24
~Dos.AreaMove(左, 上, 右, 下, 移動座標 X, 移動座標 Y)
返回值:無

---------------------------------------------------------------------------------------------------

區域複製移到貼上
x : 直欄,其範圍是 0 ~ 79
y : 橫列,其範圍是 0 ~ 24
~Dos.AreaPaste(左, 上, 右, 下, 移到座標 X, 移到座標 Y)
返回值:無


---------------------------------------------------------------------------------------------------

讀取console內部執行記錄
~Dos.CmdRecord("輸入執行")
返回值:有 [注意:23行內顯示資料]

示範:
$cmdStr = ~Dos.CmdRecord("ping www.hinet.net")
~Dos.Print($cmdStr "\x0a\x0a總共行數:" $cmdStr.length "\x0a")
~Dos.TextColor(11, 0)
~Dos.Print($cmdStr[0] "\x0a")
~Dos.Print($cmdStr[5] "\x0a")
~Dos.TextColor(7, 0)
~Dos.System("pause")


#########################################################################################( String )

字串比對
~String.StrCmp("字串1", "字串2")
返回值:有

---------------------------------------------------------------------------------------------------

取得字元
~String.Mid("字串", 啟點位置, 個數)
返回值:有

---------------------------------------------------------------------------------------------------

總長度字串
~String.Len("字串")
返回值:有

---------------------------------------------------------------------------------------------------

搜尋找字元
~String.Instr("字串", "找字串")
返回值:有

---------------------------------------------------------------------------------------------------

反向搜尋找字元
~String.InstrRev("字串", "找字串")
返回值:有

---------------------------------------------------------------------------------------------------

插入字元
~String.Insert("字串" , 插入位置, "插入字串")
返回值:有

---------------------------------------------------------------------------------------------------

刪除字元
~String.Remove("字串", 刪除位置, 個數)
返回值:有

---------------------------------------------------------------------------------------------------

替換字串
~String.Replace("字串", "找字串", "換字串")
返回值:有

---------------------------------------------------------------------------------------------------

左右除去空白
~String.Trim("字串")
返回值:有

---------------------------------------------------------------------------------------------------

翻轉字符串
~String.Reverse("字串")
返回值:有

---------------------------------------------------------------------------------------------------

大寫字母轉小寫
~String.Lower("字串")
返回值:有

---------------------------------------------------------------------------------------------------

小寫字母轉大寫
~String.Upper("字串")
返回值:有

---------------------------------------------------------------------------------------------------

搜尋找字元計數
~String.InCount("字串", "找字串")
返回值:有

---------------------------------------------------------------------------------------------------

判斷是否數值
~String.IsNumber("字串")
返回值:有

---------------------------------------------------------------------------------------------------

左從右替補字
~String.Lmend("字串", "替補字", 數值)
返回值:有

---------------------------------------------------------------------------------------------------

右從左替補字
~String.Rmend("字串", "替補字", 數值)
返回值:有

---------------------------------------------------------------------------------------------------

分隔符號時分割字串
~String.Split("字串", "分隔符號")
返回值:有

'範例說明
$str = ~String.Split("123|456|789", "|")
~Dos.Print("\x0a.length陣列算出幾個元素:" $str.length "\x0a\x0a")
~Dos.Print($str    "\x0a" \
           $str[0] "\x0a" \
           $str[1] "\x0a" \
           $str[2] "\x0a")
~Dos.System("pause")

###########################################################################################( Time )

1 天 = 86400  秒    10  天 = 864000   秒    2500   天 = 216000000   秒
2 天 = 172800 秒    20  天 = 1728000  秒    5000   天 = 432000000   秒
3 天 = 259200 秒    30  天 = 2592000  秒    10000  天 = 864000000   秒
4 天 = 345600 秒    40  天 = 3456000  秒    25000  天 = 2160000000  秒
5 天 = 432000 秒    50  天 = 4320000  秒    50000  天 = 4320000000  秒
6 天 = 518400 秒    100 天 = 8640000  秒    100000 天 = 8640000000  秒
7 天 = 604800 秒    250 天 = 21600000 秒    250000 天 = 21600000000 秒
8 天 = 691200 秒    500 天 = 43200000 秒    500000 天 = 43200000000 秒
9 天 = 777600 秒
秒 = 0 正常現實時間

---------------------------------------------------------------------------------------------------

日期 : 年
~Time.Year(秒)
返回值:有

---------------------------------------------------------------------------------------------------

日期 : 月
~Time.Month(秒)
返回值:有

---------------------------------------------------------------------------------------------------

日期 : 日
~Time.Day(秒)
返回值:有

---------------------------------------------------------------------------------------------------

日期 : 星期幾
~Time.Week(秒)
返回值:有

---------------------------------------------------------------------------------------------------

時間 : 時
~Time.Hour(秒)
返回值:有

---------------------------------------------------------------------------------------------------

時間 : 分
~Time.Minute(秒)
返回值:有

---------------------------------------------------------------------------------------------------

時間 : 秒
~Time.Second(秒)
返回值:有

---------------------------------------------------------------------------------------------------

時間計時器
~Time.Clock()
返回值:有

---------------------------------------------------------------------------------------------------

亂數值
~Time.Rand(數值)
返回值:有

###########################################################################################( Math )

取整數的絕對值
~Math.Abs(數值)
返回值:有

---------------------------------------------------------------------------------------------------

計算四捨五入
~Math.Round(數值)
返回值:有

---------------------------------------------------------------------------------------------------

計算指數
~Math.Exp(數值)
返回值:有

---------------------------------------------------------------------------------------------------

浮點數的整數部份
~Math.Floor(數值)
返回值:有

---------------------------------------------------------------------------------------------------

取得一個浮點數的極大值
~Math.Ceil(數值)
返回值:有

---------------------------------------------------------------------------------------------------

計算平方根值
~Math.Sqrt(數值)
返回值:有

---------------------------------------------------------------------------------------------------

計算對數值
~Math.Log(數值)
返回值:有

---------------------------------------------------------------------------------------------------

計算正弦值
~Math.Sin(數值)
返回值:有

---------------------------------------------------------------------------------------------------

計算餘弦值
~Math.Cos(數值)
返回值:有

---------------------------------------------------------------------------------------------------

計算正切數值
~Math.Tan(數值)
返回值:有

---------------------------------------------------------------------------------------------------

計算次方
~Math.Pow(數值, 次方數值)
返回值:有

---------------------------------------------------------------------------------------------------

判斷最大值
~Math.Max(數值1, 數值2)
返回值:有

---------------------------------------------------------------------------------------------------

判斷最小值
~Math.Min(數值1, 數值2)
返回值:有


###########################################################################################( File )

檔案 : 檢查是否存在檔案
~File.Exists("檔名")
返回值:有 (0 = 檔案不存在  /  1 = 檔案存在)

---------------------------------------------------------------------------------------------------

檔案 : 結尾資料
~File.Eof()
返回值:有 (0 = 未到結尾  /  1 = 已到結尾)

---------------------------------------------------------------------------------------------------

檔案 : 建立讀寫
~File.Open("檔名", "模式")
寫入模式 "w"
讀取模式 "r"
覆寫模式 "a"
返回值:無

---------------------------------------------------------------------------------------------------

檔案 : 讀取資料
~File.Read()
返回值:有

---------------------------------------------------------------------------------------------------

檔案 : 覆寫資料
~File.Write("字串")
返回值:無

---------------------------------------------------------------------------------------------------

檔案 : 加入覆寫資料
~File.AddWrite("字串")
返回值:無

---------------------------------------------------------------------------------------------------

檔案 : 結束
~File.Close("模式")
寫入模式 "w"
讀取模式 "r"
覆寫模式 "a"
返回值:無

---------------------------------------------------------------------------------------------------

檔案 : 讀取容量大小
~File.GetFileSize("檔名")
返回值:有

---------------------------------------------------------------------------------------------------
__________________________________________________( File 說明 )

~File.Open("檔名.txt", "w")    '建立檔案
~File.Write("字串")
~File.Close("w")

~File.Open("檔名.txt", "r")    '讀取資料
~Dos.Print(~File.Read() "\x0a")
~File.Close("r")

~File.Open("檔名.txt", "a")    '加入舊資料後存檔
~File.AddWrite("字串")
~File.Close("a")


'--------------------------------------------------------------------------------------------------
'使用 DLLMsg 呼叫 Windows API 函式庫
'--------------------------------------------------------------------------------------------------
'__________( 啟動窗口焦點 )__________
Def: Active( $hWnd )
  '$hWnd  視窗句柄
  Return ~DLLMsg("User32.DLL", "int", "SetForegroundWindow", $hWnd)
End Def

'__________( 查找父視窗句柄 )__________
Def: FindWindow( $name )
  '$name  標題
  Return ~DLLMsg("User32.DLL", "int", "FindWindowA", 0, $name)
End Def

'__________( 查找子視窗句柄 )__________
Def: FindWindowEx( $hWndEx, $Class )
  '$hWndEx  子視窗句柄
  '$Class   類名
  Return ~DLLMsg("User32.DLL", "int", "FindWindowExA", $hWndEx, 0, $Class, 0)
End Def

'__________( 讀取子窗口標題句柄 )__________
Def: GetWindowText( $hWndEx )
  '$hWndEx  子窗口標題句柄
  $WindowName = ""
  ~DLLMsg("User32.DLL", "int", "GetWindowTextA", $hWndEx, <str_ref>$WindowName, 255)
  Return $WindowName
End Def

'__________( 讀取子窗口類別句柄 )__________
Def: GetClassName( $hWndEx )
  '$hWndEx  子窗口類別句柄
  $ClassName = ""
  ~DLLMsg("User32.DLL", "int", "GetClassNameA", $hWndEx, <str_ref>$ClassName, 255)
  Return $ClassName
End Def

'__________( 讀取螢幕解析度 )__________
Def: GetScreen( $nIndex )
  '$nIndex = 0     寬度 Width
  '$nIndex = 1     高度 Height
  Return ~DLLMsg("User32.DLL", "int", "GetSystemMetrics", $nIndex)
End Def

'__________( 移動視窗 )__________
Def: MoveWindow( $hWnd, $x, $y )
  '$hWnd  視窗句柄
  '$x     座標 X
  '$y     座標 Y
  ~DLLMsg("User32.DLL", "int", "SetWindowPos", $hWnd, 0, $x, $y, 0, 0, 1)
End Def
   
'__________( 設定視窗大小 )__________
Def: SizeWindow( $hWnd, $x, $y )
  '$hWnd  視窗句柄
  '$x     視窗尺寸 X
  '$y     視窗尺寸 Y
  ~DLLMsg("User32.DLL", "int", "SetWindowPos", $hWnd, 0, 0, 0, $x, $y, 2)
End Def

'__________( 獲得駐點視窗句柄 )__________
Def: HandleWindow()
  Return ~DLLMsg("User32.DLL", "int", "GetForegroundWindow")
End Def

'__________( 改變指定窗口的標題 )__________
Def: SetWindowText( $hWnd, $name )
  '$hWnd  視窗句柄
  '$name  設定窗口標題
  ~DLLMsg("User32.DLL", "int", "SetWindowTextA", $hWnd, $name)
End Def

'__________( 抓下載網頁或檔案 )__________
Def: DownloadFile( $http, $file )
  '$http  網址檔名
  '$file  下載存檔名
  ~DLLMsg("Urlmon.DLL", "int", "URLDownloadToFileA", 0, $http, $file, 0, 0)
End Def

'__________( 喇叭播放單音逐漸上高音頻 )__________
Def: Beep()
  $beep = 100
  Cmp( $beep < 1200 )
    ~DLLMsg("Kernel32.DLL", "int", "Beep", $beep, 300)
    $beep = $beep + 100
  Loop
End Def

'__________( 對話方塊 )__________
Def: MsgBox( $String, $Flags )
  '$String 文字資料
  '以下是 $Flags 的設定值
  '0 (MB_OK) : OK按鈕
  '1 (MB_OKCANCEL) : OK, Cancel按鈕
  '2 (MB_ABORTRETRYIGNORE) : Abort, Retry, Ignore按鈕
  '3 (MB_YESNOCANCEL) : Yes, No, Cancel按鈕
  '4 (MB_YESNO) : Yes, No按鈕
  '5 (MB_RETRYCANCEL) : Retry, Cancel按鈕
  '16 : 錯誤圖示
  '32 : 問號圖示
  '48 : 危險圖示
  '64 : 訊息圖示
  Return ~DLLMsg("User32.DLL", "int", "MessageBoxA", 0, $String, "Scripting Hero", $Flags)
End Def

'__________( 呼叫執行檔 )__________
Def: Shell($path)
  '$path 執行檔捷徑
  ~DLLMsg("shell32.dll", "int" , "ShellExecuteA", 0, "open", $path, 0, 0, 5)
End Def

'--------------------------------------------------------------------------------------------------
'多執行緒,視窗改名稱,關閉程序
'--------------------------------------------------------------------------------------------------
'##下面提供給你參考##

'''可以多開多執行緒
'''~Dos.System("Start Hero.exe 1.txt")


'自身可以改視窗名稱
~DLLMsg("Kernel32.DLL", "int", "SetConsoleTitleA", "我的腳本")
'暫停一下,你按enter看看
~Dos.System("pause")


'''讀取自身的句柄
'''$hWnd = ~DllMsg("Kernel32.DLL", "int", "GetConsoleWindow")
'''或下面都可以選遠程找句柄
$hWnd = ~DLLMsg("User32.DLL", "int", "FindWindowA", 0, "我的腳本")

$WM_CLOSE = 0x10
$WM_SYSCOMMAND = 0x0112
$SC_CLOSE = 0xF060

'關閉程序,任選一指令也可以
'~DLLMsg("User32.DLL", "int", "SendMessageA" , $hWnd, $WM_CLOSE, 0, 0)
~DLLMsg("User32.DLL", "int", "SendMessageA" , $hWnd, $WM_SYSCOMMAND, $SC_CLOSE, 0)


'以下你不會看到這個暫停指令
~Dos.Print("你看到我什麼樣子......\x0a")
~Dos.System("pause")

'--------------------------------------------------------------------------------------------------
'鍵碼資料庫
'--------------------------------------------------------------------------------------------------
$Mouse.Left   = 1
$Mouse.Right  = 2

$Key.0        = 48
$Key.1        = 49
$Key.2        = 50
$Key.3        = 51
$Key.4        = 52
$Key.5        = 53
$Key.6        = 54
$Key.7        = 55
$Key.8        = 56
$Key.9        = 57

$Key.A        = 65
$Key.B        = 66
$Key.C        = 67
$Key.D        = 68
$Key.E        = 69
$Key.F        = 70
$Key.G        = 71
$Key.H        = 72
$Key.I        = 73
$Key.J        = 74
$Key.K        = 75
$Key.L        = 76
$Key.M        = 77
$Key.N        = 78
$Key.O        = 79
$Key.P        = 80
$Key.Q        = 81
$Key.R        = 82
$Key.S        = 83
$Key.T        = 84
$Key.U        = 85
$Key.V        = 86
$Key.W        = 87
$Key.X        = 88
$Key.Y        = 89
$Key.Z        = 90

$Key.F1       = 112
$Key.F2       = 113
$Key.F3       = 114
$Key.F4       = 115
$Key.F5       = 116
$Key.F6       = 117
$Key.F7       = 118
$Key.F8       = 119
$Key.F9       = 120
$Key.F10      = 121
$Key.F11      = 122
$Key.F12      = 123

$Key.Back     = 8
$Key.Tab      = 9
$Key.Enter    = 13
$Key.Shift    = 16
$Key.Ctrl     = 17
$Key.Alt      = 18
$Key.CapsLock = 20
$Key.Esc      = 27
$Key.Space    = 32
$Key.LWin     = 91
$Key.RWin     = 92

$Key.Insert   = 45
$Key.Delete   = 46
$Key.Home     = 36
$Key.End      = 35
$Key.PageUp   = 33
$Key.PageDown = 34

$Key.Up       = 38
$Key.Down     = 40
$Key.Left     = 37
$Key.Right    = 39

$Key.Print    = 44
$Key.Pause    = 19
$Key.NumLock  = 144

'------------------------------------------------------------------------------
'全螢幕前台控制
'------------------------------------------------------------------------------(箭頭移動)
Def: Mouse_Move($dx, $dy)
    $MOUSEEVENTF_MOVE = 0x0001
    $MOUSEEVENTF_ABSOLUTE = 0x8000
    $GetScreenX = ~DLLMsg("User32.DLL", "int", "GetSystemMetrics", 0)
    $GetScreenY = ~DLLMsg("User32.DLL", "int", "GetSystemMetrics", 1)
    ~DLLMsg("User32.DLL", "int", "mouse_event", $MOUSEEVENTF_ABSOLUTE + $MOUSEEVENTF_MOVE, $dx * 65536 / $GetScreenX + 1, $dy * 65536 / $GetScreenY + 1, 0, 0)
End Def
'------------------------------------------------------------------------------(滑鼠左按下)
Def: Mouse_LeftDown()
    $MOUSEEVENTF_LEFTDOWN = 0x0002
    ~DLLMsg("User32.DLL", "int", "mouse_event", $MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
End Def
'------------------------------------------------------------------------------(滑鼠左放開)
Def: Mouse_LeftUp()
    $MOUSEEVENTF_LEFTUP = 0x0004
    ~DLLMsg("User32.DLL", "int", "mouse_event", $MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
End Def
'------------------------------------------------------------------------------(滑鼠右按下)
Def: Mouse_RightDown()
    $MOUSEEVENTF_RIGHTDOWN = 0x0008
    ~DLLMsg("User32.DLL", "int", "mouse_event", $MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
End Def
'------------------------------------------------------------------------------(滑鼠右放開)
Def: Mouse_RightUp()
    $MOUSEEVENTF_RIGHTUP = 0x0010
    ~DLLMsg("User32.DLL", "int", "mouse_event", $MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0)
End Def
'------------------------------------------------------------------------------(鍵盤按下)
Def: Keybd_Down($bVk)
    $KEYEVENTF_KEYDOWN = 0x0000
    $bScan = ~DLLMsg("User32.DLL", "int", "MapVirtualKeyA", $bVk, 0)
    ~DLLMsg("User32.DLL", "int", "keybd_event", $bVk, $bScan, $KEYEVENTF_KEYDOWN, 0)
End Def
'------------------------------------------------------------------------------(鍵盤放開)
Def: Keybd_Up($bVk)
    $KEYEVENTF_KEYUP = 0x0002
    $bScan = ~DLLMsg("User32.DLL", "int", "MapVirtualKeyA", $bVk, 0)
    ~DLLMsg("User32.DLL", "int", "keybd_event", $bVk, $bScan, $KEYEVENTF_KEYUP, 0)
End Def