教你百分百能解決輸入框無法接收sendstring命令?

有些遊戲中的輸入框用sendstring命令輸入文字無法輸入,遇到這種情況該怎麼辦?

遊戲輸入框sendstring命令 無法輸入之——DNF拍賣行

工具/原料

按鍵精靈2014

方法/步驟

例如之前的DNF,我們想要寫DNF拍賣行的腳本,但是卻發現sendstring命令對拍賣行搜索輸入框無效了。怎麼辦?(DNF目前似乎已經支持sendstring命令了,樓主今天進遊戲前後臺sendstring命令都測試過,可以輸入。)

在之前不支持的情況下,有的朋友藉助了輸入法的短語功能,先把要搜索的內容都編輯成短語,例如:使徒之息百寶袋,我們設置輸入法短語:stzxbbd。 然後在腳本中按下這組鍵既可輸入短語內容。

但是,用這種方法要設置大量的輸入法短語,非常不方便。

——可能有的朋友不需要輸入漢字,只需要輸入英文字母數字即可,這種情況,用keypress一個個輸入或者用命令庫裡的 Call Lib.鍵盤.KeyList(鍵碼組,模擬方式,毫秒延時) 這條鍵碼組命令即可。

除了輸入法這種麻煩的方法,還有其他的方法嗎?

有的,那就是編碼輸入。

百分百能解決輸入框無法接收sendstring命令——編碼輸入

其實對於編碼輸入,大家並不陌生。曾經在網上流傳過一種娛樂玩法,就是讓你按住“Alt”鍵,然後輸入一串數字(小鍵盤區,即Num0-Num9),再鬆開"Alt"會發現當前激活狀態的輸入框裡會出現字符,文字。沒錯,其實這個就是編碼輸入。按住ATL 鍵後,按下數字,再鬆開,會將數字轉換成相對的字符或者文字。

輸入框所採用的編碼方式不是相同的,有的使用Unicode編碼方式,有的是使用ANSI 編碼,那我們怎麼知道輸入框是屬於哪種編碼方式呢?

首先,我們需要先了解下下面的兩個函數:

ASC函數

返回與字符串的第一個字母對應的 ANSI 字符代碼。

ASCw函數

AscW 函數返回 Unicode (寬型)字符代碼。

這裡我們以QQ聊天輸入框窗口為例,將“玩”字通過按小鍵盤的方法輸入到QQ聊天窗口中,

首先我們需要測試,QQ聊天窗口是Unicode編碼還是ANSI 編碼。

我們輸入下面兩行代碼,查看下“玩”字的ANSI編碼是多少。

字符編碼 =Asc("玩")

TracePrint 字符編碼

教你百分百能解決輸入框無法接收sendstring命令

玩字的ASC碼是-12826,我們點擊下QQ聊天窗口,按下atl鍵不放,然後連續按下小鍵盤數字鍵 -12826 ,鬆開atl鍵輸出結果:(不是玩字而是其它字符)

教你百分百能解決輸入框無法接收sendstring命令

我們現在來查看下“玩”字的Unicode編碼是多少

字符編碼 =AscW("玩")

TracePrint 字符編碼

教你百分百能解決輸入框無法接收sendstring命令

玩字的ASCW碼是29609 , 我們點擊下QQ聊天窗口,按下atl鍵不放,然後連續按下小鍵盤數字鍵 29609,鬆開atl鍵輸出結果:(出現的是個玩字,說明QQ聊天窗口的編碼方式是Unicode編碼 )

教你百分百能解決輸入框無法接收sendstring命令

我們把編碼輸入的方式,寫成腳本

從模擬的角度來思考,腳本大致過程為:

1、 獲取需要輸入的字符串中的每個字符

2、 假設字符串為:變量"str"

則字符串中的每個字符即為:

For i=1 To Len(str)

單個字符=Mid(str,i,1)

Next

注:變量"單個字符",即為當前獲取的每個字符。2、獲取每個字符對應的編碼

當要獲取對應字符的Unicode編碼時,則使用AscW命令,若為ANSI編碼使則使用ASC命令。

Unicode編碼獲取:

字符編碼=AscW(單個字符)

ANSI編碼獲取:

字符編碼=Asc(單個字符)

若編碼<0則+65536

代碼:

If 字符編碼<0 Then

字符編碼=字符編碼+65536

End If

3、 將編碼用鍵盤輸入出來,則自動轉換為文字 代碼:

For k=1 To Len(字符編碼)

KeyPress Asc(Mid(字符編碼,k,1))+48,1

Next

解釋:

Asc(Mid(字符編碼,k,1))為獲取單個字符的編碼的每個數字。(因為編碼是一串數字,我們要想輸入必須拆開)

為什麼每個編碼還+48呢? 因為如果不加48,那腳本會自動輸入0-9,而不是Num0-Num9,每個數字的按鍵碼差均為48。如果是輸入0-9,那就真的輸入一串數字了,不會根據編碼生成文字!

源碼:

Function SendString(發送內容, 發送延遲, 文字編碼類型)

If 文字編碼類型 = "ANSI" Or 文字編碼類型 = "Unicode" Then

Dim str, 字符編碼,i, k

str = 發送內容

For i = 1 To Len(str)

If 文字編碼類型 = "ANSI" Then

字符編碼 = Asc(Mid(str, i, 1))

Elseif 文字編碼類型 = "Unicode"

字符編碼 = AscW(Mid(str, i, 1))

End If

If 字符編碼 < 0 Then

字符編碼 = 字符編碼 + 65536

End If

KeyDown 18, 1

For k = 1 To Len(字符編碼)

KeyPress Asc(Mid(字符編碼, k, 1)) + 48, 1

Next

KeyUp 18, 1

Delay 發送延遲

Next

SendString=1

Else

SendString=0

End If

End Function

點擊QQ聊天輸入框,運行腳本,使用ANSI編碼方式在QQ輸入框中輸入的結果如下:

教你百分百能解決輸入框無法接收sendstring命令

輸出的是奇怪的字符。

使用ANSI編碼方式在ie瀏覽器中輸入的結果如下:

教你百分百能解決輸入框無法接收sendstring命令

輸出正常。

使用Unicode編碼方式在QQ輸入框中輸入的結果如下:

教你百分百能解決輸入框無法接收sendstring命令

輸出正常。

使用Unicode編碼方式在ie瀏覽器中輸入的結果如下:

教你百分百能解決輸入框無法接收sendstring命令

輸出的是奇怪的字符。

大家可以參照上面的測試方式,測試所要輸入文字的輸入框,是屬於哪種編碼方式。

樓主測試了下,360瀏覽器和ie瀏覽器的輸入框是ANSI編碼,DNF 和最終幻想的輸入框也是ANSI編碼方式,大家之後要測試瀏覽器或者遊戲,可以優先選擇ANSI編碼方式。

這種編碼方式模擬輸入的方法,支持字符,文字,字母,數字的輸入。

相關問題答案