Страница: 1 |
Страница: 1 |
Вопрос: Отследить открытие папки.
Добавлено: 26.06.06 14:12
Автор вопроса: LeX | Web-сайт:
Мне нужно программно в vs.net 2005 отследить открытие/закрытие папки (любой). Допустим я на рабочем столе щелкаю мышкой по папке 2 раза и в это время в моей проге происходит какое-то событие.
ЗЫ. Это вообще возможно? Если да - подскажите в какую сторону копать.
Всем спасибо за внимание!
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #1
Добавлено: 01.07.06 02:57
Скорее всего надо будет сабклассить окна Explorer'а, либо писать какие-то Extension'ы для него, вобщем все на грани невозможного и в принципе невозможного.
Номер ответа: 2
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #2
Добавлено: 01.07.06 19:22
.net есть какой-то компонент, filesystemwatcher, посмотри, мож пригодится
Номер ответа: 3
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #3
Добавлено: 01.07.06 19:34
Нет, его функциональность недостаточна для этой задачи.
Номер ответа: 4
Автор ответа:
z-dan-z
Вопросов: 1
Ответов: 7
Профиль | | #4
Добавлено: 12.07.06 15:36
void __fastcall TDirWatch::Execute()
{
if(path=="xxx" Terminate();
while(!Terminated)
{
HANDLE hSubstDirChange= FindFirstChangeNotification(path.c_str(),false,FILE_NOTIFY_CHANGE_SIZE);
if(hSubstDirChange!=INVALID_HANDLE_VALUE)
{
while(!Terminated)
{
WaitForSingleObject(hSubstDirChange,INFINITE);
Synchronize(SayAboutChange);
FindNextChangeNotification(hSubstDirChange);
FindNextChangeNotification(hSubstDirChange);
}
FindCloseChangeNotification(hSubstDirChange);
}
else
{
 WORD er=GetLastError();
char buf[256];
er=FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM,//0,// DWORD dwFlags, // source and processing options
NULL,// LPCVOID lpSource, // pointer to message source
er,// DWORD dwMessageId, // requested message identifier
0,// DWORD dwLanguageId, // language identifier for requested message
buf,// LPTSTR lpBuffer, // pointer to message buffer
255,// DWORD nSize, // maximum size of message buffer
NULL// va_list *Arguments // address of array of message inserts
ShowMessage("Ошибка потока "+path+":\n"+AnsiString(buf));
}
}
Terminate();
}
извини, что на C , на Basic-ке пока не умею
этот код позволяет отследить изменение параметров файла в папке
Номер ответа: 5
Автор ответа:
AndreyMp
ICQ: 237822510
Вопросов: 28
Ответов: 1182
Профиль | | #5
Добавлено: 12.07.06 17:52
Возможно отслеживать изменения в папке, в ВБ6 я бы посмотрел в этом случае в сторону ФСО.
Set objFolder = objFSO.GetFolder("C:\Tmp"
List1.AddItem "Date created: " & objFolder.DateCreated
List1.AddItem "Date last accessed: " & objFolder.DateLastAccessed
List1.AddItem "Date last modified: " & objFolder.DateLastModified
List1.AddItem "Size: " & objFolder.Size
List1.AddItem "Type: " & objFolder.Type
Просто открытие и закрытие папки при которых в ней ничего не меняется я думаю ослеживать не интересно.
Номер ответа: 6
Автор ответа:
z-dan-z
Вопросов: 1
Ответов: 7
Профиль | | #6
Добавлено: 12.07.06 18:06
to AndrewMp
Мой вариант использования API функций позволяет делать это "на -лету" , а не по запросу
Номер ответа: 7
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #7
Добавлено: 12.07.06 18:14
отслеживать изменения можно и без FSO .. в НЕТ для это есть свои средства.. а вот именно с открытием папки.. вот тут уже сложности...
Номер ответа: 8
Автор ответа:
student-uni
Вопросов: 122
Ответов: 257
Профиль | | #8
Добавлено: 12.07.06 18:27
Есть класс во фрейм 2.0 позволяющий отследить изменения в папке. /На счёт открытия не знаю/