最近一個朋友在拍滬牌,多次不中,於是到網上買了一個軟件,號稱可以很大程度的提高中標率,果然用了之后,兩次就中。然后。。。,他就走上了代拍這條不歸路。。。還讓我幫他去輸驗證碼。看后發現,其實那個軟件完全就是按鍵精靈制作,難度肯定不大。於是有了我也來仿做一個的想法(因為久聞按鍵精靈的方便,但從未使用過)。
首先,其主要功能為:
1、定時出價
2、識別當前的最低可成交價,從而來確定點擊出價的時間
3、放大驗證碼
第一步,也是最煩鎖的一步,就是找各個需要點擊的點的從標位置,因為是在瀏覽器中,所以我們記錄下的相對於瀏覽器里的位置放在 .ini文件中
配置文件格式以這種形式:
[小節名]
#后面跟注釋
變量名 = 值
[default] #系統參數 #位置坐標文件版本和更新時間 Base_Pos_X =8 Base_Pos_Y =55
代碼中讀取
//基准坐標 Base_Pos_X = Plugin.File.ReadINI("default", "Base_Pos_X", "cc.ini") + 0 Base_Pos_Y = Plugin.File.ReadINI("default", "Base_Pos_Y", "cc.ini") + 0
第二步,需要打IE,輸入指定網扯,再調整IE的大小和位置,因為這樣才能使網頁中按鈕在屏幕的指定位置(按鍵精靈使用的是屏幕坐標),這里我使用的是361度窗口插件,這個地方用系統方法也可以達到同樣的效果,我是因為后面用到,所以一並用這個插件了。
這里先做了檢測IE是否已經打開,已經打開就跳過了這一步
HwndEx = Plugin.Window.Search(IE_Search_String) Hwnd = 0 MyArray = Split(HwndEx, "|") If UBound(MyArray) >= 0 Then Hwnd = Clng(MyArray(0)) End If If Hwnd <> 0 Then MessageBox("檢測到IE已經打開") Else RunApp (IE_EXE_Path&" "& Bid_Path) Delay 1000 HwndEx = Plugin.Window.Search(IE_Search_String) MyArray = Split(HwndEx, "|") If UBound(MyArray) >= 0 Then Hwnd = Clng(MyArray(0)) End If End If Call Plugin.WndEx7_20.SetWindowStyle(Hwnd,6) //Call Plugin.Window.Move(Hwnd, 0, 0) Call Plugin.WndEx7_20.MoveWindow(Hwnd, 0, 0) //Call Plugin.Window.SetClientSize(Hwnd, IE_Width, IE_Height) Call Plugin.WndEx7_20.SetWindowSize(Hwnd, IE_Width, IE_Height) //Call Plugin.Window.Top(Hwnd, 1) Call Plugin.WndEx7_20.SetWindowZOrder(Hwnd,0)
第三步,這里還需要顯示很多提示信息到窗口上,可以繼續用361度插件的函數,這里我用的是大漠插件
1、注冊大漠,這里我用的 regsvr32 用注冊,要不然總是不成功,我看別人不用這一句也可以,不知道為什么(?)
//注冊大漠 Sub register() temp_path = Plugin.sys.GetDir(3) PutAttachment temp_path,"dm.dll" Set ws = createobject("Wscript.Shell") ws.run "regsvr32 atl.dll /s" ws.run "regsvr32 dm.dll /s" Delay 1000 Set ws = nothing call Plugin.RegDll.Reg (temp_path&"dm.dll") Set dm = createobject("dm.dmsoft") ver = dm.ver() If len(ver) = 0 Then MessageBox "插件注冊失敗,檢查系統是否禁用了vbs腳本權限" EndScript End If End Sub
2、繪制提示窗口到指定位置
//畫提示窗口/////// foobar_hotkey_tip = dm.CreateFoobarRoundRect(0, tip_top_X, tip_top_Y, tip_width, tip_height, 10, 10)'畫圓角窗口 dm_ret = dm.FoobarSetFont(foobar_hotkey_tip,"宋體",12,1)'設置文本字體大小,加粗 dm_ret = dm.FoobarFillRect(foobar_hotkey_tip, 0, 0, 800, 400, "67599d")'設置矩形條顏色 dm_ret = dm.FoobarDrawText(foobar_hotkey_tip, 10,10,tip_width-20,tip_height-20, "助手版本V 1.0.0", "FFFFFF", 1) dm_ret = dm.FoobarUpdate(foobar_hotkey_tip)'刷新
3、更新配置文件 , 一般這種坐標信息,可能會經常需要變動,因為每次啟動程序后需要更新。這里更新時,主要遇到了編碼問題,使用官方接口更改編碼並沒有什么卵用。於是我修改一下
//下載文件 Sub downloadFile(url, savePath) //說明:支持遠程獲取文本內容,如:MsgBox lib.網絡.獲得網頁源文件("http://www.anjian.com/test.txt") //例子:MsgBox lib.網絡.獲得網頁源文件("http://www.anjian.com") Dim xmlUrl Dim ThisCharCode ,NextCharCode ,BytesToBstr If InStr(url, "http://") = 0 Then xmlUrl = "http://" & url Else xmlUrl = url End If Dim xmlHttp Set xmlHttp = CreateObject("Microsoft.XMLHTTP") xmlHttp.Open "Get", xmlUrl, False xmlHttp.Send xmlBody = xmlHttp.ResponseBody Set xmlHttp = Nothing Set ObjStream = CreateObject("Adodb.Stream") With ObjStream .Type = 1 .Mode = 3 .Open .Write xmlBody .Position = 0 .Type = 2 .Charset = "GB2312" BytesToBstr = .ReadText .Close End With Set ObjStream = Nothing result = BytesToBstr If len(result) > 0 Then If Plugin.File.IsFileExist(savePath) Then Plugin.File.DeleteFile(savePath) End If ret = Plugin.File.WriteFileEx(savePath , result) ret = Plugin.WndEx7_20.MsgBoxEx(Plugin.Window.Foreground() ,"更新配置文件成功!","更新",1,3000,4096) Else ret = Plugin.WndEx7_20.MsgBoxEx(Plugin.Window.Foreground() ,"更新配置文件失敗!","更新",1,3000,4096) End If // MessageBox result downloadFile = result End Sub
這樣前面准備算是完成了,啟動窗口,位置和大小都固定好了。
后面可以新建一個腳本,按下快捷鍵啟動后,進行時間判斷,到時間后,將相應的鼠標操作,比較簡單,就不再羅列了。
然后就是一個放大驗證碼功能,我也是找了很久才找到這個方法,使用了361度插件
我這里做的是,先找到是否有一個取消按鈕,只有在驗證碼彈出窗口才會有取消按鈕。
Plugin.WndEx7_20.SetPictureRgnImage 通過這個函數的適配窗口大小來放大驗證碼。
verify_foobar = 0 Sub scaleImg()//放大驗證碼 FindPic IE_Width/2,IE_Height/2,IE_Width,IE_Height,"plugin/Cancel.bmp",0.8,intX,intY If intX > 0 And intY > 0 Then //找到取消按鈕則出驗證碼 dm_ret = dm.Capture(Cap_Code_TopLeft_X, Cap_Code_TopLeft_Y, Cap_Code_RightBottom_X, Cap_Code_RightBottom_Y, "Log/verify_code.bmp") //畫驗證碼窗口/////// ver_width = Cap_Code_RightBottom_X - Cap_Code_TopLeft_X ver_height = Cap_Code_RightBottom_Y - Cap_Code_TopLeft_Y If verify_foobar = 0 Then //verify_foobar = dm.CreateFoobarRect(0, 200, nScrHeight - 200, ver_width*2, ver_height*2)'畫圓角窗口 verify_foobar = Plugin.WndEx7_20.CreatePictureRgn(0, Verify_Scale_Pos_X, nScrHeight + Verify_Scale_Pos_Y, ver_width*Verify_Scale, ver_height*Verify_Scale) Call Plugin.WndEx7_20.SetPictureRgnStyle(verify_foobar,1) End If Call Plugin.WndEx7_20.SetPictureRgnImage(verify_foobar,"Log/verify_code.bmp") Call Plugin.WndEx7_20.SetWindowZOrder(verify_foobar,0) Else If verify_foobar <> 0 Then Call Plugin.WndEx7_20.SetWindowState(verify_foobar,0) verify_foobar = 0 End If End If End Sub
識別我就做的比較隨意了,都是用的人家現成的字庫,現成長配置
調用大漠的 dm.Ocr() 這個函數
然后就基本上完成了那個軟件的主要功能了
一次使用按鍵,發現其真心的方便,寫個輔助什么的,基本上可以很快完成。雖然我主要用的是源碼模式,他的普通模式,那種接近口語編程方式還也是我第一次接觸到,挺牛X的