Thinkai's Blog

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

兼容性仅测试通过在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 2691

作者为 发表

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 3867

作者为 发表

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 4300

作者为 发表

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 2131

作者为 发表

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 1904

作者为 发表

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)
}


PHP HTTPS SSL CURL GET和POST的一个函数 1024

作者为 发表

编程

function curlPost($url,$post = true, $data = array(), $timeout = 30, $CA = true){    
     // 链接,是否使用POST方式, post数据, 超时, 验证http证书
    $cacert = getcwd() . '/cacert.pem'; //CA根证书  
    $SSL = substr($url, 0, 8) == "https://" ? true : false;  
      
    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL, $url);  
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);  
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout-2);  
    if ($SSL && $CA) {  
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);   // 只信任CA颁布的证书  
        curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根证书(用来验证的网站证书是否是CA颁布)  
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配  
    } else if ($SSL && !$CA) {  
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书  
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 检查证书中是否设置域名  
    }  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
    if ($post== true) {
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); //避免data数据过长问题 
    curl_setopt($ch, CURLOPT_POST, true);  
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  
    }else{
    	curl_setopt($ch, CURLOPT_HEADER, 0);
    }
    //curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); //data with URLEncode  
  
    $ret = curl_exec($ch);  
    //var_dump(curl_error($ch));  //查看报错信息  
  
    curl_close($ch);  
    return $ret;    
}


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

作者为 发表

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


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

作者为 发表

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
}



友情链接:Autohotkey中文论坛Autohotkey中文帮助Autohotkey官网我的B站直播间如若生涯一场梦博客联系作者免GooglePlay APK下载

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

43 queries in 1.019 seconds |