欢迎您, 游客
您必须先注册才能在我们的站点发帖。

用户名
  

密码
  





论坛搜索

(高级搜索)

最近的主题
如何把字符串转为日期或时间
最近发表: Berg
今天 10 : 58
» 回复: 2
» 人气: 59
程序加密启动 v2.5
最近发表: ddfdc2511
今天 08 : 56
» 回复: 6
» 人气: 462
连连看辅助
最近发表: necrohan
2017-07-19 18 : 18
» 回复: 0
» 人气: 42
当某位置颜色是黄色执行点击其他颜色不点击
最近发表: shark55
2017-07-19 14 : 09
» 回复: 1
» 人气: 190
如何批量生成Button?
最近发表: feiyue
2017-07-18 11 : 33
» 回复: 1
» 人气: 80
LINE:mdd168台中火車站叫小姐/火車站外送...
最近发表: wo4512
2017-07-18 02 : 44
» 回复: 5
» 人气: 101
亳州大学生美女做保健服务
最近发表: raaasss
2017-07-17 10 : 59
» 回复: 0
» 人气: 54
bbc2而嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯
最近发表: bbc2
2017-07-17 00 : 16
» 回复: 0
» 人气: 52
人人人人人人人人人人人人人人人
最近发表: bbc2
2017-07-17 00 : 11
» 回复: 0
» 人气: 49
呃呃呃鹅鹅鹅鹅鹅鹅饿
最近发表: bbc2
2017-07-16 23 : 38
» 回复: 0
» 人气: 41

 
  连连看辅助
发布: necrohan - 2017-07-19 18 : 18 - 无回复

