программный редирект на файл
Добавлено: Вт окт 04, 2005 23:59
Мож кто уже делал - как программно заставить тотал сфокусироваться на нужном мне файле в активной панели?
Форум поддержки пользователей Total Commander
https://forum.wincmd.ru/
Код: Выделить всё
cm_LoadSelectionFromClipКод: Выделить всё
'==================================
' Активизировать TC и перейти к указанному файлу
' В параметрах вызова скрипта должен быть указан полный путь файла, включая имя.
'==================================
Dim MyFile, TCS
Set MyFile = CreateObject("Scripting.FileSystemObject").GetFile(WScript.Arguments(0))
Set TCS = CreateObject("TCScript.Helper")
Dim FileName, FilePath
FileName = MyFile.Name
FilePath = MyFile.ParentFolder
TCS.LockTC True
TCS.SendCommand(4003)
TCS.SendKeystroke("cd " & FilePath & "{Enter}")
TCS.SendCommand(2915)
TCS.SendKeystroke(FileName & "{Esc}")
TCS.LockTC False
Set TCS = Nothing
Set MyFile = Nothing
Wscript.QuitКод: Выделить всё
// Поднимаем окно тотала, если оно было минимизированно...
::SendMessage( hWndTotal, WM_USER + 51, 2016, 0);
// Активируем левую панель
::SendMessage( hWndTotal, WM_USER + 51, 4001, 0);
// Ставим фокус на коммандную строку
::SendMessage( hWndTotal, WM_USER + 51, 4003, 0);
// Прописываем нужный нам путь в коммандную строку тотала
::SetWindowText( ::GetFocus(), CString( "cd ") + stPath); // Тут канечна желательно отследить, что фокус у нужного нам окна
// Софт-нажатие enter
::keybd_event( VK_RETURN, 0, KEYEVENTF_EXTENDEDKEY, 0);
::keybd_event( VK_RETURN, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
// Далее у меня установка себе таймера WM_TIMER через 0 мс. Т.к. это сообщение самое низкое по приоритету, очередь выборки у тотала успеет в любом случае разгребстись...
Код: Выделить всё
// Включаем панель быстрого поиска
::SendMessage( hWndTotal, WM_USER + 51, 2915, 0);
// Тут кстати нада учитывать, что она работает по ON/OFF и после выдачи пред. комманды она на самом деле может выйти на OFF-состояние
// Имитируем набор символов в быстром поиске
LPCTSTR szFile = stFile;
HWND hWndCmdLine = ::GetFocus();
while( *szFile) ::SendMessage( hWndCmdLine, WM_CHAR, *szFile++, 0);
// Софт-нажатие escape
::keybd_event( VK_ESCAPE, 0, KEYEVENTF_EXTENDEDKEY, 0);
::keybd_event( VK_ESCAPE, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);