• 初识按键精灵


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

      首先,其主要功能为:

        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的

    Stay hungry, stay foolish!
  • 相关阅读:
    【转】ASP.NET MVC 使用 FluentScheduler 定时器计划任务
    【转】prototype扩展的JavaScript常用函数库
    【转】JavaScript系列文章:自动类型转换
    【转】Open Live Writer 插件更新
    highcharts与highstock实例
    SQL SERVER数据类型与C#数据类型对照表
    Highcharts在IE中不能一次性正常显示的一种解决办法
    MIME类型大全
    几种工具反编译被编译好的DLL文件
    MySQL之数据库的操作
  • 原文地址:https://www.cnblogs.com/JhonKing/p/5523012.html
Copyright © 2020-2023  润新知