Windows的自帶游戲空當接龍,其中第617局是比較難解的,需要嘗試的次數比較多,而且經常忘記解法和步驟。
原本希望使用AutoIt或AutoHotkey、AAuto一類的工具,寫一段自動化腳本快速解決這一局,但這些工具需要安裝,而且容易被當做病毒。通過Office中的VBA調用Windows的API,對游戲窗口發送按鍵消息,可以快速演示解法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
Declare Function FindWindow Lib "user32" Alias _ "FindWindowA" ( ByVal lpClassName As String , ByVal lpWindowName As String ) As Long Declare Function SendMessage Lib "user32" Alias _ "SendMessageA" ( ByVal hwnd As Long , ByVal wMsg As Long , ByVal wParam As Long , ByVal lParam As Long ) As Long Const WM_CHAR = &H102 Sub f() s = "83 80 83 81 80 " & _ "20 27 72 " & _ "48 46 41 48 42 " & _ "89 48 70 74 78 07 40 27 " & _ "10 14 004 10 01 16 19 " & _ "20 002 42 21 20 " & _ "32 34 24 32 42 34 30 38 " & _ "58 53 63 57 56 50 " & _ "10 10 13 15 35 13 12 18" h = FindWindow( "FreeWClass" , "空當接龍游戲 #617" ) For i = 1 To Len(s) c = Mid(s, i, 1) m = 0.1 If c >= "0" And c <= "9" Then a = SendMessage(h, WM_CHAR, Asc(c), 0) Else m = 0.3 End If m = m + Timer: Do While Timer < m: DoEvents: Loop Next End Sub |