Thinkai's Blog

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

正在浏览分类 Autohotkey

总共找到 129 篇

通过文件对象复制二进制文件(读写) Autohotkey 8784

作者为 发表

Autohotkey

FileGetSize, size, 1.jpg
file := FileOpen("1.jpg","r")
readbytes := file.RawRead(buff,size)
file.close()
file2 := FileOpen("2.jpg","w")
writebytes := file2.RawWrite(&buff,readbytes)
file2.close()


兼容性仅测试通过在32位Autohotkey版本

GZIP_DecompressFile("test.txt", ret)
MsgBox % ret

GZIP_DecompressFile(file, ByRef ret, encoding:="utf-8"){
	body := BinArr_FromFile(file)
	VarSetCapacity(data, size := body.MaxIndex() + 1)
	DllCall("oleaut32\SafeArrayAccessData", "ptr", ComObjValue(body), "ptr*", pdata)
	DllCall("RtlMoveMemory", "ptr", &data, "ptr", pdata, "ptr", size)
	DllCall("oleaut32\SafeArrayUnaccessData", "ptr", ComObjValue(body))
	size := GZIP_DecompressBuffer(data, size)
	ret := StrGet(&data, size, encoding)
}


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

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

GZIP_DecompressBuffer( ByRef var, nSz ) { ; 'Microsoft GZIP Compression DLL' SKAN 20-Sep-2010
; Decompress routine for 'no-name single file GZIP', available in process memory.
; Forum post :  www.autohotkey.com/forum/viewtopic.php?p=384875#384875
; Modified by Lexikos 25-Apr-2015 to accept the data size as a parameter.

	; ---------- Added by tmplinshi ----------
	static hModule, _
	If !hModule {
		hModule := DllCall("LoadLibrary", "Str", "gzip.dll", "Ptr")
		_ := { base: {__Delete: "GZIP_DecompressBuffer"} }
	}
	If !_
		Return DllCall("FreeLibrary", "Ptr", hModule)
	; ---------- / Added by tmplinshi ----------

 vSz :=  NumGet( var,nsz-4 ), VarSetCapacity( out,vsz,0 )
 DllCall( "GZIP\InitDecompression" )
 DllCall( "GZIP\CreateDecompression", UIntP,CTX, UInt,1 )
 If ( DllCall( "GZIP\Decompress", UInt,CTX, UInt,&var, UInt,nsz, UInt,&Out, UInt,vsz
    , UIntP,input_used, UIntP,output_used ) = 0 && ( Ok := ( output_used = vsz ) ) )
      VarSetCapacity( var,64 ), VarSetCapacity( var,0 ), VarSetCapacity( var,vsz,32 )
    , DllCall( "RtlMoveMemory", UInt,&var, UInt,&out, UInt,vsz )
 DllCall( "GZIP\DestroyDecompression", UInt,CTX ),  DllCall( "GZIP\DeInitDecompression" )
Return Ok ? vsz : 0
}

GZIP_CompressBuffer(ByRef var, nSz ){
    static hModule, _
    If !hModule {
        hModule := DllCall("LoadLibrary", "Str", "gzip.dll", "Ptr")
        _ := { base: {__Delete: "GZIP_CompressBuffer"} }
    }
    If !_
        Return DllCall("FreeLibrary", "Ptr", hModule)
 vSz :=  NumGet( var,nsz-4 ), VarSetCapacity( out,vsz,0 )
 DllCall( "GZIP\InitCompression" )
 DllCall( "GZIP\CreateCompression", UIntP,CTX, UInt,1 )
 If ( DllCall( "GZIP\Compress", UInt,CTX, UInt,&var, UInt,nsz, UInt,&Out, UInt,vsz
    , UIntP,input_used, UIntP,output_used ) = 0 && ( Ok := ( output_used = vsz ) ) )
      VarSetCapacity( var,64 ), VarSetCapacity( var,0 ), VarSetCapacity( var,vsz,32 )
    , DllCall( "RtlMoveMemory", UInt,&var, UInt,&out, UInt,vsz )
 DllCall( "GZIP\DestroyCompression", UInt,CTX ),  DllCall( "GZIP\DeInitCompression" )
Return Ok ? vsz : 0
}


Excel简单一键求和 Autohotkey 3963

作者为 发表

Autohotkey

MButton::
xl := ComObjActive("Excel.Application")
col := xl.Selection.Address ;选择的单元格
RegExMatch(col,"\$(\w+)\$(\d*)", m)
xl.Selection.Value := "=SUM($" m1 "$1:$" m1 "$" m2-1 ")"
return


获取控件或窗口的父窗口 Autohotkey 5842

作者为 发表

Autohotkey

MouseGetPos, , , , controlclassnn ;获得一个控件
ControlGet, hwnd, Hwnd, , %controlclassnn%, A ;获得控件句柄
;WinGetClass, class, ahk_id %hwnd%
Parent=1
while Parent
Parent := DllCall("GetParent","int",hwnd),p := Parent ? Parent : p,hwnd := Parent ? Parent : hwnd ;获取最顶层父窗
WinGetClass, ParentClass, ahk_id %p%
MsgBox %ParentClass%


