Thinkai's Blog

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

转换效率 decodeu3>decodeu4>decodeu2>decodeu

使用环境Autohotkey ansi32,输出gb2312字符串

decodeu2(out){
foundpos := 1
while(foundpos := RegExMatch(out,"\\u([A-Fa-f0-9]{2})([A-Fa-f0-9]{2})",m))
	Unicode2Ansi(Chr("0x" m2) Chr("0x" m1),tmpstr,0),out := RegExReplace(out,"\\u" m1 m2, tmpstr)
return out
}

decodeu3(out){
foundpos := 1
while(foundpos := RegExMatch(out,"\\u([A-Fa-f0-9]{2})([A-Fa-f0-9]{2})",m))
	Unicode2Ansi(Chr("0x" m2) Chr("0x" m1),tmpstr,0),out := strReplace(out,"\u" m1 m2, tmpstr)
return out
}

decodeu4(out){
foundpos := 1, VarSetCapacity(char,3,0)
while(foundpos := RegExMatch(out,"\\u([A-Fa-f0-9]{4})",m))
	NumPut("0x" m1,&char,,"UShort"),out := strReplace(out,"\u" m1 m2, StrGet(&char,,"CP1200"))
return out
}

decodeu(ustr){
   Loop
	{
		if !ustr
			break
		if RegExMatch(ustr,"^\s*\\u([A-Fa-f0-9]{2})([A-Fa-f0-9]{2})(.*)",m)
		{
			word_u := Chr("0x" m2) Chr("0x" m1), ustr := m3, word_a := ""
			Unicode2Ansi(word_u,word_a,0)
			out .= word_a
		}
		else if RegExMatch(ustr, "^([a-zA-Z0-9\.\?\-\!\s\:""]*)(.*)",n)
		{
			ustr := n2
			out .= n1
		}
	}
	return out
}


Unicode2Ansi(ByRef wString, ByRef sString, CP = 0)
{
     nSize := DllCall("WideCharToMultiByte"
      , "Uint", CP
      , "Uint", 0
      , "Uint", &wString
      , "int", -1
      , "Uint", 0
      , "int", 0
      , "Uint", 0
      , "Uint", 0)
   VarSetCapacity(sString, nSize)
   DllCall("WideCharToMultiByte"
      , "Uint", CP
      , "Uint", 0
      , "Uint", &wString
      , "int", -1
      , "str", sString
      , "int", nSize
      , "Uint", 0
      , "Uint", 0)
}


判断文件是否带UTF-8 BOM示例 Autohotkey 2477

作者为 发表

Autohotkey

这是一个读取ahk文件列表汇集到一个文件便于全文搜索的示例

FileRead, c, *P936 list.txt
Loop, Parse, c, `n, `r
{
	file := FileOpen(A_LoopField,"r") ;读取文件头4字节
	int := file.ReadUInt()
	file.close()

	if InStr(Format("{1:X}", int),"BFBBEF") ;包含UTF-8 BOM
		FileRead, t, *P65001 %A_LoopField%
	else
		FileRead, t, *P936 %A_LoopField%
	FileAppend, % ";" A_LoopField "`n`n" t "`n", ahk_combine.ahk
}
MsgBox OK


Excel所有工作表合并输出到txt Autohotkey 6

作者为 发表

Autohotkey

