программный редирект на файл
Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik
программный редирект на файл
Мож кто уже делал - как программно заставить тотал сфокусироваться на нужном мне файле в активной панели?
Это подойдет?
Код: Выделить всё
cm_LoadSelectionFromClipbotace
Написал скриптик на VBScript. Он использует TCWSHelper от Volniy.
Только есть небольшой трабл с текущей раскладкой. При включенной русской почему-то не работает. Сейчас уже нет времени отлаживать. Может Volniy поможет.
Написал скриптик на VBScript. Он использует TCWSHelper от Volniy.
Код: Выделить всё
'==================================
' Активизировать 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Спасибо за скриптик. Правда его я так и не использовал. Но, он меня навёл на одну интересную мыслю, которую я и воплотил 
Кратко (убраны некоторые проверки окон) на сях получилось так:
Первая часть кода. (да, пришлось разделить на две части, т.к. тоталу требуется время на реагирование комманды смены каталога. Слитно две части не проходят никак). Итак, имеем:
HWND hWndTotal - Главное окно тотала
CString stPath - Путь без имени файла
CString stFile - Имя файла
Вторая часть кода в обработке таймера:
Вуаля...Тотал на нужном нам файле, причем текущая раскладка клавы абсолютно не канает 
Кратко (убраны некоторые проверки окон) на сях получилось так:
Первая часть кода. (да, пришлось разделить на две части, т.к. тоталу требуется время на реагирование комманды смены каталога. Слитно две части не проходят никак). Итак, имеем:
HWND hWndTotal - Главное окно тотала
CString stPath - Путь без имени файла
CString stFile - Имя файла
Код: Выделить всё
// Поднимаем окно тотала, если оно было минимизированно...
::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);