Как узнать путь открытого окна?

Тема в разделе "Delphi - Система", создана пользователем Sandrix, 15 сен 2006.

Статус темы:
Закрыта.
  1. Sandrix

    Sandrix Гость

    привет :blink:

    сори за вторжение но очень нужна помощь.
    надо узнать путь открытого окна explorer–а, точнее путь к папке которая открыта в данный момент. я выяснил что для этого используется библиотека Active Accessibility но дальше не как... может статья есть?(я не нашел) или еще что не будь? 2 месяца искал. HELP PLS ;)
     
  2. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.470
    Симпатии:
    27
    ух ты.. Я вижу дво способа но оба весьма идиотски и сложны..

    Адля чего такое понадобилось, возможно есть способ обойтись без этого?
     
  3. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.470
    Симпатии:
    27
    в общем виде...
    нуна найти хендл експлорера
    зная хендл плорера найти EDIT (используя findwindowex)
    в котором показывается текущий путь(тот который чуть ниже панели с кнопками)
    и потом Sendmessage с WM_GETTEXT на хендл EDIT'a..

    пс.
    ну и глупость я наверно написал..
     
  4. zubr

    zubr Гость

    Более универсальный способ - это перехват функции ZwCreateFile, таким образом можно определить путь к открывающемуся файлу, а не только папки, любой программой, а не только explorer.
    Что касается explorer, то тут можно через шеллекстеншион, в примерах к Delphi (по крайней мере до Delphi7) есть пример ...Demos\ActiveX\ShellExt
     
  5. Sandrix

    Sandrix Гость

    доброго времени суток :)

    vital
    адрес бар искать не надо. там не всегда полный путь виден :angry: зависит от установок пользователя.

    zubr

    ZwCreateFile тож нелзя because:
    мнеб надо узнать какой файл под курсором находится... метод пока Что такой:
    1. узнаю текст под курсором. (сделал)
    2. узнаю находится ли под курсором System32 ListView(or FolderView), если да, то текст под курсором это имя файла. (сделал)
    3. дальше нужен фолдер а то файлов с таким именем может быть 8969869... вот тут то и проблема... если какой то другой метод есть - буду рад выслушать :)

    p.s. sorry for my bad Russian.
     
  6. zubr

    zubr Гость

    Ну так вы же будете знать какой последний каталог был открыт экземпляром explorer, просто запоминайте каталоги для каждого открытого экземпляра (по хендлу окна), а затем проверяйте есть ли файл под курсором для активного экземпляра explorer в данном каталоге.
     
  7. Sandrix

    Sandrix Гость

    otkuda ja budu eto znat'? :) mojet ja ne ponel 4to ne bud'? ob'esnite pojaluista. :) kak uznat kakoi folder otkrilsa poslednim? a esli user v tomje okne pereidet na drugoi folder? ili kakajata programma eto sdelaet? ili on v ruchnuju zapishet adress foldera v adress bar? :angry:
     
  8. zubr

    zubr Гость

    Можно даже с ZwCreateFile не заморачиваться, как я уже писал в посте выше, можно использовать шеллекстеншион, пример есть в Delphi. Смысл в том, что когда юзер открывает каталог, срабатывает хук, в обработчике которого можно определить путь к каталогу.
    Последовательность действий такова:
    1. Как только сработал хук, то есть юзер в эксплорере открыл какой то каталог, программа определяет хендл экземпляра эксплорера (GetForegroundWindow) и путь к каталогу.
    2. Запоминает данные по хендлу и пути в массиве или списке, естественно проверив на наличие хендла в списке.
    3. При наведении курсора на какой нибудь файл в активном окне эксплорера сопостовляем хендл окна с путем к каталогу (прокрутив наш список), проверяем есть ли файл в данном каталоге.
    4. Отслеживаем через хук закрытия окон - если закрылось наше окно, которое в списке - удаляем данные по нему из списка.
     
  9. Sandrix

    Sandrix Гость

    Для: zubr

    genialno, i prosto :) ogromneshee spasibo za takoi vrazumitel'nij otvet :( paidu razbiratsa..

    p.s. ne zakrivaite ety temy, mojet ya ne razberus vchemto :)
     
  10. Peter123

    Peter123 Гость

    Может способ и идиотский, но предложу.

    А если воспользоваться Drag'n'Drop? Послать нажатие левой кнопой, изменить координаты курсора на свое окно(может быть размером в пиксел), отпустить мышу. По идее, Експлорер должен отдать полный путь файла сам.
    Не судите строго. :)
     
  11. Sandrix

    Sandrix Гость

    Для: Peter123

    метод наверно будет работать... но он сам по себе не универсален(в смысле что надо следить за координатами окна explorer–а) и очень медленный :)

    p.s. извините конечно за наглость... но в том примере сидит ком object, который я не как не смог присобачить к моему проекту :) и я не понял как получать этот хук с путем к фолдеру :( ну узнал я все хэндлы окон эксплорера а путь не как... может подкинте example кода? :( знаю это уже слишком но не как не выходит :ph34r:
     
  12. Sandrix

    Sandrix Гость

    net? ne kto? :eek:
     
  13. Sandrix

    Sandrix Гость

    вот тут накопал пару ф-ий
    FindNextChangeNotification
    FMExtensionProc


    может в них есть толк какой-нибудь? ну помогитеже :) разве вам не интересно? :)
     
  14. Sandrix

    Sandrix Гость

    nu spasibo za "pomosh"
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей