MVV

|
Posted: Thu Apr 22, 2010 13:03 Post subject: |
|
|
Уточню еще раз.
Если при нажатии клавиши Enter командная строка не пуста, то нажатие клавиши приводит к выполнению команды без смены текущей папки.
Если при нажатии клавиши Enter командная строка пуста, или же выполняется даблклик мышью по элементу файловой панели, то происходит изменение текущей папки без выполнения какой-либо команды и очистки командной строки.
Эти аспекты должны иметь место быть при работе с любыми файловыми панелями, будь то панели содержимого папки на диске, сетевой папки или папки плагина файловой системы. И их искажение я не считаю допустимым и в какой бы то ни было мере разумным.
Все что от тебя требуется - это при особом желании выполнить командную строку, которую ТК передаст тебе, вызывав функцию FsExecuteFile в момент нажатия юзером клавиши Enter или даблклике мышью по непустой командной строке. Извлекать текст командной строки при этом тебе абсолютно не нужно. Замечу, что в этом месте может играть роль то, что плагин не поддерживает Юникод, так как командная строка может содержать юникод-символы не из системной кодовой страницы. Также при выполнении команды не забывай, что текущая рабочая папка не определена.
Если тебе все-таки неймется, дескриптор командной строки ты можешь получить, если возьмешь GetParent() от дескриптора панели с текстом текущего пути, и в найденном окне найдешь TMyComboBox, в котором потом найдешь Edit (гарантированно тот самый, который нужен). Или же сразу встроишься в цикл поиска панели пути, где дескриптор родительского окна есть:
Code: | while (1) {
if (!(cmdpanel=FindWindowEx(hMainWnd, cmdpanel, "TMyPanel", L""))) break;
if ((cmdlbox=FindWindowEx(cmdpanel, 0, "TMyComboBox", L"")) || (cmdlbox=FindWindowEx(cmdpanel, 0, "TComboBox", L""))) {
HWND pathpanel=FindWindowEx(cmdpanel, 0, "TMyPanel", 0);
int k=GetWindowText(pathpanel, buf, TSIZE(buf));
if (k&&buf[k-1]=='>') {
stpath=pathpanel;
cmdline=FindWindowEx(cmdlbox, 0, "Edit", 0);
break;
}
}
}
|
(переменная cmdlbox - локальная, будет содержать дескриптор комбобокса с командной строкой, который в ТК 7.04a и 7.50a имеет разные классы - здесь ищутся оба; переменная cmdline - глобальная, получит дескриптор окна командной строки) _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|