初识按键精灵

  最近一个朋友在拍沪牌,多次不中,于是到网上买了一个软件,号称可以很大程度的提高中标率,果然用了之后,两次就中。然后。。。,他就走上了代拍这条不归路。。。还让我帮他去输验证码。看后发现,其实那个软件完全就是按键精灵制作,难度肯定不大。于是有了我也来仿做一个的想法(因为久闻按键精灵的方便,但从未使用过)。

  首先,其主要功能为:

    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的

 

转载于:https://www.cnblogs.com/JhonKing/p/5523012.html

你可能感兴趣的:(初识按键精灵)