#include-once Global $_MDCodeBuffer, $_MDLoadOffset, $_MDGetOffset, $_MDFreeOffset Global $_MFHookPtr, $_MFHookBak, $_MFHookApi = "LocalCompact" Func _TabControl($Hwnd, $Type) Switch $Type Case 0 $Type = "DeleteTab" Case 1 $Type = "AddTab" Case 2 $Type = "ActivateTab" Case Else Return 0 EndSwitch $ITaskbarList = "ptr lpVtbl" $ITaskbarListVtbl = "ptr QueryInterface; ptr AddRef; ptr Release; ptr HrInit; ptr AddTab; ptr DeleteTab; ptr ActivateTab; ptr SetActiveAlt" $HRESULT = "LONG" $OLE32 = DllOpen("ole32.dll") $CLSCTX_SERVER = BitOR(1, 4) $IID_ITaskbarList = _GUIDStruct("{56FDF342-FD6D-11d0-958A-006097C9A090}") $CLSID_TaskBarlist = _GUIDStruct("56FDF344-FD6D-11D0-958A006097C9A090") DllCall($OLE32, "long", "CoInitialize", "ptr", 0) $ret = DllCall($OLE32, "long_ptr", "CoCreateInstance", "ptr", DllStructGetPtr($CLSID_TaskBarlist), "ptr", 0, "dword", $CLSCTX_SERVER, "ptr", DllStructGetPtr($IID_ITaskbarList), "ptr*", 0) $lpITaskbarList = $ret[5] $COM_Interface_ITaskbarList = DllStructCreate("ptr lpVtbl", $lpITaskbarList) $COM_Interface_ITaskbarList_FunctionTable = DllStructCreate($ITaskbarListVtbl, DllStructGetData($COM_Interface_ITaskbarList, 1)) MemoryFuncInit() MemoryFuncCall($HRESULT, DllStructGetData($COM_Interface_ITaskbarList_FunctionTable, "HrInit"), "ptr", $lpITaskbarList) MemoryFuncCall($HRESULT, DllStructGetData($COM_Interface_ITaskbarList_FunctionTable, $Type), "ptr", $lpITaskbarList, "hwnd", $hwnd) MemoryFuncCall($HRESULT, DllStructGetData($COM_Interface_ITaskbarList_FunctionTable, "Release"), "ptr", $lpITaskbarList) MemoryFuncExit() DllCall($OLE32, "long", "CoUninitialize") DllClose($OLE32) Return 1 EndFunc ;==>_HideTab Func _GUIDStruct($IID) $IID = StringRegExpReplace($IID, "([}{])", "") $IID = StringSplit($IID, "-") Local $_GUID = "DWORD Data1; ushort Data2; ushort Data3; BYTE Data4[8];" Local $GUID = DllStructCreate($_GUID) If $IID[0] = 5 Then $IID[4] &= $IID[5] If $IID[0] > 5 Or $IID[0] < 4 Then Return SetError(1, 0, 0) DllStructSetData($GUID, 1, Dec($IID[1])) DllStructSetData($GUID, 2, Dec($IID[2])) DllStructSetData($GUID, 3, Dec($IID[3])) DllStructSetData($GUID, 4, Binary("0x" & $IID[4])) Return $GUID EndFunc ;==>_GUIDStruct Func MemoryFuncInit() Local $KernelHandle = DllCall("kernel32.dll", "ptr", "LoadLibrary", "str", "kernel32.dll") Local $HookPtr = DllCall("kernel32.dll", "ptr", "GetProcAddress", "ptr", $KernelHandle[0], "str", $_MFHookApi) $_MFHookPtr = $HookPtr[0] $_MFHookBak = DllStructCreate("ubyte[7]") DllCall("kernel32.dll", "int", "WriteProcessMemory", "ptr", -1, "ptr", DllStructGetPtr($_MFHookBak), "ptr", $_MFHookPtr, "uint", 7, "uint*", 0) DllCall("kernel32.dll", "int", "WriteProcessMemory", "ptr", -1, "ptr", $_MFHookPtr, "byte*", 0xB8, "uint", 1, "uint*", 0) DllCall("kernel32.dll", "int", "WriteProcessMemory", "ptr", -1, "ptr", $_MFHookPtr + 5, "ushort*", 0xE0FF, "uint", 2, "uint*", 0) EndFunc Func MemoryFuncCall($RetType, $Address, $Type1 = "", $Param1 = 0, $Type2 = "", $Param2 = 0, $Type3 = "", $Param3 = 0, $Type4 = "", $Param4 = 0, $Type5 = "", $Param5 = 0, $Type6 = "", $Param6 = 0, $Type7 = "", $Param7 = 0, $Type8 = "", $Param8 = 0, $Type9 = "", $Param9 = 0, $Type10 = "", $Param10 = 0, $Type11 = "", $Param11 = 0, $Type12 = "", $Param12 = 0, $Type13 = "", $Param13 = 0, $Type14 = "", $Param14 = 0, $Type15 = "", $Param15 = 0, $Type16 = "", $Param16 = 0, $Type17 = "", $Param17 = 0, $Type18 = "", $Param18 = 0, $Type19 = "", $Param19 = 0, $Type20 = "", $Param20 = 0) If Not IsDllStruct($_MFHookBak) Then MemoryFuncInit() MemoryFuncSet($Address) Local $DllCallStr = 'DllCall("kernel32.dll", "' & $RetType & '", "' & $_MFHookApi & '"', $n, $i For $i = 4 To @NumParams Step 2 $n = ($i - 2) / 2 $DllCallStr &= ', $Type' & $n & ', $Param' & $n Next $DllCallStr &= ')' Local $Ret = Execute($DllCallStr) Return $Ret EndFunc Func MemoryFuncSet($Address) DllCall("kernel32.dll", "int", "WriteProcessMemory", "ptr", -1, "ptr", $_MFHookPtr + 1, "uint*", $Address, "uint", 4, "uint*", 0) EndFunc Func MemoryFuncExit() DllCall("kernel32.dll", "int", "WriteProcessMemory", "ptr", -1, "ptr", $_MFHookPtr, "ptr", DllStructGetPtr($_MFHookBak), "uint", 7, "uint*", 0) $_MFHookBak = 0 EndFunc Func MemoryDllInit() If IsDllStruct($_MDCodeBuffer) Then Return Local $Opcode = '0xFFFFFFFFFFFFFFFFB800000000FFE0B800000000FFE0B800000000FFE0B800000000FFE0B800000000FFE0B800000000FFE0B800000000FFE0B800000000FFE0B800000000FFE0B800000000FFE0B800000000FFE0B800000000FFE0B800000000FFE0B800000000FFE0B800000000FFE0B800000000FFE05589E55156578B7D088B750C8B4D10FCF3A45F5E595DC359585A5153E8000000005B81EBC511400089832C114000899330114000E8000000005981E9DD114000518B912C114000E80B0000007573657233322E646C6C005850FFD2598B9130114000E80C0000004D657373616765426F784100595150FFD289839E114000E8000000005981E927124000518B912C114000E80D0000006B65726E656C33322E646C6C005850FFD2598B9130114000E80A0000006C737472636D70694100595150FFD2898335114000E8000000005981E971124000518B912C114000E80D0000006B65726E656C33322E646C6C005850FFD2598B9130114000E80D0000005669727475616C416C6C6F6300595150FFD289833C114000E8000000005981E9BE124000518B912C114000E80D0000006B65726E656C33322E646C6C005850FFD2598B9130114000E80C0000005669727475616C4672656500595150FFD2898343114000E8000000005981E90A134000518B912C114000E80D0000006B65726E656C33322E646C6C005850FFD2598B9130114000E80F0000005669727475616C50726F7465637400595150FFD289834A114000E8000000005981E959134000518B912C114000E80D0000006B65726E656C33322E646C6C005850FFD2598B9130114000E80E00000052746C5A65726F4D656D6F727900595150FFD2898351114000E8000000005981E9A7134000518B912C114000E80D0000006B65726E656C33322E646C6C005850FFD2598B9130114000E80D0000004C6F61644C6962726172794100595150FFD2898358114000E8000000005981E9F4134000518B912C114000E80D0000006B65726E656C33322E646C6C005850FFD2598B9130114000E80F00000047657450726F634164647265737300595150FFD289835F114000E8000000005981E943144000518B912C114000E80D0000006B65726E656C33322E646C6C005850FFD2598B9130114000E80D00000049734261645265616450747200595150FFD2898366114000E8000000005981E990144000518B912C114000E80D0000006B65726E656C33322E646C6C005850FFD2598B9130114000E80F00000047657450726F636573734865617000595150FFD289836D114000E8000000005981E9DF144000518B912C114000E80D0000006B65726E656C33322E646C6C005850FFD2598B9130114000E80A00000048656170416C6C6F6300595150FFD2898374114000E8000000005981' $Opcode &= 'E929154000518B912C114000E80D0000006B65726E656C33322E646C6C005850FFD2598B9130114000E809000000486561704672656500595150FFD289837B114000E8000000005981E972154000518B912C114000E80D0000006B65726E656C33322E646C6C005850FFD2598B9130114000E80C000000476C6F62616C416C6C6F6300595150FFD2898382114000E8000000005981E9BE154000518B912C114000E80D0000006B65726E656C33322E646C6C005850FFD2598B9130114000E80E000000476C6F62616C5265416C6C6F6300595150FFD2898390114000E8000000005981E90C164000518B912C114000E80D0000006B65726E656C33322E646C6C005850FFD2598B9130114000E80B000000476C6F62616C4672656500595150FFD2898389114000E8000000005981E957164000518B912C114000E80D0000006B65726E656C33322E646C6C005850FFD2598B9130114000E80C000000467265654C69627261727900595150FFD28983971140005B59585150E8B40A000059C35990585A515250E8E60B0000C35A585250E8930C000059C34D5A50000200000004000F00FFFF0000B80000000000000040001A0000000000535048494E5820432D2D20302E3233394A616E20313920323030370060000000BA0E000E1FB409CD21B8014CCD21466F722057696E3332206F6E6C79210D0A24504500004C010100000000000000000000000000E0008EA10B0100EF000400000000000000000000001000000010000000000000000040000010000000020000010000000000000004000000000000000020000000020000000000000300010000800000000800000000010000100000000000001000000070110000E5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000434F44450000000000100000001000000004000000020000000000000000000000000000600000E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031C040C20C005589E5B878563412FFE0C8040000538B450803450C0345100345140345188945FC5BC9C21400C8040000538B45088B008B5D0C03038B5D1003038B5D1403038B5D1803038945FC8B5D088B036BC00A89038B5D0C8B036BC00A89038B5D108B036BC00A' $Opcode &= '89038B5D148B036BC00A89038B5D188B036BC00A89038B45FC5BC9C214006A0A58C35589E58B450801C05DC204005589E58B450803450C5DC208005589E58B450803450C0345105DC20C005589E58B450803450C0345100345145DC210005589E58B450803450C0345100345140345185DC214005589E58B450803450C03451003451403451803451C0345205DC21C005589E58B450803450C03451003451403451803451C03452003452403452803452C03453003453403453803453C0345405DC23C005589E58B450803450C03451003451403451803451C03452003452403452803452C03453003453403453803453C03454003454403454803454C0345500345545DC2500000000000000000000000000006120000010000000B0000000B00000098110000C4110000F0110000871000008B100000F9100000971000002D110000A4100000B4100000C7100000DD1000002C1000001010000012120000181200001E120000251200002B12000032120000381200003E120000441200004A1200004F12000000000100020003000400050006000700080009000A0054657374444C4C2E646C6C0046756E63300046756E63310046756E6331350046756E63320046756E6332300046756E63330046756E63340046756E63350046756E633700746573740074657374320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C804000068C2164000BE80244000FF36BE84244000FF36E8DDF4FFFF8945FC85C00F851000000068AE1D4000FF159424400083C404C9C35468D01D4000FF159424400083C40868D51D4000FF75FCE895F9FFFF89C2BB8C2440008B1B6A026A016A1452E822F3FFFF6A' $Opcode &= '056A046A036A00E815F3FFFF6A086A076A066A00E808F3FFFF6A0B6A0A6A096A00E8FBF2FFFF6A0E6A0D6A0C6A00E8EEF2FFFF6A116A106A0F6A00E8E1F2FFFF6A146A136A126A00E8D4F2FFFF5068DC1D4000FF159424400083C4085468D01D4000FF159424400083C408FF75FCE819F9FFFF68E91D4000FF159424400083C404C9C343616E2774206C6F6164206C6962726172792066726F6D206D656D6F72792E0D0A0025580D0A0046756E63323000526573756C743A2025640D0A0066696E697368005589E551505356578B45108B4804894DF88B000FB750148D7C101831DBEB69837F100075318B450C8B40388945FC09C07E526A046800100000508B470C0345F850E805F3FFFF89C6897708FF75FC56E80CF3FFFFEB2E6A046800100000FF77108B470C0345F850E8DFF2FFFF89C6FF77108B47140345085056E836F3FFFF83C40C8977084383C7288B45108B000FB7400639C37C8A5F5E5BC9C35589E583EC245356578B5D088B030FB750148D7C101831F6E9BB000000F74724000000200F95C083E0018945F4F74724000000400F95C083E0018945F0F74724000000800F95C083E0018945ECF747240000000274126800400000FF7710FF7708E852F2FFFFEB6C8B55EC8B4DF08B45F4C1E0048D8CC8D42340008B14918955F8F7472400000004740666814DF800028B47108945FC09C0751EF6472440740A8B038B40208945FCEB0EF647248074088B038B40248945FC837DFC0074168D45E850FF75F8FF7710FF7708E8EFF1FFFF09C075004683C7288B030FB7400639C60F8C37FFFFFF5F5E5BC9C35589E583EC1C53568B5D0C8B45088B70048B0089C181C1A00000008379040074778B0101F08945FCEB668B45FC8B0001F08945F48B45FC83C0088945F831C9EB358B55F80FB712C1FA0C8955F08B45F80FB70025FF0F00008945EC89D009C0741083F803750B8B45EC0345F48945E80118418345F8028B55FC8B520483EA08D1EA39D172BC8B45FC89C20350048955FC8B45FC83380075925E5BC9C35589E583EC185356578B5D0831F6468B7B048B0305800000008945FC837804000F841E0100008B0001F88945F8E9F70000008B45F88B400C01F850E806F1FFFF8945EC83F8FF750731F6E9F5000000837B080074176A408B530C42C1E20252FF7308E817F1FFFF894308EB128B530C42C1E202526A40E8F5F0FFFF894308837B0800750731F6E9B90000008B530C8B4B0C41894B0C8B4B088B45EC8904918B45F883380074118B0801F9894DF48B401001F88945F0EB628B45F88B481001F9894DF48B401001F88945F0EB4D8B45F4F7000000008074130FB70050FF75ECE86AF0FFFF8B55F08902EB1B8B45F48B0001F88945E883C00250FF75ECE84DF0FFFF8B55F089028B45F0833800750431F6EB108345F4048345F0048B' $Opcode &= '45F483380075AB09F6741F8345F8146A14FF75F8E821F0FFFF09C0750D8B55F8837A0C000F85EEFEFFFF89F05F5E5BC9C35589E583EC145356578B45088945FC6681384D5A740731C0E91E0100008B45FC8B403C89C6037508813E50450000740731C0E9040100006A046800200000FF7650FF7634E896EFFFFF89C309DB75136A046800200000FF76506A00E87FEFFFFF89C309DB750731C0E9CE000000E89EEFFFFF6A146A0050E89BEFFFFF89C7895F0483670C0083670800836710006A046800100000FF765053E842EFFFFF6A046800100000FF765453E832EFFFFF8945F88B45FC8B503C0356545250FF75F8E885EFFFFF8B45FC8B403C0345F889078958345756FF7508E8B9FBFFFF83C41889D82B46348945F4740A5057E82AFDFFFF83C40857E8BDFDFFFF5909C0743557E82BFCFFFF598B078378280074228B078B402801D88945F0741A6A006A0153FF55F08945EC09C0740BC747100100000089F8EB0957E8BF0000005931C05F5E5BC9C35589E583EC0C5356578B45088B4804894DF8834DF4FF8B0089C783C778837F0400750731C0E9860000008B070345F88945FC83781800740683781400750431C0EB6E8B45FC8B482089CF037DF88B402489C3035DF831F6EB218B070345F850FF750CE831EEFFFF09C075080FB7038945F4EB0F4683C70483C3028B45FC3B701872D7837DF4FF750431C0EB248B45FC8B40143945F4760431C0EB158B5DF88B55F48B4DFC8B491C01D98B149189D001D85F5E5BC9C208005589E5515356578B7D0809FF746E837F100074198B078B40280347048945FC6A006A00FF7704FF55FC83671000837F0800742631F6EB158B5F08833CB3FF740B8B5F08FF34B3E8F8EDFFFF463B770C7CE6FF7708E8DCEDFFFF837F0400740F68008000006A00FF7704E881EDFFFFE8A6EDFFFF576A0050E8ABEDFFFF5F5E5BC9C3' $_MDLoadOffset = (StringInStr($Opcode, "59585A51") - 1) / 2 - 1 $_MDGetOffset = (StringInStr($Opcode, "5990585A51") - 1) / 2 - 1 $_MDFreeOffset = (StringInStr($Opcode, "5A585250") - 1) / 2 - 1 $_MDCodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]") DllStructSetData($_MDCodeBuffer, 1, $Opcode) If Not IsDllStruct($_MFHookBak) Then MemoryFuncInit() EndFunc Func MemoryDllExit() MemoryFuncExit() $_MDCodeBuffer = 0 EndFunc Func MemoryDllOpen($DllBinary) If Not IsDllStruct($_MDCodeBuffer) Then MemoryDllInit() Local $Ret = DllCall("kernel32.dll", "hwnd", "LoadLibraryA", "str", "kernel32.dll") Local $GetProcAddress = DllCall("kernel32.dll", "uint", "GetProcAddress", "hwnd", $Ret[0], "str", "GetProcAddress") Local $LoadLibraryA = DllCall("kernel32.dll", "uint", "GetProcAddress", "hwnd", $Ret[0], "str", "LoadLibraryA") Local $DllBuffer = DllStructCreate("byte[" & BinaryLen($DllBinary) & "]") DllStructSetData($DllBuffer, 1, $DllBinary) MemoryFuncSet(DllStructGetPtr($_MDCodeBuffer) + $_MDLoadOffset) Local $Module = DllCall("kernel32.dll", "uint", $_MFHookApi, "uint", $LoadLibraryA[0], "uint", $GetProcAddress[0], "ptr", DllStructGetPtr($DllBuffer)) $DllBuffer = 0 Return $Module[0] EndFunc Func MemoryDllClose($Module) MemoryFuncSet(DllStructGetPtr($_MDCodeBuffer) + $_MDFreeOffset) DllCall("kernel32.dll", "none", $_MFHookApi, "uint", $Module) EndFunc Func MemoryDllCall($Module, $RetType, $Funcname, $Type1 = "", $Param1 = 0, $Type2 = "", $Param2 = 0, $Type3 = "", $Param3 = 0, $Type4 = "", $Param4 = 0, $Type5 = "", $Param5 = 0, $Type6 = "", $Param6 = 0, $Type7 = "", $Param7 = 0, $Type8 = "", $Param8 = 0, $Type9 = "", $Param9 = 0, $Type10 = "", $Param10 = 0, $Type11 = "", $Param11 = 0, $Type12 = "", $Param12 = 0, $Type13 = "", $Param13 = 0, $Type14 = "", $Param14 = 0, $Type15 = "", $Param15 = 0, $Type16 = "", $Param16 = 0, $Type17 = "", $Param17 = 0, $Type18 = "", $Param18 = 0, $Type19 = "", $Param19 = 0, $Type20 = "", $Param20 = 0) Local $Ret, $OpenFlag = False Local Const $MaxParams = 20 If (@NumParams < 3) Or (@NumParams > $MaxParams * 2 + 3) Or (Mod(@NumParams, 2) = 0) Then SetError(2) Return 0 EndIf If Not IsNumber($Module) Then $OpenFlag = True $Module = MemoryDllOpen($Module) EndIf If $Module = 0 Then If $OpenFlag Then MemoryDllClose($Module) SetError(1) Return 0 EndIf MemoryFuncSet(DllStructGetPtr($_MDCodeBuffer) + $_MDGetOffset) $Ret = DllCall("kernel32.dll", "uint", $_MFHookApi, "uint", $Module, "str", $Funcname) If $Ret[0] = 0 Then SetError(3) Return 0 EndIf MemoryFuncSet($Ret[0]) Local $DllCallStr = 'DllCall("kernel32.dll", "' & $RetType & '", "' & $_MFHookApi & '"', $n, $i For $i = 5 To @NumParams Step 2 $n = ($i - 3) / 2 $DllCallStr &= ', $Type' & $n & ', $Param' & $n Next $DllCallStr &= ')' $Ret = Execute($DllCallStr) If $OpenFlag Then MemoryDllClose($Module) SetError(0) Return $Ret EndFunc