;适合所有工作表字段(列头)一致的情况
#maxmem 1024
file := "d:\desktop\list.xls"
xls := new exceldb()
xls.open(file)
content := ""
for k,v in xls.GetTableInfo()
{

	for a,b in xls.GetTable("select * from [" k "$]")

	{

		tmp_str := ""

		for x,y in b

		{

			tmp_str .= tmp_str ? "`t""" y """" : """" y """"

		}

		content .= tmp_str "`t" k "`n"

	}
}
FileAppend % content, d:\desktop\out1.txt

H版多线程任务分派示例 Autohotkey 4495

作者为 发表

Autohotkey

请使用Autohotkey H版运行和编译

Gui, Add, ListView, x0 y0 w150 h400, I  D|SleepMSec
Gui, Show
obj := CriticalObject()
SplitPath, A_AhkPath, , AHKDir
max := 10, Threads := [], count := 0
loop % max
	Threads[A_index] := ""
Loop
{
	for k,v in Threads
	{
		if(!v)
		{
			script := "#notrayicon`nobj:=CriticalObject(" CriticalObject(obj,1) "," CriticalObject(obj,2) ")`nrandom, x, 500, 5000`nsleep % x`nobj[" k "] := x"
			Threads[k] := AhkDllThread(AHKDir "\AutoHotkey.dll")
			Threads[k].ahktextdll(script)
		}
		else
		{
			if (!Threads[k].ahkReady())
			{
				LV_Add("",k,obj[k])
				obj[k] := "",Threads[k] := ""
			}
		}
	}
	Sleep, 100
}


GetToolTipText 获取当前tooltip内的文字 AutoHotkey 6

作者为 发表

Autohotkey

GetToolTipText(){
	WinGet, hwnd, ID, ahk_class tooltips_class32
	if hwnd
	{
		ControlGetText, text, , ahk_id %hwnd%
		return text
	}
}


多sheet数据插入sql server一个表 Autohotkey 2048

作者为 发表

Autohotkey

source := "src.xls" ;源文件
target := "[a].[dbo].[test_table]" ;数据库目标表
has_create_tab := 0 ;是否已创建表
xlsdb := new exceldb() ;创建excel adodb连接,获取数据表信息
xlsdb.open(source)
sheet := xlsdb.GetTableInfo()
;数据库连接
conn := ComObjCreate("ADODB.connection")
conn.Open("driver={SQL Server};server=192.168.8.2;uid=thinkai;pwd=02EdDd68F5CC83__;database=a") ;打开连接

;遍历有效sheet
for k,v in sheet
{
	fields := v
	if !has_create_tab ;尝试创建表
	{
		f := ""
		for x,y in v
			f .= f ? ",[" y "] nvarchar(255) NULL" : "[" y "] nvarchar(255) NULL"
		try
			conn.Execute("CREATE TABLE " target " (" f ");")
	}

	field := "" ;生成字段串 注意表格里面的字段名称应和数据库中的字段一致
	for x,y in v
			field .= field ? ",[" y "]" : "[" y "]"

	tmp_result := xlsdb.GetTable("SELECT * FROM [" (InStr(k,"$") ? k : k "$") "];") ;获取单个sheet的全部数据
	for row,vaules in tmp_result
	{
		tmp_str := ""
		for k,v in vaules
			tmp_str .= tmp_str ? ",'" v "'" : "'" v "'"
		conn.Execute("INSERT INTO " target " VALUES (" tmp_str ")") ;插入语句
	}
}
MsgBox, OK


getto(str){
	o := []
	Loop, Parse, str, `n, `r
	{
		IfInString, A_LoopField, `t
		{
			t := StrSplit(A_LoopField,"`t")
			o[t[1]] := t[2]
		}
	}
	return o
}

class exceldb
{
	;static conn

	__New() ;新建
	{
	this.conn:= ComObjCreate("ADODB.connection") ;初始化COM
	}

	open(file) ;打开文件
	{
		IfExist % file
			this.conn.Open("Provider=Microsoft.Ace.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" file) ;打开连接
			;this.conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=Yes';Data Source=" file) ;打开连接 2003方式
	}

	close() ;关闭文件
	{
		this.conn.Close()
	}


	GetTableInfo() ;获取所有Sheet及字段信息
	{
		;通过OpenSchema方法获取表信息
		rs := this.conn.OpenSchema(20) ;SchemaEnum 参考 http://www.w3school.com.cn/ado/app_schemaenum.asp
		t := []
		rs.MoveFirst()
		while !rs.EOF
		{
			t_name := RegExReplace(rs.("TABLE_NAME").value,"^'*(.*)\$'*$","$1")
			q := this.conn.Execute("select top 1 * from [" t_name "$]")
			if (q.Fields(0).Name="F1" && q.Fields.Count=1) ;排除空表格
			{
				rs.MoveNext()
				continue
			}
			t[t_name] := []
			for field in q.Fields  ;获取按顺序排列的字段
				t[t_name].insert(field.Name)
			q.close()
			rs.MoveNext()
		}
		return t
	}

	GetTable(sql)
	{
		t := []
		query := this.conn.Execute(sql)
		if RegExMatch(sql,"i)^select*")
		{
			fetchedArray := query.GetRows() ;取出数据(二维数组)
			colSize := fetchedArray.MaxIndex(1) + 1 ;列最大值 tips:从0开始 所以要+1
			rowSize := fetchedArray.MaxIndex(2) + 1 ;行最大值 tips:从0开始 所以要+1
			loop, % rowSize
			{
				i := (y := A_index) - 1
				t[y] := []
				loop, % colSize
				{
					j := (x := A_index) - 1
					t[y][x] := fetchedArray[j,i] ;取出二维数组内值
				}
			}
			query.Close()
			return t
		}
	}
}

相关资料:Excel数据拆分发邮件 Autohotkey

多进程任务管理示例 Autohotkey 2092

作者为 发表

Autohotkey

exe_file := "test.exe"
Gui, Add, text, x0 y0 w60 h20, 源文件
Gui, Add, Edit, x60 y0 w200 h20 vsource_file
Gui, Add, text, x0 y20 w60 h20, 进程数
Gui, Add, Edit, x60 y20 w200 h20 vmax, 10
Gui, Add, Button, x0 y40 w160 h20 gstart vstart, 开始
gui, Add, text, x0 y60 w160 h100 vshow
Gui, Show, x0 y0, 多进程示例
return

start:
GuiControl, Disable, start
Gui, Submit, nohide
FileRead, content, % source_file
Loop, Parse, content, `n, `r
{
	while(!check_idle())
		Sleep, 1000
	info := StrSplit(res,",")
	GuiControl, , show, % "信息:" info[1] " " info[2] "`n本次运行数量:" A_index "`n当前线程数:" p.maxindex()+1
	Run, %  exe_file " " info[1] " " info[2], , , pid ;传参方式传递数据
	p.Push(pid)
}
return

GuiClose:
ExitApp

check_idle(){
	global p,max
	for k,v in p
	{
		Process, Exist, % v
		if !ErrorLevel
			p.RemoveAt(k)
	}
	return (p.maxindex()<max)
}


WinHttpRequest POST XML数据示例 Autohotkey 2540

作者为 发表

Autohotkey

xml =
(
<?xml version="1.0" encoding="UTF-8" standalone="no"?><SOAP-ENV:Envelope xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema" xmlns:SOAPSDK2="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAPSDK3="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><commonUtil xmlns="http://wtp"><value xmlns:SOAPSDK4="http://wtp">data</value></commonUtil></SOAP-ENV:Body>
)
;请求头根据实际需求修改,注意Content-Type。
result := URLDownloadToVar("http://yourwebsite.com", "UTF-8","POST",xml,{"SOAPAction":"""urn:commonUtil""","Content-Type":"text/xml; charset=""UTF-8""","User-Agent":"SOAP Toolkit 3.0","Host":"0.0.0.0","Content-Length":strlen(xml),"Connection":"Keep-Alive","Cache-Control":"no-cache","Pragma":"no-cache"})
MsgBox % result

URLDownloadToVar(url, Encoding = "",Method="GET",postData="",headers:=""){ ;网址,编码,请求方式,post数据,请求头
	hObject:=ComObjCreate("WinHttp.WinHttpRequest.5.1")
	if Method = GET
	{
		Try
		{
			;hObject.SetTimeouts(500,2000,2000,5000)
			hObject.Open("GET",url)
			hObject.Send()
		}
		catch e
			return -1
	}
	else if Method = POST
	{
		Try
		{
			hObject.SetTimeouts(30000,30000,300000,300000)
			hObject.Open("POST",url,True)
			if IsObject(headers)
			{
				for k,v in headers
				hObject.SetRequestHeader(k, v)
			}
			hObject.Send(postData)
			hObject.WaitForResponse(-1)
		}
		catch e
		{
			FileAppend, % "`n" var_dump(e), error.txt
			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
}


    前几周在b站直播,光猫会自动重启(光猫通过网线上的棕色组线在客厅另一边接入电源),找了个12V 4A的电源接上去就没事了。网上说低电压自动重启,刚好今天把万用表和电烙铁等工具带回家了,所以就尝试改造一下。

    电源配置如下:

    光猫 12V 1A

    路由器 9V 0.6A

    笔记本闲置电源 19.9v 3.42A

    3个直流DC-DC可调降压/稳压模块 1.5至35V电压连续可调,最大输出电流为3A。

    首先把原来胶布粘好的网线,取两端的蓝色和棕色两组线两两并联并接到19V电源和三个DC模块上,然后安装两个笔记本散热底座拆下来的5V无刷风扇一正一反安装到猫上,并引线接入到DC模块输出端,焊接好各处的连接线,缠上胶带就完工了。

                 


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

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

43 queries in 0.961 seconds |