通过控件句柄获取控件ClassNN Autohotkey 6624

作者为 发表

Autohotkey

ControlGet, controlhwnd, hwnd, , , A ;获取控件hwnd
WinGet, mainhwnd, ID, A ;获取窗口hwnd
/*
VarSetCapacity(c,201,0)
DllCall("GetClassNameA","int",controlhwnd, "Ptr", &c, "Int", 200)  ;获取控件类
classname := StrGet(&c,200)
*/
WinGetClass, classname, ahk_id %controlhwnd%
nhwnd := 0, idx := 0
while nhwnd<>controlhwnd
{
idx++,nhwnd := DllCall("FindWindowExA","uint", mainhwnd, "uint", nhwnd, "Str", classname,"uint", 0) ;枚举该类控件,检查是否是这一个控件
if !nhwnd
break
}
classNN := classname idx


获取http-only只读cookie Autohotkey 3665

作者为 发表

Autohotkey

GetCookie(){
	static url, ua ;链接,user-agent
	if !url
		url := "http://shop.xj.189.cn:8081/xjwt_webapp/RechangeController/index.do?params=Y2hhbm5lbElkPThhODI4YjQ1NGUzZjIwMTIwMTRlNDdlYjZjYWUwMDBh&fastcode=10000321"
	if !ua
		ua := "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER"
	;设置request-header
	headers := {"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8","Upgrade-Insecure-Requests":"1","Accept-Encoding":"gzip,deflate","Accept-Language":"zh-CN,zh;q=0.8","Host":"shop.xj.189.cn:8081","User-Agent":ua}
	hObject:=ComObjCreate("WinHttp.WinHttpRequest.5.1")
	Try
	{
		hObject.Open("GET",url) ;get/post
		for k,v in headers ;设置请求头
		    hObject.SetRequestHeader(k, v)
		hObject.Send()
		hObject.WaitForResponse(-1)
	}
	hds := hObject.GetAllResponseHeaders() ;获取所有cookie

	cookie := ""
	Loop, Parse, hds, `n, `r
	{
		if RegExMatch(A_LoopField,"Set-Cookie:([^;]*;)",m)
			cookie .= m1
	}
	return cookie
}


POST/GET获取GZIP数据 Autohotkey 3102

作者为 发表

Autohotkey

GZURLDownloadToVar(url, Encoding = "",Method="GET",postData="",headers:=""){
	hObject:=ComObjCreate("WinHttp.WinHttpRequest.5.1")
	Try
	{
		hObject.SetTimeouts(30000,30000,300000,300000)
		hObject.Open(Method,url,True)
		if IsObject(headers)
		{
			for k,v in headers
			{
				if v
				hObject.SetRequestHeader(k, v)
			}
		}
		hObject.Send(postData)
		hObject.WaitForResponse(-1)
	}
	catch e
		return -1
	}
	GZIP_DecompressResponseBody(hObject, retHtml, Encoding)
	return retHtml
}

GZIP_DecompressBuffer(ByRef var, nSz ){
	static hModule, _
	If !hModule {
		hModule := DllCall("LoadLibrary", "Str", "gzip.dll", "Ptr")
		_ := { base: {__Delete: "GZIP_DecompressBuffer"} }
	}
	If !_
		Return DllCall("FreeLibrary", "Ptr", hModule)
 vSz :=  NumGet( var,nsz-4 ), VarSetCapacity( out,vsz,0 )
 DllCall( "GZIP\InitDecompression" )
 DllCall( "GZIP\CreateDecompression", UIntP,CTX, UInt,1 )
 If ( DllCall( "GZIP\Decompress", UInt,CTX, UInt,&var, UInt,nsz, UInt,&Out, UInt,vsz
    , UIntP,input_used, UIntP,output_used ) = 0 && ( Ok := ( output_used = vsz ) ) )
      VarSetCapacity( var,64 ), VarSetCapacity( var,0 ), VarSetCapacity( var,vsz,32 )
    , DllCall( "RtlMoveMemory", UInt,&var, UInt,&out, UInt,vsz )
 DllCall( "GZIP\DestroyDecompression", UInt,CTX ),  DllCall( "GZIP\DeInitDecompression" )
Return Ok ? vsz : 0
}

GZIP_DecompressResponseBody(ByRef oWinHttp, ByRef retHtml, encoding:="UTF-8") {
	If ( oWinHttp.GetResponseHeader("Content-Encoding") != "gzip" )
		Return True, retHtml := oWinHttp.ResponseText

	body := oWinHttp.ResponseBody
	VarSetCapacity(data, size := body.MaxIndex() + 1)
	DllCall("oleaut32\SafeArrayAccessData", "ptr", ComObjValue(body), "ptr*", pdata)
	DllCall("RtlMoveMemory", "ptr", &data, "ptr", pdata, "ptr", size)
	DllCall("oleaut32\SafeArrayUnaccessData", "ptr", ComObjValue(body))
	size := GZIP_DecompressBuffer(data, size)
	retHtml := StrGet(&data, size, encoding)
}


转换效率 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 2944

作者为 发表

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 147

作者为 发表

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

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

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

50 queries in 0.754 seconds |