;OpenFromTC.au3 ; ;Открытие файла, используя внутренние ассоциации ТС: в качестве параметра - полное имя файла, окно ТС будет активировано, в новой вкладке будет открыт каталог файла и на файле установлен курсор, далее ТС будет послана команда cm_Return (программный аналог Enter). ;Стоит иметь в виду: ТС попытается открыть файл даже при отсутствии внутренних ассоциаций, используя системные, а если по умолчанию в ТС файл по Enter открывается как папка (с помощью wcx-плагина, например), то так и будет. #NoTrayIcon Opt('WinWaitDelay', 100) Global Const $WM_COPYDATA = 0x004A Global Const $WM_USER = 0x400 Global $hTC, $hWndPar If $CmdLine[0] <> 1 Then MsgBox(48 + 4096, @ScriptName, 'Проверьте параметры запуска, выходим.') Exit EndIf $hTC = WinGetHandle('[CLASS:TTOTAL_CMD]') If @error Then MsgBox(48 + 4096, @ScriptName, 'Окно ТС не найдено, выходим.') Exit EndIf AutoItWinSetTitle(@ScriptFullPath) $hWndPar = WinGetHandle(@ScriptFullPath) WinActivate($hTC) _TC_cd_command(__CheckANSItoUTF8($CmdLine[1] & '\\'), '', 'ST') Sleep(250) _TC_cm_command(1001) ;ANSI >> UTF-8 (if needed) Func __CheckANSItoUTF8($sStr) Local $sTmp, $BOM = Chr(239) & Chr(187) & Chr(191) ; \xEF \xBB \xBF $sTmp = BinaryToString(StringToBinary($sStr, 1), 1) If Not ($sStr == $sTmp) Then $sStr = BinaryToString(StringToBinary($sStr, 4)) Return $BOM & $sStr Else Return $sStr EndIf EndFunc ;==>__CheckANSItoUTF8 Func _TC_cd_command($l, $r, $sFlag = "") Local $sCommand = $l & @CR & $r & ChrW(0) & $sFlag Local $pCDcom = DllStructCreate("char[" & StringLen($sCommand) + 1 & "]") Local $pCopyData = DllStructCreate("ulong_ptr;dword;ptr") DllStructSetData($pCDcom, 1, $sCommand) DllStructSetData($pCopyData, 1, Asc("C") + 256 * Asc("D")) DllStructSetData($pCopyData, 2, DllStructGetSize($pCDcom)) DllStructSetData($pCopyData, 3, DllStructGetPtr($pCDcom)) DllCall("user32.dll", "int", "SendMessageW", "hwnd", $hTC, "int", $WM_COPYDATA, "wparam", $hWndPar, "lparam", DllStructGetPtr($pCopyData)) EndFunc ;==>_TC_cd_command Func _TC_cm_command($Command) DllCall("user32.dll", "int", "PostMessage", "hwnd", $hTC, "int", $WM_USER + 51, "wparam", $Command, "lparam", 0) EndFunc ;==>_TC_cm_command |