Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

программный редирект на файл

 
Post new topic   Reply to topic    Total Commander Forum Index -> Написание плагинов для Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
botace



Joined: 29 Sep 2005
Posts: 10
Location: Moscow

Post (Separately) Posted: Tue Oct 04, 2005 23:59    Post subject: программный редирект на файл Reply with quote

Мож кто уже делал - как программно заставить тотал сфокусироваться на нужном мне файле в активной панели?
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Wed Oct 05, 2005 00:07    Post subject: Reply with quote

Это подойдет?
Code:
cm_LoadSelectionFromClip
Back to top
View user's profile Send private message
botace



Joined: 29 Sep 2005
Posts: 10
Location: Moscow

Post (Separately) Posted: Wed Oct 05, 2005 00:18    Post subject: Reply with quote

Немного не то. Это только выделяет файл, причем, если уже открыта нужная директория...
У меня есть полный путь к нужному файлу, нужно чтоб в активной панели открылась директория с этим файлом, и курсор встал на этот файл.
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Wed Oct 05, 2005 11:22    Post subject: Reply with quote

botace
Написал скриптик на VBScript. Он использует TCWSHelper от Volniy.
Code:
'==================================
' Активизировать 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

Только есть небольшой трабл с текущей раскладкой. При включенной русской почему-то не работает. Сейчас уже нет времени отлаживать. Может Volniy поможет.
Back to top
View user's profile Send private message
botace



Joined: 29 Sep 2005
Posts: 10
Location: Moscow

Post (Separately) Posted: Wed Oct 05, 2005 22:40    Post subject: Reply with quote

Спасибо за скриптик. Правда его я так и не использовал. Но, он меня навёл на одну интересную мыслю, которую я и воплотил Smile
Кратко (убраны некоторые проверки окон) на сях получилось так:

Первая часть кода. (да, пришлось разделить на две части, т.к. тоталу требуется время на реагирование комманды смены каталога. Слитно две части не проходят никак). Итак, имеем:
HWND hWndTotal - Главное окно тотала
CString stPath - Путь без имени файла
CString stFile - Имя файла

Code:

// Поднимаем окно тотала, если оно было минимизированно...
::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 мс. Т.к. это сообщение самое низкое по приоритету, очередь выборки у тотала успеет в любом случае разгребстись...


Вторая часть кода в обработке таймера:
Code:

// Включаем панель быстрого поиска
::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);


Вуаля...Тотал на нужном нам файле, причем текущая раскладка клавы абсолютно не канает Smile
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Написание плагинов для Total Commander All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group