1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

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

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

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

    Sandrix Гость

    Репутация:
    0
    привет :blink:

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

    vital Больной Компом Детектед

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

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

    vital Больной Компом Детектед

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

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

    zubr Гость

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

    Sandrix Гость

    Репутация:
    0
    доброго времени суток :)

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

    zubr

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

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

    zubr Гость

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

    Sandrix Гость

    Репутация:
    0
    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 Гость

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

    Sandrix Гость

    Репутация:
    0
    Для: 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 Гость

    Репутация:
    0
    Может способ и идиотский, но предложу.

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

    Sandrix Гость

    Репутация:
    0
    Для: Peter123

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

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

    Sandrix Гость

    Репутация:
    0
    net? ne kto? :o
     
  13. Sandrix

    Sandrix Гость

    Репутация:
    0
    вот тут накопал пару ф-ий
    FindNextChangeNotification
    FMExtensionProc


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

    Sandrix Гость

    Репутация:
    0
    nu spasibo za "pomosh"
     
Загрузка...
Статус темы:
Закрыта.

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