Как узнать путь к папке, которая активна в данный момент времени?
#1
Отправлено 18.01.2007, 01:08:52
Я хочу написать прогу, которая по нажатию какой-нибудь комбинации клавиш, создавала "новую папку" в текущей директории (не той, в которой находится сама программа, а той, которая активна в данный момент времени). А вот как можно узнать путь этой текущей (активной) папке я не знаю. Подскажите пожалуйста.
___________
Допустим у меня сейчас открыта папка C:\Test, я нажимаю комбинацию клавиш, и в этой папке должна появиться "новая папка". Мне нужно определить путь "C:\Test", чтобы указать программе, что именно в ней должна создаваться новая папка.
PS: Папка окрывается в обычном проводнике Windows
#4
Отправлено 19.01.2007, 01:07:12
Ты хоть хорошо подумал? Нет в Windows понятия "текущая папка", это не DOS! У тебя могут быть открыты куча папок, и что тогда?
Я же написал, что тогда будет нужно узнать путь "активной папки", которая будет иметь фокус. (Допустим мы открыли 3 папки, на одну из них кликнули мышкой, она получила фокус, ей путь нужно узнать).
Если стоит в настройках "показывать полный путь в строке заголовка" то мона прочитать это из заголовка, активного окна проводника.
Вот, вот, как раз этого я и добиваюсь! Как это сделать, подскажите.
Я "пытался" кое что набросать :
var WindowName: Pchar; f, f1, t:hwnd; textLength: integer; begin если нажата определённая комбинация клавиш, то begin; f:= FindWindow('CabinetWClass', nil); f1:=FindWindowEx(f,0, nil, WindowName); textLength:= GetWindowTextLength(f1); GetWindowText(f1, WindowName, textLength ); ShowMessage(WindowName); end; end;
При выполнении этого кода, в окне ShowMessage выдаются "два кубика". А можно ли как-нибудь "конвертировать" WindowName из Pchar в обычный String, чтобы название окна нормально отображалось в ShowMessage? Или вообще переделать весь код? У кого какие идеи (с примером если не трудно)!
#7
Отправлено 19.01.2007, 15:52:12
Каким то образом можно узнать, какому процессу принадлежит это окно.
Каким то образом можно узнать Current Directory процесса. Я конечно не ручаюсь, но с большой вероятностью это и будет та папка, которая отображается.
Как конкретно сделать - ищите в MSDN-е.
#8
Отправлено 20.01.2007, 02:29:04
Да.А цель то какая? =) Просто сделай хоткей для создания новой папки? =)
Нет. Впрочем не в этом вопрос состоял.Да сдается мне цель тут вирь написать
Я её задействовал (см. код)Есть функция GetForegroundWindow, которая возвращает активное окно.
Не то что-то.Каким то образом можно узнать, какому процессу принадлежит это окно.
Каким то образом можно узнать Current Directory процесса. Я конечно не ручаюсь, но с большой вероятностью это и будет та папка, которая отображается.
var WindowName: Pchar; f, f1, t:hwnd; textLength: integer; begin если нажата определённая комбинация клавиш, то begin; f:= getForegroundWindow; f1:=FindWindowEx(f,0, nil, WindowName); textLength:= GetWindowTextLength(f1); GetWindowText(f1, WindowName, textLength ); Label1.Caption:=(WindowName); Label2.Caption:=(PChar(WindowName)); //на всякий случай Label3.Caption:=(PWideChar(WindowName)); //на всякий случай end; end;
Нужно устранить кракозябы, которые отображаются вместо нормального пути.
#9
Отправлено 21.01.2007, 04:03:28
Копай интерфейс IShellFolder, и будет тебе счастье. Там есть методы. Сходи на MSDN, да будет Гугл тебе в помощь).Я же написал, что тогда будет нужно узнать путь "активной папки", которая будет иметь фокус. (Допустим мы открыли 3 папки, на одну из них кликнули мышкой, она получила фокус, ей путь нужно узнать).
#10
Отправлено 21.01.2007, 04:21:09
GetForegroundWindow возвращает описатель окна, скорми его GetWindowText. И зачем вызывать FindWindow?
Хотя, если мне память не изменяет, всё это не будет работать. То есть, с другого процесса просто так не извлечь, смотри в MSDN и Рихтере.
Сообщение отредактировал TeXpert: 21.01.2007, 04:40:46
#11
Отправлено 21.01.2007, 04:44:31
А что гадать? Процесс этот -- Explorer.Каким то образом можно узнать, какому процессу принадлежит это окно.
Не будет.Каким то образом можно узнать Current Directory процесса. Я конечно не ручаюсь, но с большой вероятностью это и будет та папка, которая отображается.
#12
Отправлено 22.01.2007, 00:49:57
А потом, зачем мудришь лишними вызовами?
GetForegroundWindow возвращает описатель окна, скорми его GetWindowText. И зачем вызывать FindWindow?
Хотя, если мне память не изменяет, всё это не будет работать.
Всё правильно говорите, я немного сглупил.
Всё, наконец-то я нашел в инете примерчик и сделал всё как надо! Огромное спасибо всем кто принимал участие в дискуссии.
Количество пользователей, читающих эту тему: 1
пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0