看了通用的验证码识别的那个帖子(http://ahk8.com/thread-4924.html),学了些皮毛,这几天做了个连连看的辅助,第一次用GUI,第一次用对象数组……
连连看算法可以参考 http://blog.csdn.net/whatday/article/details/8988932
连连看游戏在附件中,也可以从下面的地址下载:
http://pan.baidu.com/s/1nvqPmMd
由于识别算法简单(就取几个像素求和),个别方块(2种)匹配有问题

使用方法:
1、开始游戏后,按F2自动匹配。
2、如果F2没有找到匹配,用软件的F5提示后手动匹配一下,然后再F2自动匹配。

发现GUI调用有个问题,比如生成宽200,高300的窗口,实际生成的是宽250,高375,都放大了1.25倍,不知道为什么,求指教。(AHKV1.1.22 )

代码:
/*
自动匹配过程:
1、计算图像的特征颜色数组
2、如有相邻颜色相同,直接连接,重复1
3、计算图像的边界数组;
4、对所有边界方块循环匹配判断,如有则连接后重复1
5、无匹配则输出特征颜色数组和边界数组供检查

匹配过程(上面步骤4):
1、直连匹配,成功则返回true
2、一折连匹配,成功则返回true
3、二折连匹配,成功则返回true
4、返回false
*/

; ----------------------------------------------------------
; 公共变量设置
#NoEnv ; 不检查空变量是否为环境变量, 用 EnvGet 来获取环境变量或使用内置变量, 例如 A_WinDir.
#SingleInstance Force ; 当脚本前一个实例正在运行时, 启动该脚本时会执行的动作,FORCE 会跳过对话框并自动替换旧实例, 效果类似于 Reload 命令
SetBatchLines, -1 ; 脚本的执行速度(影响 CPU 使用率)。-1 让脚本无休眠运行(即让脚本以全速运行)。

CoordMode, Pixel,Client  ; Pixel: 作用于 PixelGetColor, PixelSearch 和 ImageSearch
CoordMode, Mouse,Client  ; Mouse: 作用于 MouseGetPos, Click 以及 MouseMove/Click/Drag
CoordMode, ToolTip ; 作用于 ToolTip
; CoordMode 命令设置坐标模式,相对于活动窗口还是屏幕。如果省略第二个参数, 则默认为 Screen。第二个参数:
; Screen: 坐标相对于桌面 (整个屏幕).
; Window: 坐标相对于活动窗口
; Client:坐标相对于活动窗口的工作区,不包括标题栏、菜单栏(如果它含有标准菜单栏)和边框。Client 坐标模式较少依赖于操作系统版本和主题.

SetTitleMatchMode, 2 ; 2:窗口标题的某个位置必须包含 WinTitle
SetWorkingDir, %A_ScriptDir% ; 改变脚本的当前工作目录

; Spy显示程序窗口宽高 774*658  Client: w: 768    h: 600,顶部菜单栏55像素,左右和底下3像素边框
; global超级全局变量,函数中也可以引用
global NX, NY, WXPix, WYPix, cx, cy, dx, dy, x0, y0, ClientX, ClientY
global BlockColor,isBound ; 方块颜色特征值数组,是否在边界上
NX:=16, NY:=9   ; 方块个数
WXPix:=40, WYPix:=50 ; 方块x和y方向像素数
cx:=2, cy:=1    ; x,y方向识别特征点个数
dx:=WXPix//(cx+1), dy=WYPix//(cy+1) ; 特征点像素间隔
x0:=62, y0:=96  ; 方块开始坐标,Client坐标系,第一个方块左上角(x0,y0)
ClientY:=55     ; 连连看的Client区域y坐标为 WinGetPos 返回值+ClientY 菜单栏区域占用
ClientX:=3      ; 连连看的Client区域x坐标为 WinGetPos 返回值+ClientX 边框占用
BlockColor:=[]  ; 方块颜色特征值数组
Return

; ----------------------------------------------------------
Esc::Reload
/* 调试用
Esc::      ;//Esc为重启脚本热键
; 保存记事本中的文件
IfWinExist, %A_ScriptName% ahk_class Notepad ; %A_ScriptName%当前脚本的文件名称, 不含路径, 例如 MyScript.ahk
{
  PostMessage, 0x111, 3 ; 发送消息到窗口或控件 WM_COMMAND = 0x111(3 保存文件)
  Sleep, 500
}
Reload
Return

; Pause::Pause      ;//暂停脚本热键,用于调试
; F2::Run, Notepad.exe %A_ScriptName%      ;//编辑脚本热键
*/
; ----------------------------------------------------------
F1::      ; 鼠标下的方块是否与其他方块匹配
  if !RefreshBlock() ; 不是对应的应用程序直接退出,相邻匹配后也退出
    Return
;-----------------------------手动搜索与鼠标下匹配的方块
  MouseGetPos, xpos, ypos ; MsgBox, The cursor is at X%xpos% Y%ypos%.
  xy2ij(xpos,ypos,i,j)    ; 当前鼠标在(i,j)方块上
  color0:=BlockColor[i][j]
  if ( color0=0 ) ; 如果是黑色直接返回
    Return

  If(SearchMatch(i,j,iB,jB))
  {
    MatchClick(i,j,iB,jB) ; 匹配相连
    Return
  }
  ; WriteDebugFile("连连看外挂.LOG")
Return
; ----------------------------------------------------------
F2::      ; 自动进行所有方块匹配
  Loop
  {
    if !RefreshBlock() ; 不是对应的应用程序直接退出
      Return
    ; Click Right ; 先单击鼠标右键取消选择

    If(!AutoMatchAll()) ; 自动进行所有方块匹配
      Break             ; 找不到匹配退出循环
  }
;-----------------------------找不到匹配的情况
  WriteDebugFile("连连看外挂.LOG")
;-----------------------------
; 找不到匹配的情况下对鼠标下的方块匹配,突出显示
  MouseGetPos, xpos, ypos ; MsgBox, The cursor is at X%xpos% Y%ypos%.
  xy2ij(xpos,ypos,i,j)    ; 当前鼠标在(i,j)方块上
  color0:=BlockColor[i][j]
  ; MsgBox, %i%-%j%-%color%
  if ( color0=0 ) ; 如果是黑色直接返回
    Return

  Loop, %NY% ; 对方块循环
  {
    jB:=A_Index
    Loop, %NX%
    {
      iB:=A_Index
      color:=BlockColor[iB][jB] ; 统计特征值
      if( color=color0 ) ; 颜色相同的方块突出显示
      {
        GuiColor=Green
        GuiIJ(iB,jB,100,GuiColor) ; 显示正在处理的方块
      }
    }
  }
Return
; ----------------------------------------------------------
; 数组颜色初始化
InitBlockColor()
{
  ; 对每个方块特征点读取像素颜色,计算特征数据,保存到数组 BlockColor 中
  BlockColor:=[]  ; 图像特征数组
  NX2:=NX+2, NY2:=NY+2 ; 数组为[0~NX+1,0~NY+1]
  Loop, %NX2% ; 初始化,周边相当于多一圈空白方块,可以连线
  {
    iB:=A_Index-1
    BlockColor[iB]:=[] ; 初始化
    Loop, %NY2%
    {
      jB:=A_Index-1
      BlockColor[iB][jB]:=0 ; 0相当于RGB的黑色
    }
  }

  Loop, %NX% ; 对方块循环
  {
    iB:=A_Index
    Block_x0:=x0+(iB-1)*WXPix ; 方块左上角x坐标
    Loop, %NY%
    {
      jB:=A_Index
      Block_y0:=y0+(jB-1)*WYPix ; 方块左上角y坐标,(Block_x0,Block_y0)相当于方块左上角坐标
      ; MouseMove, Block_x0, Block_y0, 5 ; debug
      ; BlockColor[iB][jB]:=0 ; 特征数组初始化

      Loop, %cx% ; 处理每个方块内的特征点
      {
        ix:=A_Index
        Loop, %cy%
        {
          iy:=A_Index
          PickX:=Block_x0+ix*dx ; 计算要读取像素颜色点坐标 (PickX,PickY)
          PickY:=Block_y0+iy*dy ; 这里ix*dx也可以是 WXPix/2+ix*n,n为平移的像素个数,即只采集局部几个点
          ; MouseMove, PickX, PickY, 3
          PixelGetColor, color, %PickX%, %PickY%, RGB ; 读取特征点RGB颜色
          color:=RGB2Str(color)     ; RGB颜色转为特征值
          BlockColor[iB][jB]+=color ; 统计特征值(多个点相加,数值可能超过 0xFFFFFF)
        }
      }
    }
  }
  ; MsgBox,4096,, 颜色取值完成, 1
  Return true
}
; ----------------------------------------------------------
; 由于判断方块是否在边界进行匹配,因此内部的方块不会匹配
; 内部相邻方块需要单独处理,消除后方块可能移动,需重新刷新数组
; 匹配过返回 true,需重新刷新数组;否则返回 false 不需要刷新数组
MatchAdjecentBlock()
{
  Loop, %NY% ; 对方块循环
  {
    jB:=A_Index
    Loop, %NX%
    {
      iB:=A_Index
      If( BlockColor[iB][jB] = 0 ) ; 黑色方块不处理
        Continue
      ; 右侧相同
      if( BlockColor[iB+1][jB]<>0 && BlockColor[iB][jB] = BlockColor[iB+1][jB] )
      {
        MatchClick(iB,jB,iB+1,jB) ; 匹配之后点击两个方块相连,返回
        Return true ; 匹配返回,已经消除过了,需要重新初始化
      }
      ; 下侧相同
      if( BlockColor[iB][jB+1]<>0 && BlockColor[iB][jB] = BlockColor[iB][jB+1] )
      {
        MatchClick(iB,jB,iB,jB+1) ; 匹配之后点击两个方块相连,返回
        Return true
      }
    }
  }
  Return false  ; 没有相邻方块匹配
}
; ----------------------------------------------------------
RefreshBlock() ; 对整个图形区域初始化
{
  ; 初始化,得到窗口Client区域坐标
  MouseGetPos,,, id        ; 鼠标光标下窗口的 ID 号
  WinGetTitle, wt, ahk_id %id%      ; 根据 ID 找到窗口标题
  ; WinGetActiveTitle, wt
  IfNotInString, wt, 连连看V3.0 ; 标题不包含该字符串可能不是要处理的应用程序
  {
    MsgBox, %wt%
    Return false
  }
  ; MouseGetPos, xpos, ypos ; MsgBox, The cursor is at X%xpos% Y%ypos%.
  WinGetPos, Xpos, Ypos, Width, Height, ahk_id %id% ; ahk_id %id%可用A代替,表示获取活动窗口的位置
  ; MsgBox, %Width%, %Height%
  Ypos+=ClientY, Xpos+=ClientX ; 修正工作区范围,(Xpos,Ypos)相当于Client的左上角
  ; Height-=ClientY
  ; Width-=ClientX*2
  ; xywh2xywh(x1,y1,x2-x1+1,y2-y1+1,x,y,w,h) ; 修正输入范围在屏幕范围内,左上角(x,y),宽w高h
  ;-----------------------------
  Loop
  { ; 因为相邻方块匹配后方块位置可能改变,因此需要重新初始化
    InitBlockColor()  ; 初始化每个方块颜色特征数据,保存到数组 BlockColor 中
    If(!MatchAdjecentBlock()) ; 没有相邻方块匹配上可以不必再初始化了
      Break
  }
  ;-----------------------------生成边界方块数组 isBound[i,j]
  isBound:=[] ; 是否为边界方块(只有边界方块才能连接)

  ; 相邻方块相同的刚处理过,判断方块是否在边界上(可用)
  Loop, %NX% ; 对方块循环
  {
    iB:=A_Index
    isBound[iB]:=[]
    Loop, %NY%
    {
      jB:=A_Index
      If(BlockColor[iB][jB]!=0) ; 有方块
        isBound[iB][jB]:=1 ; 先初始化为在边界上
      Else
        isBound[iB][jB]:=0 ; 不能使用的位置
    }
  }
  
  i:=2  ; 第1行、列的方块和NX、NY行列肯定是边界方块,不必判断
  While i<NX
  {
    j:=2
    While j<NY
    {
      If(isBound[i][j]=1) ; 非空白方块上下左右只要有一个空白就是边界方块
      {
        If(!(BlockColor[i+1][j]=0 || BlockColor[i][j+1]=0
          || BlockColor[i-1][j]=0 || BlockColor[i][j-1]=0))
          isBound[i][j]:=0
      }
      j++
    }
    i++
  }

  Return true
}
; ----------------------------------------------------------
; 自动匹配所有方块
AutoMatchAll()
{
  Loop, %NY% ; 对方块循环
  {
    jB:=A_Index
    Loop, %NX%
    {
      iB:=A_Index
      If( isBound[iB][jB] = 0 ) ; 非边界方块不处理
        Continue

      GuiColor=Red
      GuiIJ(iB,jB,50,GuiColor) ; 显示正在处理的方块,注释掉可以加速一点

      ; 相当于总是从左上角开始,先由左到右,后由上到下搜索
      If(SearchMatch(iB,jB,i,j)) ; 找到匹配方块
      {
        MatchClick(iB,jB,i,j) ; 匹配相连
        Return true
      }
    }
  }
  Return false ; 没有找到匹配的方块
}
; ----------------------------------------------------------
; 搜索与(i,j)方块可连接的方块(iB,jB),成功返回true,否则返回false
SearchMatch(i,j,ByRef iB,ByRef jB)
{
  color0:=BlockColor[i][j] ; (i,j)方块的颜色
  Loop, %NY% ; 对方块循环
  {
    jB:=A_Index
    Loop, %NX%
    {
      iB:=A_Index
      If( isBound[iB][jB] = 0 ) ; 非边界方块不处理
        Continue
      If(i=iB && j=jB)  ; 同一方块,跳过
        Continue
      If( color0=BlockColor[iB][jB] ) ; 颜色相同的方块突出显示
      {
        If(MatchBlock_Two(i,j,iB,jB))
        {
          ;MsgBox, 匹配:%i%`,%j%-%iB%`,%jB%
          ; MatchClick(i,j,iB,jB) ; 匹配相连
          Return true
        }
      }
    }
  }
  Return false
}
; ----------------------------------------------------------
; 输出调试文件
WriteDebugFile(strFile)
{
  ; 颜色保存到文件检查
  ; FormatStr:=A_FormatInteger  ; 保留原格式
  ; SetFormat, IntegerFast, hex ; 把十进制整数转换为十六进制
  ; Var += 0  ; 赋值 Var (原来的内容为 11) 为 0xb.
  ; Var .= ""  ; 这行是必须的, 因为在快速模式.
  FileDelete, %strFile%
  NX2:=NX+2, NY2:=NY+2 ; 数组为[0~NX+1,0~NY+1]
  Loop, %NY2% ; 对方块循环
  {
    jB:=A_Index-1
    Loop, %NX2%
    {
      iB:=A_Index-1
      color:=BlockColor[iB][jB] ; 统计特征值
      FileAppend, %color%%A_Space%, %strFile% ; %iB%-%jB%:%color%%A_Space%
    }
    FileAppend, `n, %strFile%
  }
  FileAppend, `n, %strFile%
  
  Loop, %NY% ; 对方块循环
  {
    jB:=A_Index
    Loop, %NX%
    {
      iB:=A_Index
      Boun:=isBound[iB][jB]     ; 边界判断
      FileAppend, %Boun%%A_Space%, %strFile%
    }
    FileAppend, `n, %strFile%
  }
  ; SetFormat, IntegerFast, %FormatStr%
  Return
}
; ----------------------------------------------------------
; 颜色特征值计算
RGB2Str(color)
{
  colorR:=(color>>16), color-=(colorR<<16)
  colorG:=(color>>8),  color-=(colorG<<8)
  colorB:=color
  RGBStr:=colorR+colorG+colorB ; R+G+B作为特征值
  ; if colorB<16 colorB:="0" colorB ; 为生成字符串准备
  ; RGBStr.=colorR colorG colorB ; 颜色转RGB数值字符串
  return RGBStr
}

; 鼠标坐标转为块序号
xy2ij(x,y,ByRef i,ByRef j)
{
  If ( x<x0 || x>(x0+NX*WXPix) ) ; 判断坐标是否超出范围
    i:=0
  Else
    i:=(x-x0)//WXPix+1

  If ( y<y0 || y>(y0+NY*WYPix) )
    j:=0
  Else
    j:=(y-y0)//WYPix+1
}
; 块序号转为鼠标坐标
ij2xy(i,j,ByRef x,ByRef y)
{
  x:=x0+(i-1)*WXPix+dx ; +dx 是为了把坐标移动到方块中
  y:=y0+(j-1)*WYPix+dy ; 替换为+0.5*WXPix?
}

GuiIJ(i,j,ms,GuiColor) ; 对(i,j)块做个窗口
{
  ij2xy(i,j,x,y)
  WinGetPos, Xpos, Ypos, Width, Height, A ; 获取活动窗口的位置
  x:=Round(x-dx+ClientX+Xpos)
  y:=Round(y-dy+ClientY+Ypos)
  ;MsgBox, %i%-%j%-%GuiColor%
  Width:=Round(WXPix//1.25)   ; 不知道为什么窗口显示时都放大1.25倍了,只能直接缩小
  Height:=Round(WYPix//1.25)
  BoxID:=i*j
  Gui,BoxID: Destroy ; 移除当前窗口
  Gui,BoxID: +LastFound +AlwaysOnTop ; 在显示窗口之前改变其属性时
  WinSet, Transparent, 100 ; 设置透明度 0 完全透明, 255 完全不透明 OFF 完全关闭,降低系统资源的占用
  Gui,BoxID: -Caption +ToolWindow +E0x08000000 ; 让透明度生效  E0x08000000=WS_DISABLED 创建初始禁用的窗口
  Gui,BoxID: Color, %GuiColor% ; Red ; 窗口颜色
  Gui,BoxID: Show, NA x%x% y%y% w%Width% h%Height% ; 让窗口可见(出现一个全屏非激活窗口)
  Sleep, %ms%
  Gui,BoxID: Destroy
/*
  Loop {
    Sleep, 50
    if GetKeyState("Ctrl","P")    ; 如果按下Ctrl键则Break,退出循环
    {
      Gui,BoxID: Destroy
      Break
    }
  }
*/
}

ClickIJ(i,j) ; 对(i,j)方块单击
{
  ij2xy(i,j,x,y)
  MouseMove x, y, 3 ; 直接用 Click x,y 不行?
  Click
}

MatchClick(i1,j1,i2,j2) ; 对匹配的2个方块单击
{
  Click right
  ClickIJ(i1,j1)
  ClickIJ(i2,j2)
  Sleep, 500 ; 等待:连接完成、方块刷新
}
; ----------------------------------------------------------
; MatchBlock_Direct, MatchBlock_One, MatchBlock_Two 都不对起点和终点颜色是否相同进行判断
; 对起点和终点颜色的判断应该在主程序中

; 查看两个块是否可以直连(即中间无阻挡)
MatchBlock_Direct(i1,j1,i2,j2)
{
  If(!(i1=i2 || j1=j2))
    Return false
  ; 如果是竖线直连
  If(i1=i2)
  {
    jMax:=j1>j2 ? j1 : j2
    jMin:=j1<j2 ? j1 : j2
    ;If((jMax-jMin)=1) ; 相邻会跳过循环返回true
    ;  Return true
    j:=jMin+1 ; 从下侧相邻方块开始查找,忽略自己
    While j<jMax
    {
      If(BlockColor[i1][j]!=0) ; 有阻挡
        Return false
      j++ ; 无阻挡判断下一个
    }
  }
  ; 如果是横线直连
  Else ; j1=j2
  {
    iMax:=i1>i2 ? i1 : i2
    iMin:=i1<i2 ? i1 : i2
    i:=iMin+1 ; 从右侧相邻方块开始查找,忽略自己
    While i<iMax
    {
      If(BlockColor[i][j1]!=0) ; 有阻挡
        Return false
      i++ ; 无阻挡判断下一个
    }
  }
  Return true
}

; 查看两个块是否可以一折连
MatchBlock_One(i1,j1,i2,j2)
{
  If(MatchBlock_Direct(i1,j1,i2,j2))  ; 可以直连直接返回
    Return true
  /*
  以(i1,j1)(i2,j2)为矩形对角 寻找矩形另外2点
  示意图如下:
  s1(i1,j1)   a2(i2,j1)

  a1(i1,j2)   s2(i2,j2)
  */

  ;矩形另外2点都不为空 则跳过这种情况
  If((BlockColor[i1][j2]!=0) && (BlockColor[i2][j1]!=0))
    Return false

  ; 如果a1为空,测试 a1-s1直连 a1-s2直连
  If(BlockColor[i1][j2]==0)
  {
    ; 不能判断 (a1-s1不能直连 && a1-s2不能直连) 就返回false,因为a1为空也不一定能直连
    If(MatchBlock_Direct(i1,j1,i1,j2) && MatchBlock_Direct(i1,j2,i2,j2))
      Return true
  }
  ; 如果a2为空,测试 a2-s1直连 a2-s2直连
  If(BlockColor[i2][j1]==0)
  {
    If(MatchBlock_Direct(i1,j1,i2,j1) && MatchBlock_Direct(i2,j1,i2,j2))
      Return true
  }
  Return false
}

; 查看两个块是否可以两折连
MatchBlock_Two(i1,j1,i2,j2)
{
  If(MatchBlock_One(i1,j1,i2,j2)) ; 可以连接直接返回
    Return true
  /*把s1,s2想成一个矩形的两个对角, 依次从s1的X轴 Y轴每次+1/-1寻找为空的点C
  再由C和s2进行一折连判断 示意图如下:
  s1(i1,j1)   C(i,j)

  C(i,j)            s2(i2,j2)
  由于C的相对位置不确定所以需要分4种情况讨论
  */

  ; C沿X轴向s1右侧移动
  i:=i1+1, j:=j1
  While i<=NX+1
  {
    If(BlockColor[i][j]!=0) ; 有阻挡直接退出
      Break
    If(MatchBlock_One(i,j,i2,j2)) ; 空白判断是否可连s2
      Return true
    Else ; 检查下一个方块
      i++
  }

  ; C沿X轴向s1左侧移动
  i:=i1-1, j:=j1
  While i>=0
  {
    If(BlockColor[i][j]!=0) ; 有阻挡直接退出
      Break
    If(MatchBlock_One(i,j,i2,j2)) ; 空白判断是否可连s2
      Return true
    Else ; 检查下一个方块
      i--
  }

  ; C沿Y轴向s1下侧移动
  i:=i1, j:=j1+1
  While j<=NY+1
  {
    If(BlockColor[i][j]!=0) ; 有阻挡直接退出
      Break
    If(MatchBlock_One(i,j,i2,j2)) ; 空白判断是否可连s2
      Return true
    Else ; 检查下一个方块
      j++
  }

  ; C沿Y轴向s1上侧移动
  i:=i1, j:=j1-1
  While j>=0
  {
    If(BlockColor[i][j]!=0) ; 有阻挡直接退出
      Break
    If(MatchBlock_One(i,j,i2,j2)) ; 空白判断是否可连s2
      Return true
    Else ; 检查下一个方块
      j--
  }

  Return false
}
; 程序结束



附件
.rar  连连看.rar (大小: 831.25 KB / 下载: 0)
打印这项 推荐给朋友

  如何把字符串转为日期或时间
发布: Berg - 2017-07-19 13 : 23 - 回复 (2)

复制网页中的一段日期样式的字符,比如:2017/5/17
想让当前日期减去此日期,如果把此日期转换为日期格式?

打印这项 推荐给朋友

  如何批量生成Button?
发布: washlight - 2017-07-17 13 : 11 - 回复 (1)

想给自己的B站缓存视频写个播放控制列表,实现以下功能:

在1个GUI窗体内,每间隔一段竖直距离就生成1个按钮,总共20个按钮,按钮显示名称中包含空格,类似于“第1集 XXXX”这样,然后点击某按钮就触发打开相应集的动作,比如点击按钮1,就用B站播放器打开第1集的视频和弹幕
希望的是按钮数量,按钮间距离,按钮显示名称都能设置为变量,方便随时修改

完全是代码小白,播放的那个功能勉强折腾出来了,主要是GUI的语句语法什么的都不太清楚,在网上只找到了基本用法,不知道怎么替换成变量,也不知道怎么在名称里加空格,​求大神指教,拜谢

打印这项 推荐给朋友

  我玩游戏需要自动钓鱼的脚本,朋友共享的。可是。。。
发布: wjxwan715 - 2017-07-08 12 : 50 - 无回复

别人的界面是 [Image: 25b5ffd33e4ced1d.png]
而我的界面是
[Image: 791e71cd4c76c728.png]
怎么解决?让我也能用。我们都是win10.


大神们 帮忙解决一下。感激不尽。

打印这项 推荐给朋友

  关于管理员权限
发布: wck - 2017-07-06 21 : 16 - 无回复

请问使用管理员权限的脚本里通过热键打开的程序,可以不以管理员权限运行吗?

我的脚本因为涉及一些管理员操作所以在开头使用了如下代码:

代码:
if not A_IsAdmin
{
    Run *RunAs "%A_ScriptFullPath%"
    ExitApp
}
这导致通过run命令打开的脚本都是以管理员权限打开的。能否改变这一情形或者使用变通的方法?

打印这项 推荐给朋友

Star QQ自动登陆 v1.2
发布: feiyue - 2017-07-05 19 : 10 - 回复 (1)

看到网友在问,我写了个简单的QQ自动登录函数,
基本实现了功能,但感觉比较粗糙。抛砖引玉吧。


代码:
/*
-------------------------------
  QQ自动登陆  v1.2  By FeiYue

  虽然只是简单的功能,但也不容易写。
  目前这个基本能用,希望抛砖引玉吧。
-------------------------------
*/

账号 = xxxx
密码 = xxxxxxxx
路径 = C:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe


;-- 测试执行热键
F1:: QQ自动登录(账号, 密码, 路径)


;-- 抓点热键,生成相对窗口点击代码:Click()
F2::
CoordMode, Mouse
MouseGetPos, x, y, mid
WinGetPos, winx, winy,,, ahk_id %mid%
x-=winx, y-=winy
Clipboard=Click(%x%, %y%)`r`n
ToolTip, 窗口句柄:%mid% -- Click(%x%`, %y%)
SetTimer, tipoff, -2000
return
tipoff:
ToolTip
return


;-- 调试脚本热键
F3::
if !A_IsPaused
  ListLines
Pause,, 1
return


;-- 退出脚本热键
*F4::ExitApp


;========== 下面是函数 ==========


;-- 本函数循环登陆直到中止,是否成功要另行判断
QQ自动登录(账号, 密码, 路径)
{
  if (账号="" or 密码="")
    return

  Try Loop {  ;-- 因为Click()中可能抛出异常所以要用Try

  ;-- 查找QQ登陆窗口
  IfWinNotExist, ahk_class TXGuiFoundation
  {
    Run, %路径%,, UseErrorLevel
    if ErrorLevel
      return
  }
  start:=A_TickCount
  Loop {
    Sleep, 500
    WinGet, list, List, ahk_class TXGuiFoundation
    Loop, % list
    {
      ;-- 取得上一次找到的窗口
      WinExist("ahk_id " . list%A_Index%)
      WinGetPos, x, y, w, h
      if (w>400 and w<600 and h>400 and h<600)
        Break, 2
    }
    if (A_TickCount-start)>5000  ;-- 超时停止
      return
  }
  CoordMode, Mouse

  ;-- 输入账号
  ;-- 如果是“提示账号密码错误”窗口,点击确定
  Click(377,382)
  Loop {
    ;-- 点击账号栏
    Click(309, 277, 2)
    Clipboard:=账号
    Send {Ctrl Down}a{Ctrl Up}{Ctrl Down}v{Ctrl Up}
    Sleep, 1000
    Clipboard=
    Send {Ctrl Down}a{Ctrl Up}{Ctrl Down}c{Ctrl Up}
    ClipWait, 1
    if (Clipboard=账号)
      Break
  }

  ;-- 输入密码
  ;-- 点击密码栏
  Click(308,306)
  SendInput {BS 20}{Del 20}
  Sleep, 500
  SendPlay {Raw}%密码%
  Sleep, 500
  SendInput {Enter}
  Sleep, 5000

  } ;-- Try Loop 结束
}

;-- 相对窗口点击
Click(x, y, other="")
{
  ;-- 需要上一次找到的窗口
  IfWinNotExist
    Throw
  WinGetPos, winx, winy, w, h
  ;-- 点击范围不能超出边界
  if (x<0 or y<0 or x>w-1 or y>h-1)
    Throw
  MouseMove, winx+x, winy+y
  Click, %other%
  Sleep, InStr(other,"R") ? 500:100
}

;

打印这项 推荐给朋友

  关于IE网页显示
发布: mao-jin - 2017-07-03 22 : 26 - 无回复

IE浏览器,已经打开了两个网页,比如 汽车之家和百度,假如现在浏览器在后台或者最小化,如何让程序把指定的网页(比如显示百度)显示在当前,最大化并处于激活状态.请指教,不胜感激.

打印这项 推荐给朋友

  台中叫小姐LINE:tea5588台中外送茶現金消費.台中外約.台中找女人.台中正妹宅配/Andy外送茶/西門町叫外送/電話外約服務/台北援交妹兼職愛愛/台北外送茶叫小姐
发布: twmm003 - 2017-07-02 22 : 24 - 无回复

[Image: jXcyM4u.jpg]
[Image: flx3ZYm.jpg]
台中叫小姐LINE:tea5588台中外送茶現金消費.台中外約.台中找女人.台中正妹宅配/Andy外送茶/西門町叫外送/電話外約服務/台北援交妹兼職愛愛/台北外送茶叫小姐/台灣叫小姐服務Skype:tea8855看照約妹/西門町找外約/台灣援交服務/學生妹兼職愛愛/台北外送茶/出差找小姐
【台灣Andy茶莊】全台最大茶莊妹妹多、條件好、素質優、多年經營、安全可靠
【優惠活動】全新推出買三送一,買二送二等等優惠活動,優惠多多不容錯過
【外送地區】台北,台中,新竹,彰化,南投,高雄,桃園 ,嘉義,屏東
【營業時間】中午12:00~凌晨4:00,天天有新茶,眾多美女人任君挑選
【妹妹類型】人妻,OL,教師,護士,專櫃,學生,明星,混血,小模,主播,網路正妹,日韓美眉,金絲貓
【外送福利】依照您說想要的條件安排、見面滿意在現金消費、可退可換、不催趕效率第一
【杜絕詐騙】一律見妹妹本人現金消費,不強迫、免匯款、免轉賬
外送地點:旅館-飯店-賓館-旅社-酒店-HT-MT
加andy賬號【加賬號現約可優惠500】
LINE:tea5588
Skype:tea8855
微信:tea5080
Email:[email protected]
正妹論壇:http://www.tea5588.com/forum.php
正妹網站:http://taiwanescorts.666forum.com/
正妹部落: http://ysng5566.hatenablog.com/
服務內容:洗澡/按摩/口交/愛愛
◆→老客戶請直撥↘VIP專線↘新茶好茶不斷歡迎預約
全台外送服務LINE:tea5588台中外送茶.台中外約.台中叫小姐.台北外送茶.學生妹兼差.台北全套按摩.台北指油壓.台北茶莊.台北外約.台中全套.台中外約.​台中茶訊.台中找女人.台中找茶.台中喝茶.豐原外送茶.台中一夜情.台中全套服務.台中外送茶.台中一夜情.台中叫小姐,台中茶莊.台中旅館外約.台北茶莊.台北外約.​台北全套.西門町外約.台北叫小姐.酒店叫小姐.全套舒壓.按摩服務,旅遊出差找女人.汽車旅館叫小姐.茶訊.魚訊.一夜情服務.住家約妹.台中外送住家到府.旅館上門服​務.叫小姐服務.沙鹿叫小姐.台中全套按摩.台中半套.指油壓服務

打印这项 推荐给朋友

  台中叫小姐LINE:tea5588台中外送茶現金消費.台中外約.台中找女人.台中正妹宅配/Andy外送茶/西門町叫外送/電話外約服務/台北援交妹兼職愛愛/台北外送茶叫小姐
发布: twmm003 - 2017-07-02 22 : 22 - 无回复

[Image: jXcyM4u.jpg]
[Image: flx3ZYm.jpg]
台中叫小姐LINE:tea5588台中外送茶現金消費.台中外約.台中找女人.台中正妹宅配/Andy外送茶/西門町叫外送/電話外約服務/台北援交妹兼職愛愛/台北外送茶叫小姐/台灣叫小姐服務Skype:tea8855看照約妹/西門町找外約/台灣援交服務/學生妹兼職愛愛/台北外送茶/出差找小姐
【台灣Andy茶莊】全台最大茶莊妹妹多、條件好、素質優、多年經營、安全可靠
【優惠活動】全新推出買三送一,買二送二等等優惠活動,優惠多多不容錯過
【外送地區】台北,台中,新竹,彰化,南投,高雄,桃園 ,嘉義,屏東
【營業時間】中午12:00~凌晨4:00,天天有新茶,眾多美女人任君挑選
【妹妹類型】人妻,OL,教師,護士,專櫃,學生,明星,混血,小模,主播,網路正妹,日韓美眉,金絲貓
【外送福利】依照您說想要的條件安排、見面滿意在現金消費、可退可換、不催趕效率第一
【杜絕詐騙】一律見妹妹本人現金消費,不強迫、免匯款、免轉賬
外送地點:旅館-飯店-賓館-旅社-酒店-HT-MT
加andy賬號【加賬號現約可優惠500】
LINE:tea5588
Skype:tea8855
微信:tea5080
Email:[email protected]
正妹論壇:http://www.tea5588.com/forum.php
正妹網站:http://taiwanescorts.666forum.com/
正妹部落: http://ysng5566.hatenablog.com/
服務內容:洗澡/按摩/口交/愛愛
◆→老客戶請直撥↘VIP專線↘新茶好茶不斷歡迎預約
全台外送服務LINE:tea5588台中外送茶.台中外約.台中叫小姐.台北外送茶.學生妹兼差.台北全套按摩.台北指油壓.台北茶莊.台北外約.台中全套.台中外約.​台中茶訊.台中找女人.台中找茶.台中喝茶.豐原外送茶.台中一夜情.台中全套服務.台中外送茶.台中一夜情.台中叫小姐,台中茶莊.台中旅館外約.台北茶莊.台北外約.​台北全套.西門町外約.台北叫小姐.酒店叫小姐.全套舒壓.按摩服務,旅遊出差找女人.汽車旅館叫小姐.茶訊.魚訊.一夜情服務.住家約妹.台中外送住家到府.旅館上門服​務.叫小姐服務.沙鹿叫小姐.台中全套按摩.台中半套.指油壓服務

打印这项 推荐给朋友

  台中叫小姐LINE:tea5588台中外送茶現金消費.台中外約.台中找女人.台中正妹宅配/Andy外送茶/西門町叫外送/電話外約服務/台北援交妹兼職愛愛/台北外送茶叫小姐
发布: twmm003 - 2017-07-02 22 : 16 - 无回复

[Image: jXcyM4u.jpg]
[Image: flx3ZYm.jpg]
台中叫小姐LINE:tea5588台中外送茶現金消費.台中外約.台中找女人.台中正妹宅配/Andy外送茶/西門町叫外送/電話外約服務/台北援交妹兼職愛愛/台北外送茶叫小姐/台灣叫小姐服務Skype:tea8855看照約妹/西門町找外約/台灣援交服務/學生妹兼職愛愛/台北外送茶/出差找小姐
【台灣Andy茶莊】全台最大茶莊妹妹多、條件好、素質優、多年經營、安全可靠
【優惠活動】全新推出買三送一,買二送二等等優惠活動,優惠多多不容錯過
【外送地區】台北,台中,新竹,彰化,南投,高雄,桃園 ,嘉義,屏東
【營業時間】中午12:00~凌晨4:00,天天有新茶,眾多美女人任君挑選
【妹妹類型】人妻,OL,教師,護士,專櫃,學生,明星,混血,小模,主播,網路正妹,日韓美眉,金絲貓
【外送福利】依照您說想要的條件安排、見面滿意在現金消費、可退可換、不催趕效率第一
【杜絕詐騙】一律見妹妹本人現金消費,不強迫、免匯款、免轉賬
外送地點:旅館-飯店-賓館-旅社-酒店-HT-MT
加andy賬號【加賬號現約可優惠500】
LINE:tea5588
Skype:tea8855
微信:tea5080
Email:[email protected]
正妹論壇:http://www.tea5588.com/forum.php
正妹網站:http://taiwanescorts.666forum.com/
正妹部落: http://ysng5566.hatenablog.com/
服務內容:洗澡/按摩/口交/愛愛
◆→老客戶請直撥↘VIP專線↘新茶好茶不斷歡迎預約
全台外送服務LINE:tea5588台中外送茶.台中外約.台中叫小姐.台北外送茶.學生妹兼差.台北全套按摩.台北指油壓.台北茶莊.台北外約.台中全套.台中外約.​台中茶訊.台中找女人.台中找茶.台中喝茶.豐原外送茶.台中一夜情.台中全套服務.台中外送茶.台中一夜情.台中叫小姐,台中茶莊.台中旅館外約.台北茶莊.台北外約.​台北全套.西門町外約.台北叫小姐.酒店叫小姐.全套舒壓.按摩服務,旅遊出差找女人.汽車旅館叫小姐.茶訊.魚訊.一夜情服務.住家約妹.台中外送住家到府.旅館上門服​務.叫小姐服務.沙鹿叫小姐.台中全套按摩.台中半套.指油壓服務

打印这项 推荐给朋友


联系我们 | Autohotkey 中文站 | 回到顶部 | 回到正文区 | 精简(归档)模式 | RSS 聚合