Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Отлавливание события открытия папки в Windows


Автор: KillerrrK 24.2.2010, 20:26
Ребят помогите плиз!!! Как отловить событие открытия папки в Win? Или хотябы как оно называется и откуда вылазит? Искал по этой теме в нете но ничего не нашел полезного... Зарание спасиб...

Автор: diadiavova 24.2.2010, 20:55
Думаю что никак. Если как-то и можно то через WinAPI, да и то сомневаюсь. Открытие папки - это по сути дела открытие окна проводника и ничего больше.

Автор: Pilger 24.2.2010, 21:15
Я не знаю, есть ли средства, которые могут в этом помочь (на памяти только что то с отлавливанием открытия или изменения файлов всплывает откуда то), но со своими текущими относительно небольшими знаниями вижу только один вариант^^. Это просматривать все открытые окна, читать заголовок или что то внутри окна и тем самым обнаруживать открытое окно в проводнике, которое указывает на нужную папку. Ничего попроще предложить не могу^^. Это на случай, если других вариантов не найдется.

Автор: KillerrrK 25.2.2010, 14:46
Цитата

Думаю что никак. Если как-то и можно то через WinAPI, да и то сомневаюсь. Открытие папки - это по сути дела открытие окна проводника и ничего больше.


diadiavova но ведь когда открывается окно проводника то должно и соответственное событие возникать! А значит его поймать можно. Или нет?

Автор: diadiavova 25.2.2010, 15:05
Цитата(KillerrrK @  25.2.2010,  14:46 Найти цитируемый пост)
diadiavova но ведь когда открывается окно проводника то должно и соответственное событие возникать

Окно проводника - это событие проводника, а не твоей программы. На счёт возможности сделать это через винапи я просто не в курсе, но у меня есть сомнения по поводу возможности доступа к событиям проводника, хотя ничего не утверждаю.

Автор: KillerrrK 25.2.2010, 15:15
То есть из своей проги я не могу не чъи события обрабатавать? Только через WinApi? А WinAPI я так понимаю без ассемблера не взять... Или в Бэйсике есть для что нибудь для этого? Библиотеки там...

Автор: diadiavova 25.2.2010, 15:20
Цитата(KillerrrK @  25.2.2010,  15:15 Найти цитируемый пост)
А WinAPI я так понимаю без ассемблера не взять... Или в Бэйсике есть для что нибудь для этого?

Это то что есть в бейсике
http://msdn.microsoft.com/ru-ru/library/4zey12w5.aspx
Или более общий вариант(для всех языков)
http://msdn.microsoft.com/ru-ru/library/system.runtime.interopservices.dllimportattribute.aspx

Автор: KillerrrK 25.2.2010, 15:37
Спасибо diadiavova! smile  Гляну!

Автор: Pilger 25.2.2010, 16:24
У API есть функции по нахождению любых окон и дочерних окон (по названию и стилю окна). Вот ты можешь искать окно с нужным тебе текстом (например название папки), затем проверять ComboBox и читать в нем текст и если он равен пути определенному, убивать (к примеру =D ) это окно^^. Кстати, как я уже на форуме неоднократно писал, есть программки, где можно посмотреть любое окно виндоуса, отправлять в это окно любые сообщения, тестировать и делать с ним всё что душе угодно. Например InqSoft Window Scanner. Удобная программа. Там и можешь посмотреть из чего состоит проводник и как в нем дойти до ComboBox'а.

Автор: KillerrrK 25.2.2010, 16:50
Спасибо Pilger. А можеш сказать как функция называется?

Автор: Pilger 25.2.2010, 16:55
Я тут на форуме уже писал пару раз, щас найду...

http://forum.vingrad.ru/forum/topic-219263/kw-listbox.html
http://forum.vingrad.ru/forum/topic-222145/kw-%D1%83%D0%BF%D1%80%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BE%D0%BA%D0%BD%D0%B0%D0%BC%D0%B8.html

вот пара тем... там видно примерно как можно. Еще надо иногда переходить не на дочернее окно, а на соседнее. Для этого тоже есть функции определенные. Переход prev и next. Находишь окно, потом по порядку находишь соседние и дочерние окна, пока не дойдешь до ComboBox'а. Потом его дочернее окно будет содержать как раз текст открытой директории.

Автор: KillerrrK 25.2.2010, 17:06
Спасибо Pilger!  smile

Автор: Pilger 25.2.2010, 17:16
Код

    Private Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As Integer, ByVal wFlag As Integer) As Integer


Откопал свои старые проекты  smile . Чё творил...

Автор: KillerrrK 25.2.2010, 17:33
Слушай Pilger, ты на одном из форумов писал коды:

dim Window as integer = FindWindow(vbnullstring, "имя окна") 'Находим окно.

Переменная получает цифры. Что это за цифры можешь обьяснить плиз?

Автор: KillerrrK 25.2.2010, 18:36
Уже не надо. Тупой вопрос был... Разобрался...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)