Thinkai's Blog

Autohotkey|Python|php|aardio|VOIP|IT 爱好者

检测托盘气泡的点击 Autohotkey 2084

作者为 发表

Autohotkey

OnMessage(0x404,"TB_HIDEBUTTON")
Traytip, 提示, 点击测试, 10, 1
return

TB_HIDEBUTTON(wParam, lParam, msg, hwnd) {
    static WM_USER := 0x400
    static _______ := OnMessage(WM_USER + 4, "TB_HIDEBUTTON")
    
    If (lParam = 1029)
    {
        MsgBox TrayTip Click`, AutoHotkey will now exit
        ExitApp
    }
}


UDP Client实例-门禁开门 Autohtkey 1925

作者为 发表

Autohotkey

#NoEnv
#SingleInstance


myUdpOut := new udp() ;新的udp对象 ;Erstelle ein neues udp-Objekt 'myUdpOut'
myUdpOut.connect("192.168.8.7", 8000) ;对方IP和端口 ;client ip and port
hex_str := "ef010100ffffffffffff0100800100009c95" ;十六进制流
length := StrLen(hex_str)/2 ;多少字节
VarSetCapacity(buff,length,0) ;申请内存
loop % length
{
	NumPut("0x" SubStr(hex_str,A_index*2-1,2), &buff, A_index-1, "UChar") ;按字节写入十六进制到内存
}
myUdpOut.sendBinary(&buff, length) ;发送二进制数据
myUdpOut.disconnect()
ExitApp

return


;; -------------------------------------------------
;; with thanks to Bentschi for udp class

class udp
{
  __New()
  {
    __nw_initWinsock()
    this.__protocolId := 17 ;IPPROTO_UDP
    this.__socketType := 2 ;SOCK_DGRAM
    this.socket := -1
  }

  __Delete()
  {
    this.disconnect()
  }

  bind(host, port)
  {
    if ((this.socket!=-1) || (!(next := __nw_getaddrinfo(host, port))))
      return 0
    while (next)
    {
      sockaddrlen := NumGet(next+0, 16, "uint")
      sockaddr := NumGet(next+0, 16+(2*A_PtrSize), "ptr")
      if ((this.socket := DllCall("ws2_32\socket", "int", NumGet(next+0, 4, "int"), "int", this.__socketType, "int", this.__protocolId, "ptr"))!=-1)
      {
        if (DllCall("ws2_32\bind", "ptr", this.socket, "ptr", sockaddr, "uint", sockaddrlen, "int")=0)
          return 1
        this.disconnect()
      }
      next := NumGet(next+0, 16+(3*A_PtrSize), "ptr")
    }
    this.lastError := DllCall("ws2_32\WSAGetLastError")
    return 0
  }

  connect(host, port)
  {
    if ((this.socket!=-1) || (!(next := __nw_getaddrinfo(host, port))))
      return 0
    while (next)
    {
      sockaddrlen := NumGet(next+0, 16, "uint")
      sockaddr := NumGet(next+0, 16+(2*A_PtrSize), "ptr")
      if ((this.socket := DllCall("ws2_32\socket", "int", NumGet(next+0, 4, "int"), "int", this.__socketType, "int", this.__protocolId, "ptr"))!=-1)
      {
        if ((r := DllCall("ws2_32\WSAConnect", "ptr", this.socket, "ptr", sockaddr, "uint", sockaddrlen, "ptr", 0, "ptr", 0, "ptr", 0, "ptr", 0, "int"))=0)
          return 1
        this.disconnect()
      }
      next := NumGet(next+0, 16+(3*A_PtrSize), "ptr")
    }
    this.lastError := DllCall("ws2_32\WSAGetLastError")
    return 0
  }

  disconnect()
  {
    DllCall("ws2_32\closesocket", "ptr", this.socket, "int")
    this.socket := -1 ;INVALID_SOCKET
    return 1
  }

  enableBroadcast()
  {
    VarSetCapacity(optval, 4, 0)
    NumPut(1, optval, 0, "uint")
    if (DllCall("ws2_32\setsockopt", "ptr", this.socket, "int", 0xFFFF, "int", 0x0020, Ptr, &optval, "int", 4)=0)
      return 1
    return 0
  }

  disableBroadcast()
  {
    VarSetCapacity(optval, 4, 0)
    if (DllCall("ws2_32\setsockopt", "ptr", this.socket, "int", 0xFFFF, "int", 0x0020, Ptr, &optval, "int", 4)=0)
      return 1
    return 0
  }

  msgSize()
  {
    VarSetCapacity(argp, 4, 0)
    if (DllCall("ws2_32\ioctlsocket", "ptr", this.socket, "uint", 0x4004667F, "ptr", &argp)!=0)
      return 0
    return NumGet(argp, 0, "int")
  }

  sendBinary(addr, length)
  {
    if ((r := DllCall("ws2_32\send", "ptr", this.socket, "ptr", addr, "int", length, "int", 0, "int"))<=0)
      return 0
    return r
  }

  send(msg, encoding="UTF-8")
  {
    VarSetCapacity(buffer, length := (StrPut(msg, encoding)*(((encoding="utf-16")||(encoding="cp1200")) ? 2 : 1)))
    StrPut(msg, &buffer, encoding)
    return this.sendBinary(&buffer, length)
  }


  recvBinary(byref buffer, wait=1)
  {
    while ((wait) && ((length := this.msgSize())=0))
      sleep, 50
    if (length)
    {
      VarSetCapacity(buffer, length)
      if ((r := DllCall("ws2_32\recv", "ptr", this.socket, "ptr", &buffer, "int", length, "int", 0))<=0)
        return 0
      return r
    }
    return 0
  }

  recv(wait=1, encoding="UTF-8")
  {
    if (length := this.recvBinary(buffer, wait))
      return StrGet(&buffer, length, encoding)
    return
  }

  onRecv(callback)
  {
    this.__onRecv := callback
    return __nw_eventProc("register", 1, this, 0)
  }
}

__nw_initWinsock()
{
  static init
  if (!init)
  {
    DllCall("LoadLibrary", "str", "ws2_32", "ptr")
    VarSetCapacity(wsadata, 394+A_PtrSize)
    DllCall("ws2_32\WSAStartup", "ushort", 0x0000, "ptr", &wsadata)
    DllCall("ws2_32\WSAStartup", "ushort", NumGet(wsadata, 2, "ushort"), "ptr", &wsadata)
    init := 1
  }
}

__nw_getAddrInfo(host, port)
{
  if host in localhost,addr_loopback,inaddr_loopback
    host := "127.0.0.1"
  else if host in addr_any,inaddr_any
    host := "0.0.0.0"
  else if host in addr_broadcast,inaddr_broadcast,addr_none,inaddr_none
    host := "255.255.255.255"
  else if host in localhost6,addr_loopback6,inaddr_loopback6
    host := "::1"
  else if host in addr_any6,inaddr_any6
    host := "::"
  else if host in addr_broadcast6,inaddr_broadcast6,addr_none6,inaddr_none6
    host := "FF00::"

  VarSetCapacity(hints, 16+(4*A_PtrSize), 0)
  NumPut(this.__inetType, hints, 4, "int")
  NumPut(this.__socketType, hints, 8, "int")
  NumPut(this.__protocolId, hints, 12, "int")
  if ((r := DllCall("ws2_32\getaddrinfo", "astr", host, "astr", port, "ptr", &hints, "ptr*", next))!=0)
  {
    this.lastError := DllCall("ws2_32\WSAGetLastError")
    return 0
  }
  return next
}

__nw_eventProc(wParam, lParam, msg, hwnd)
{
  static
  if (wParam="register")
  {
    if (!init)
    {
      OnMessage(0x9987, A_ThisFunc)
      Gui, +LastFound
      hMsgWnd := WinExist()
      array := Object()
      init := 1
    }
    array.Insert(msg)
    return (DllCall("ws2_32\WSAAsyncSelect", "ptr", msg.socket, "ptr", hMsgWnd, "uint", 0x9987, "uint", lParam)=0) ? 1 : 0
  }
  found := 0
  for i,element in array
  {
    if (element.socket = wParam)
    {
      this := element
      found := 1
      break
    }
  }
  if (!found)
    return 0
  func := ""
  if ((lParam & 0xFFFF) = 1)
    func := this.__OnRecv
  else if ((lParam & 0xFFFF) = 8)
    func := this.__OnAccept
  else if ((lParam & 0xFFFF) = 32)
    func := this.__OnDisconnect
  if (IsFunc(func))
    return %func%(this)
  return 0
}


treeview获取选中所有节点信息以及展开 Autohotkey 2085

作者为 发表

Autohotkey

Gui, Add, TreeView
P1 := TV_Add("P1")
P1C1 := TV_Add("P1C1", P1)
P1C1D1 := TV_Add("P1C1D1", P1C1)
P1C1D2 := TV_Add("P1C1D2", P1C1)
P1C1D3 := TV_Add("P1C1D3", P1C1)
P1C1D2E1 := TV_Add("P1C1D2E1", P1C1D2)
P1C1D2E2 := TV_Add("P1C1D2E2", P1C1D2)

Gui, Show
;获取节点信息
top := TV_GetSelection()
;Clipboard := var_dump(gettvchild(top))
;展开选中下所有节点
;TV_Modify(top,"Expand")
Clipboard := var_dump(expandallchild(top))
return


gettvchild(id){
	ret =
	if(firstid := TV_GetChild(id)){
		ret := [],first := true
		ret[firstid] := ""
		while(nextid := TV_GetNext(first ? (firstid,first:=false) : nextid)){
			ret[nextid] := ""
		}
	}
	for k,v in ret
	{
		if (TV_GetChild(k))
			ret[k] := gettvchild(k)
	}
	return ret
}

expandallchild(id){
	ret := "",TV_Modify(id,"Expand")
	if(firstid := TV_GetChild(id)){
		ret := [],first := true
		ret[firstid] := ""
		while(nextid := TV_GetNext(first ? (firstid,first:=false) : nextid)){
			ret[nextid] := ""
		}
	}
	for k,v in ret
	{
		if (TV_GetChild(k))
			TV_Modify(k,"Expand"),ret[k] := expandallchild(k)
	}
	return ret
}

var_dump(obj,level:=0){
    static str
    if !level
        str := ""
    if IsObject(obj)
    {
        space =
        loop % level
            space .= A_Tab
        str .= space "{`n"
        for k,v in obj
        {
            if IsObject(v)
            {
                str .= space A_Tab (RegExMatch(k,"^\d+$") ? k : """" k """") ":`n"
                var_dump(v,level+1)
                str := RegExReplace(str,"(*ANYCRLF)\n$",",`n")
            }
            else
                str .= space A_Tab (RegExMatch(k,"^\d+$") ? k : """" k """") ":""" RegExReplace(v,"""","""""") """,`n"
        }
        str := RegExReplace(str,"(*ANYCRLF),\n*$","`n")
        str .= space "}`n"
    }
    else
        str := obj
    return str
}

GuiClose:  ; 当用户关闭 TreeView 所在的 GUI 窗口时退出脚本.
ExitApp


上传文件到网站 POST Autohotkey 2272

作者为 发表

Autohotkey

MsgBox % uploadfile("D:\我的文档\My Music\success.mp3","record\success.mp3")

uploadfile(src,dst){
	IfExist % src
	{
		objParam := {"upfile":[src],"dst":dst} ;post数据
		CreateFormData(PostData, hdr_ContentType, objParam)
		whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
		whr.Open("POST", "http://135.230.71.1/upload.php", true) ;地址
		whr.SetRequestHeader("Content-Type", hdr_ContentType)
		whr.Send(PostData)
		whr.WaitForResponse()
		return whr.ResponseText
	}
}

CreateFormData(ByRef retData, ByRef retHeader, objParam) {
	New CreateFormData(retData, retHeader, objParam)
}

Class CreateFormData {

	__New(ByRef retData, ByRef retHeader, objParam) {

		CRLF := "`r`n"

		; Create a random Boundary
		Boundary := this.RandomBoundary()
		BoundaryLine := "------------------------------" . Boundary

		; Loop input paramters
		binArrs := []
		For k, v in objParam
		{
			If IsObject(v) {
				For i, FileName in v
				{
					str := BoundaryLine . CRLF
					     . "Content-Disposition: form-data; name=""" . k . """; filename=""" . FileName . """" . CRLF
					     . "Content-Type: " . this.MimeType(FileName) . CRLF . CRLF
					binArrs.Push( BinArr_FromString(str) )
					binArrs.Push( BinArr_FromFile(FileName) )
					binArrs.Push( BinArr_FromString(CRLF) )
				}
			} Else {
				str := BoundaryLine . CRLF
				     . "Content-Disposition: form-data; name=""" . k """" . CRLF . CRLF
				     . v . CRLF
				binArrs.Push( BinArr_FromString(str) )
			}
		}

		str := BoundaryLine . "--" . CRLF
		binArrs.Push( BinArr_FromString(str) )

		; Finish
		retData := BinArr_Join(binArrs*)
		retHeader := "multipart/form-data; boundary=----------------------------" . Boundary
	}

	RandomBoundary() {
		str := "0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z"
		Sort, str, D| Random
		str := StrReplace(str, "|")
		Return SubStr(str, 1, 12)
	}

	MimeType(FileName) {
		n := FileOpen(FileName, "r").ReadUInt()
		Return (n        = 0x474E5089) ? "image/png"
		     : (n        = 0x38464947) ? "image/gif"
		     : (n&0xFFFF = 0x4D42    ) ? "image/bmp"
		     : (n&0xFFFF = 0xD8FF    ) ? "image/jpeg"
		     : (n&0xFFFF = 0x4949    ) ? "image/tiff"
		     : (n&0xFFFF = 0x4D4D    ) ? "image/tiff"
		     : "application/octet-stream"
	}

}

BinArr_FromString(str) {
	oADO := ComObjCreate("ADODB.Stream")

	oADO.Type := 2 ; adTypeText
	oADO.Mode := 3 ; adModeReadWrite
	oADO.Open
	oADO.Charset := "UTF-8"
	oADO.WriteText(str)

	oADO.Position := 0
	oADO.Type := 1 ; adTypeBinary
	oADO.Position := 3 ; Skip UTF-8 BOM
	return oADO.Read, oADO.Close
}

BinArr_FromFile(FileName) {
	oADO := ComObjCreate("ADODB.Stream")

	oADO.Type := 1 ; adTypeBinary
	oADO.Open
	oADO.LoadFromFile(FileName)
	return oADO.Read, oADO.Close
}

BinArr_Join(Arrays*) {
	oADO := ComObjCreate("ADODB.Stream")

	oADO.Type := 1 ; adTypeBinary
	oADO.Mode := 3 ; adModeReadWrite
	oADO.Open
	For i, arr in Arrays
		oADO.Write(arr)
	oADO.Position := 0
	return oADO.Read, oADO.Close
}

BinArr_ToString(BinArr, Encoding := "UTF-8") {
	oADO := ComObjCreate("ADODB.Stream")

	oADO.Type := 1 ; adTypeBinary
	oADO.Mode := 3 ; adModeReadWrite
	oADO.Open
	oADO.Write(BinArr)

	oADO.Position := 0
	oADO.Type := 2 ; adTypeText
	oADO.Charset  := Encoding
	return oADO.ReadText, oADO.Close
}

BinArr_ToFile(BinArr, FileName) {
	oADO := ComObjCreate("ADODB.Stream")

	oADO.Type := 1 ; adTypeBinary
	oADO.Open
	oADO.Write(BinArr)
	oADO.SaveToFile(FileName, 2)
	oADO.Close
}


中文数字转阿拉伯数字 Autohotkey 1842

作者为 发表

Autohotkey

conv2num(str){
d := {"零":0,"一":1,"二":2,"两":2,"三":3,"四":4,"五":5,"六":6,"七":7,"八":8,"九":9,"十":10,"百":100,"千":1000,"万":10000,"亿":100000000}
n = 0

a := StrSplit(str,"亿")
if a[2]
{
	b := StrSplit(a[2],"万")
	s1 := a[1],s2 := b[1], s3 := b[2]
}
else
{
	a := StrSplit(str,"万")
	s1 := a[1],s2 := a[2], s3 := ""
}
l1 := InStr(str,"亿") ? d["亿"] : (InStr(str,"万") ? d["万"] : 1)
l2 := InStr(a[2],"万") ? d["万"] : (a[2] ? 1 : 0)
l3 := b[2] ? 1 : 0
if l1=1
{
	Loop
	{
		if !str
			break
		if RegExMatch(str,"^(一|二|两|三|四|五|六|七|八|九)(十|百|千|)(.*)",m)
		{
			t := d[m1] * (m2 ? d[m2] : 1)
			n += t, str := m3
		}
		else if RegExMatch(str,"^十(一|二|两|三|四|五|六|七|八|九|)$",m)
		{
			t := 10 + (m1 ? d[m1] : 0)
			n += t, str := ""
		}
		else if RegExMatch(str,"^零(.*)",m)
			str := m1
	}
}
else
	n := conv2num(s1)*l1 + conv2num(s2)*l2 + conv2num(s3)*l3
return n
}


运行快捷方式 runlink Autohotkey 2096

作者为 发表

Autohotkey

runlink(linkfile){
FileGetShortcut, % linkfile, OutTarget, OutDir, OutArgs
SetWorkingDir % OutDir
Run, % """" OutTarget """" (OutArgs ? " """ OutArgs """" : "")
SetWorkingDir %  A_ScriptDir
}


ahk取重复前十的一种方法 Autohotkey 2798

作者为 发表

Autohotkey

;duplicate top10
src =
(
加
就
加
加
加
的
到
否
的
额
一
他
个
飞
的
的
他
的
对
额
额
他
哦
平
去
我
额
人
啊
是
的
飞
个
好
)

a := []
b =
loop, Parse, src, `n, `r
{
	if !a["" A_LoopField]
		a["" A_LoopField] := 1
	else
		a["" A_LoopField] += 1
}

for c,d in a
{
	d2 := SubStr("00000", 1, 5-strlen(d)) d
	str := d2 "_" c
	b .= b ? "`n" str : str
}

Sort, b, R

e := StrSplit(b,"`n","`r")
f =
loop 10
	f .= f ? "`n" e[A_index] : e[A_index]

MsgBox % f


MD5 32位 16位生成 Autohotkey 2872

作者为 发表

Autohotkey

MD5 16位是32位截取的

SubStr(md5,9,16)
HashFromAddr(pData, len, algid, key=0)
{
  hProv := size := hHash := hash := ""
  ptr := (A_PtrSize) ? "ptr" : "uint"
  aw := (A_IsUnicode) ? "W" : "A"
  if (DllCall("advapi32\CryptAcquireContext" aw, ptr "*", hProv, ptr, 0, ptr, 0, "uint", 1, "uint", 0xF0000000))
  {
    if (DllCall("advapi32\CryptCreateHash", ptr, hProv, "uint", algid, "uint", key, "uint", 0, ptr "*", hHash))
    {
      if (DllCall("advapi32\CryptHashData", ptr, hHash, ptr, pData, "uint", len, "uint", 0))
      {
        if (DllCall("advapi32\CryptGetHashParam", ptr, hHash, "uint", 2, ptr, 0, "uint*", size, "uint", 0))
        {
          VarSetCapacity(bhash, size, 0)
          DllCall("advapi32\CryptGetHashParam", ptr, hHash, "uint", 2, ptr, &bhash, "uint*", size, "uint", 0)
        }
      }
      DllCall("advapi32\CryptDestroyHash", ptr, hHash)
    }
    DllCall("advapi32\CryptReleaseContext", ptr, hProv, "uint", 0)
  }
  int := A_FormatInteger
  SetFormat, Integer, h
  Loop, % size
  {
    v := substr(NumGet(bhash, A_Index-1, "uchar") "", 3)
    while (strlen(v)<2)
      v := "0" v
    hash .= v
  }
  SetFormat, Integer, % int
  return hash
}


HashFromString(string, algid, key=0)
{
  len := strlen(string)
  if (A_IsUnicode)
  {
    ;VarSetCapacity(data, len)
    ;StrPut(string, &data, len, "cp0")
    return HashFromAddr(&data, len, algid, key)
  }
  data := string
  return HashFromAddr(&data, len, algid, key)
}

MD5(string,b16:=false)
{
  ;0x8003/*_CALG_MD5*/
  ;0x8001/*_CALG_MD2*/
  ;0x8002/*_CALG_MD4*/
  ;0x8004/*_CALG_SHA1*/
  return b16 ? SubStr(HashFromString(string, 0x8003),9,16) : HashFromString(string, 0x8003)
}

MsgBox % md5(Ansi2UTF8("我们"),1)


App_ahk DD键盘Autohotkey API 4658

作者为 发表

Autohotkey

/*
;示例
dd := new DD()
;鼠标绝对移动
dd.mov(500,500)
;按键
dd.key(401)
;输入文字
str = Autohotkey
loop % strlen(str)
	dd.str(SubStr(str,A_index,1))
*/

class DD
{

	__New()
	{
		;加载DD 32位 dll 请重命名成DD.dll放到脚本目录
		IfNotExist, DD.dll
		{
			RegRead, dd_path, HKLM, SOFTWARE\DD XOFT, path
			if !dd_path
			{
				MsgBox, 4112, 错误, DD.dll未找到!
				return
			}
			else
			{
				this.hModule := DllCall("LoadLibrary", "Str", dd_path, "Ptr")
			}
		}
		else
		{
			this.hModule := DllCall("LoadLibrary", "Str", "DD.dll", "Ptr")
		}
	}

	__Delete()
	{
		DllCall("FreeLibrary", "Ptr", this.hModule)
	}

	btn(btn) ;鼠标按键
	{
		return DllCall("DD\DD_btn","Int",btn)
	}


	mov(x,y) ;鼠标绝对移动
	{
		return DllCall("DD\DD_mov","Int",x,"Int",y)
	}


	movR(dx,dy) ;鼠标相对移动
	{
		return DllCall("DD\DD_movR","Int",dx,"Int",dy)
	}


	key(key,flag) ;键盘按键 key:DD专用虚拟键码 flag:按下=1,放开=2
	{
		return DllCall("DD\DD_key","Int",key,"Int",flag)
	}


	whl(flag) ;鼠标滚轮 按下=1,放开=2
	{
		return DllCall("DD\DD_whl","Int",flag)
	}


	str(str) ;直接输入键盘上的可见字符
	{
		return DllCall("DD\DD_str","Ptr",&str)
	}

	todc(vkcode) ;虚拟键码转DD键码
	{
		return DllCall("DD\DD_todc","Int",vkcode)
	}


	MouseMove(hwnd,x,y) ;窗口内鼠标移动 hwnd:窗口句柄,为0时表示全屏,等同mov
	{
		return DllCall("DD\DD_MouseMove","Int",hwnd,"Int",x,"Int",y)
	}

	SnapPic(hwnd,x,y,w,h) ;抓图 hwnd:窗口句柄,为0时表示全屏 暂时无法使用
	{
		return DllCall("DD\DD_SnapPic","Int",hwnd,"Int",x,"Int",y,"Int",w,"Int",h)

	}

	PickColor(hwnd,x,y,const:=0) ;窗口内取色 hwnd:窗口句柄,为0时表示全屏 const:常量始终等于0 暂时无法使用
	{
		return DllCall("DD\DD_PickColor","Int",hwnd,"Int",x,"Int",y,"Int",const)
	}

	GetActiveWindow() ;取激活窗口句柄 用普通方法无法获取时可用这个函数 暂时无法使用
	{
		return DllCall("DD\DD_GetActiveWindow")
	}
}


a67电影网信息采集 Autohotkey 2039

作者为 发表

Autohotkey

;预配置项
url_l = http://www.a67.com/list/1/7/p.
id = 1 ;初始页码
maxid = 129 ;最大页码
url_r =
site =  http://www.a67.com
kind = 动作片
#Include sqliteDB.ahk

#NoEnv
OnExit, Exit
;初始化连接数据库 以便反复查询
DBFileName := A_ScriptDir . "\a67.db"
global DB
DB := new SQLiteDB
if !DB.OpenDB(DBFileName) {
	MsgBox, 16, SQLite错误, % "消息:`t" . DB.ErrorMsg . "`n代码:`t" . DB.ErrorCode
	ExitApp
}
;首先检查初始化
if !IsObject(Query("select 1 from sqlite_master where name='movie'")) ;检查novel表
	Exec("CREATE TABLE ""movie"" ( ""name"" TEXT(255), ""kind"" TEXT(255), ""uri"" TEXT(255),id"" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL)")

Loop % maxid-id
{
	list := URLDownloadToVar(url_l id url_r,"utf-8") ;抓取小说列表
	a := StrSplit(list,"`n","`r") ;分割行为数组
	a_id = 283 ;直接跳到正文
	Loop
	{
		a_id++
		if (a_id>a.MaxIndex())
			break
		;抓取影片信息
		if (RegExMatch(a[a_id],"^<a href=""(http://www\.a67\.com/movie/\d+)""[^>]*>([^<]*)</a>$",b))
		{
			page:=b1,name:=b2,movie_id:=RegExReplace(b1,"http://www\.a67\.com/movie/(\d+)$","$1")
            ToolTip % name "," movie_id "," page
			a_id++
			t_page := URLDownloadToVar(page,"utf-8")
			IfInString, t_page, cqmp4
				uri = cqmp4
			else ifInString, t_page, hdmp4
					uri = hdmp4
			else ifInString, t_page, mp4-g.gif
					uri = mp4
			else
				continue

			t_down := URLDownloadToVar("http://www.a67.com/down/1_" movie_id "_1/" uri,"utf-8") ;获取下载页的下载地址
			IfInString, t_down, 404.gif
				continue
			d := StrSplit(t_down,"`n","`r")
			Loop % d.MaxIndex()
			{
				if RegExMatch(d[A_Index],"^\s*.*(thunder://[^""]*)"".*迅雷下载</a></li>",e)
				{
					url:=e1
					ToolTip % id "页:" name
					Exec("Insert INTO ""movie"" (""name"", ""kind"", ""uri"") VALUES ('" name "','" kind "','" url "')") ;插入数据
					break
				}
			}
		}
	}
id++
}
MsgBox, Ok

#z::
exit:
	DB.CloseDB()
	DB =
	ExitApp



	URLDownloadToVar(url, Encoding = "",Method="GET",postData=""){ ;网址,编码,请求方式,post数据
	hObject:=ComObjCreate("WinHttp.WinHttpRequest.5.1")
	if Method = GET
	{
		Try
		{
			hObject.Open("GET",url)
			hObject.Send()
		}
		catch e
			return -1
	}
	else if Method = POST
	{
		Try
		{
			hObject.Open("POST",url,False)
			hObject.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
			hObject.Send(postData)
		}
		catch e
			return -1
	}

	if (Encoding && hObject.ResponseBody)
	{
		oADO := ComObjCreate("adodb.stream")
		oADO.Type := 1
		oADO.Mode := 3
		oADO.Open()
		oADO.Write(hObject.ResponseBody)
		oADO.Position := 0
		oADO.Type := 2
		oADO.Charset := Encoding
		return oADO.ReadText(), oADO.Close()
	}
return hObject.ResponseText
}

;构造查询SQL函数
Query(SQL){ ;返回数组
global DB ;全局
if !DB.GetTable(SQL, Result)
	MsgBox, 16, SQLite错误: 获取结果, % "消息:`t" . DB.ErrorMsg . "`n代码:`t" . DB.ErrorCode "`n" SQL
if (Result.HasRows) {
	return Result.Rows
}
}

;构造执行SQL函数
Exec(SQL){ ;返回执行影响行数
global DB ;全局
if !DB.Exec(SQL)
	MsgBox, 16, SQLite错误: 获取结果, % "消息:`t" . DB.ErrorMsg . "`n代码:`t" . DB.ErrorCode "`n" SQL
return DB._Changes()
}

完整数据文件(ANSI 32环境)



友情链接:Autohotkey中文论坛Autohotkey中文帮助Autohotkey官网我的B站直播间Autohotkey中文网联系作者免GooglePlay APK下载

 主题设计 • skyfrit.com  Thinkai's Blog | 保留所有权利

43 queries in 0.566 seconds |