指令碼開發教程:按鍵精靈解決型別不匹配問題?

在寫指令碼的過程中,是否經常遇到“型別不匹配:xxx” 這樣的錯誤提示。瞪著眼睛找、眯著眼睛找、斜著眼睛找,就是找不到錯在哪兒啊有木有?小編分享下,曾經困擾過小編的三個 “型別不匹配” 深坑,以及造成這些深坑的原因。已經知道的童鞋,看一看加深下印象。還沒有遇到過的童鞋,看一看,防範於未然~

工具/原料

按鍵精靈2014

方法/步驟

1號坑

下面的例子要實現開啟三個記事本,然後將三個記事本視窗標題分別命名為1 ,2 ,3可是,執行的結果,為什麼只開啟了一個記事本呢?後續的操作去哪兒了?

For i= 1 to 3

RunApp "Notepad.exe"

do

hwnd = Plugin.Window.Find(0, "無標題 - 記事本")//獲取記事本控制代碼

Loop while (Hwnd=0)

Do

If stext = i Then

Exit Do

End If

call Plugin.Window.SetText(hwnd,i)

stext = Plugin.Window.GetText(hwnd)

Loop

Next

1號坑大解析: stext = i //錯就錯在這句程式碼。 stext是獲取視窗標題命令的返回值,是字串型。 i是整型。 變數型別不同是不能比較的。 所以,字串 stext 不等於 整型 i ,不滿足判斷條件。就進入了無限迴圈,重複的修改第一個開啟的記事本的視窗標題。

正確寫法:

For i= 1 to 3

RunApp "Notepad.exe"

do

hwnd = Plugin.Window.Find(0, "無標題 - 記事本")//獲取記事本控制代碼

Loop While (Hwnd = 0)

Do

If cint(stext) = i Then

Exit Do

End If

call Plugin.Window.SetText(hwnd,i)

stext = Plugin.Window.GetText(hwnd)

Loop

Next

2號坑

使用大漠找字的功能,找到遊戲裡的數字,判斷該數字的大小。call Lib.大漠註冊.register() //在大漠註冊的命令庫中已經包含了大漠外掛註冊,字型檔載入,大漠物件建立等操作。並且,經歷了1號坑之後小編也學乖了,將字串變數s轉換成了整型。可是,為什麼還是錯?

錯誤提示資訊:型別不匹配: 'CINT'

call Lib.大漠註冊.register()

s = dm.Ocr(0,0,2000,2000,"9f2e3f-030303",1.0)

If cint(s) > 2000 Then

MessageBox "金額超出"

End If

2號坑大解析: 錯在這裡: cint(s) 。 用 TracePrint s 將s輸出之後,會發現,其實 s 是一個空值。 找字沒有找到,所以返回了空值。 而 cint 是無法將空值轉換成整型的

3號坑

3號坑和1號坑十分相似,都是變數型別不一樣,然後進行大小對比導致的。不同的地方在於,3號坑更加坑。

Dim 陣列(1)

陣列(1) = 1

S="2"

If 陣列(1) < S Then

MessageBox "啥?這也能比較?"

End If

由於事發在很久以前,小編已經找不到原來的程式碼例子,所以用上面的簡化例子。 在原始碼中 變數 s 存放的是小編獲取到的資料,小編一直認為這個資料是整型的,所以沒有轉換型別。沒想到它居然是字串型。如果強硬的將字串型變數和整型變數進行比較,它們是以一種奇怪的規則在比較。不管陣列(1)中是1或者是10000, 陣列(1) < S 的判斷都是成立的。這句判斷欺騙了小編多少感情~甚至還讓小編去懷疑其它的程式碼,經過一遍遍辛苦的排查,讓一個愛笑的小編從此都沒有了笑容。

教程, 型別, 指令碼, 按鍵精靈,
相關問題答案