Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как отследить обращение к файлу? Узнать что файл начали считывать 
V
    Опции темы
Bitter
Дата 14.12.2009, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: нет
Всего: 27



Есть проигрыватель, который по списку играет видеофайлы. Все они без звука, по этому было решено на фоне включить винамп с подборкой музыки. Но один видео файл со звуком, а именно - поздравление с новым годом. Так вот я хочу написать прогу, которая уменьшает звук в винампе как только начал проигрываться этот файл. 

Как уменьшить звук - понятно, а как определить, что проигрыватель обратился к нужному мне видео?
Спасибо
PM MAIL ICQ Skype   Вверх
Демо
Дата 14.12.2009, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50





--------------------
    
PM MAIL ICQ Skype   Вверх
Bitter
Дата 14.12.2009, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: нет
Всего: 27



Что-то не получается. Получается отслеживать изменение имени и всего остального, а вот получение доступа нет :( Ставлю флаг FILE_NOTIFY_CHANGE_LAST_ACCESS, но ничего не происходит. 

Код нашел в инете, везде одинаковый. Вот он:

Код

...
Filter =  FILE_NOTIFY_CHANGE_FILE_NAME or
          FILE_NOTIFY_CHANGE_DIR_NAME or
          FILE_NOTIFY_CHANGE_ATTRIBUTES or
          FILE_NOTIFY_CHANGE_LAST_ACCESS or
          FILE_NOTIFY_CHANGE_SIZE or
          FILE_NOTIFY_CHANGE_CREATION or
          FILE_NOTIFY_CHANGE_SECURITY;

...

procedure WorkThread(LV : TListView);stdcall;
const BUF_SIZE = 2048;
var
 hDir : THandle;
 lpBuf : Pointer;
 Ptr   : Pointer;
 cbReturn : Cardinal;
 FileName : PWideChar;
 Item : TListItem;
 sTime : _SYSTEMTIME;
 aaa:String;

begin
 hDir := CreateFile ('D:\Projects\',GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE
   or FILE_SHARE_DELETE,nil,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,0);

 if hDir = INVALID_HANDLE_VALUE  then begin ShowMessage(SysErrorMessage(GetLastError)); exit; end;

 GetMem(lpBuf,BUF_SIZE);

 repeat
  ZeroMemory(lpBuf,BUF_SIZE);
  if not ReadDirectoryChangesW(hDir,lpBuf,BUF_SIZE,true,Filter ,@cbReturn,nil,nil)   then Break;

  Ptr:=lpBuf;
  repeat
   Item := Form1.ListView1.Items.Add;
   GetMem(FileName,PFileNotifyInformation(Ptr).FileNameLength+2);
   ZeroMemory(FileName,PFileNotifyInformation(Ptr).FileNameLength+2);
   lstrcpynW(FileName,PFileNotifyInformation(Ptr).FileName, PFileNotifyInformation(Ptr).FileNameLength div 2+1);
   Item.Caption:='D:\Projects\'+FileName;
   FreeMem(FileName);
   case PFileNotifyInformation(Ptr).Action of
    FILE_ACTION_ADDED    : aaa:='создан ';
    FILE_ACTION_REMOVED  : aaa:='удален ';
    FILE_ACTION_MODIFIED : aaa:='изменен ';
    FILE_ACTION_RENAMED_OLD_NAME : aaa:=' с ';
    FILE_ACTION_RENAMED_NEW_NAME : aaa:=' на ';
    else aaa:='получили доступ? ';
   end;
   Item.SubItems.Add(aaa);
   GetLocalTime(sTime);
   with sTime do
    Item.SubItems.Add(Format('%.2d:%.2d:%.2d',[wHour,wMinute,wSecond])); // 13:54:20
   if PFileNotifyInformation(Ptr).NextEntryOffset=0  then Break
   else Inc(Cardinal(Ptr),PFileNotifyInformation(Ptr).NextEntryOffset);
  until false;
 until false;

 FreeMem(lpBuf);
end;



Подскажите, а?
PM MAIL ICQ Skype   Вверх
Bitter
Дата 15.12.2009, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: нет
Всего: 27



Есть еще мысли как отследить запуск файла проигрывателем? Ну каспер же как-то это делает!
PM MAIL ICQ Skype   Вверх
Демо
Дата 15.12.2009, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(Bitter @  15.12.2009,  18:14 Найти цитируемый пост)
Есть еще мысли как отследить запуск файла проигрывателем? Ну каспер же как-то это делает!


Вариант - перехватывать функцию CreateFile...


--------------------
    
PM MAIL ICQ Skype   Вверх
SlaUr
Дата 16.12.2009, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: 3
Всего: 5



Вот нашел пример

Это сообщение отредактировал(а) SlaUr - 16.12.2009, 09:34

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  _____________________.rar 15,42 Kb
PM MAIL   Вверх
Демо
Дата 16.12.2009, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



SlaUr, 

Это решение не той задачи.


--------------------
    
PM MAIL ICQ Skype   Вверх
Bitter
Дата 16.12.2009, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: нет
Всего: 27



метод SlaUr меня вот на что натолкнул. Когда я запускаю проигрыватель, он в заголовке окна содержит имя проигрываемого файла, таким образом можно узнать, что файл проигрывается, если найти окно этого проигрывателя и получить заголовок. 

Я получил список окон с помощью функции EnumWindows, а заголовок окна функцией GetWindowText. После чего если заголовок содержит название проигрывателя, я его отрезаю и остается имя файла.

Всем спасибо.
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0732 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.