-
Notifications
You must be signed in to change notification settings - Fork 72
/
Copy pathStrLen2.ahk
33 lines (26 loc) · 969 Bytes
/
StrLen2.ahk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#Include ..\MCode.ahk
/*
Recupera la longitud de una cadea, en caracteres.
Parámetros:
String: La cadena UTF-16LE.
Return:
Devuelve el número de caracteres enteros en la cadena especificada en String.
Ejemplo:
MsgBox('StrLen: ' . StrLen(Chr(128064)) . '`nStrLen2: ' . StrLen2(Chr(128064)))
*/
StrLen2(String) {
Static pUTF8Len
Local Buffer, Size
VarSetCapacity(Buffer, Size := StrPut(String, 'UTF-8') - 1)
StrPut(String, &Buffer, 'UTF-8')
If (!pUTF8Len)
pUTF8Len := MCode('2,x86:i0wkBA+2EYTSdCSDwQExwIHiwAAAAIPCgA+VwoPBAQ+20gHQD7ZR/4TSdeTCBAAxwMIEAJCQkJCQkJCQkJCQkA==,x64:D7YRhNJ0KUiDwQExwA8fAIHiwAAAAIPCgA+VwkiDwQEPttIB0A+2Uf+E0nXjw2aQMcDDkJCQkJCQkJCQkJCQkA==')
Return (DllCall(pUTF8Len, 'UPtr', &Buffer))
/* CON AHK (mucho mas lento)
Length := 0
Loop (Size)
If ((NumGet(Buffer, A_Index - 1, 'UChar') & 0xC0) != 0x80)
++Length
Return (Length)
*/
}