初識按鍵精靈


  最近一個朋友在拍滬牌,多次不中,於是到網上買了一個軟件,號稱可以很大程度的提高中標率,果然用了之后,兩次就中。然后。。。,他就走上了代拍這條不歸路。。。還讓我幫他去輸驗證碼。看后發現,其實那個軟件完全就是按鍵精靈制作,難度肯定不大。於是有了我也來仿做一個的想法(因為久聞按鍵精靈的方便,但從未使用過)。

  首先,其主要功能為:

    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的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM