purebasic.info

PureBasic forum
Текущее время: Вт дек 11, 2018 12:20 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
СообщениеДобавлено: Пн май 01, 2017 10:46 am 
Не в сети
ассистент

Зарегистрирован: Вс мар 12, 2017 2:53 pm
Сообщений: 13
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Подскажите пожалуйста, какими методами можно получить содержимое уведомлений других программ, которые висят в трее, для своего приложения. То есть, пришло уведомление, а приложение должно показывать, что в нем находится, или хотя бы просто - пришло уведомление от такой то(нужной) программы. Если не сложно приведите примеры кода.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт май 02, 2017 1:40 pm 
Не в сети
профессор

Зарегистрирован: Пн янв 03, 2011 4:27 pm
Сообщений: 412
Благодарил (а): 5 раз.
Поблагодарили: 17 раз.
Пункты репутации: 0
Zar, при помощи перехвата нужной функций, для каждого приложения придется писать свой перехватчик.
Из нужного, на форуме поищи Hook(хук).


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср май 03, 2017 5:15 pm 
Не в сети
ассистент

Зарегистрирован: Вс мар 12, 2017 2:53 pm
Сообщений: 13
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пошел другим способом. Нашел папку программы в которой изменяется файл, сразу при получении уведомления. На форуме нашел пример кода который контролирует все изменения в папке. Только в папке изменений слишком много. Вопрос такой , подскажите такой хук, который следит за выбранным файлом а не папкой.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср май 03, 2017 5:33 pm 
Не в сети
профессор

Зарегистрирован: Сб фев 06, 2016 6:18 pm
Сообщений: 272
Благодарил (а): 14 раз.
Поблагодарили: 32 раз.
Пункты репутации: 0
В том примере путь к файлу не указывается, только к папке?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср май 03, 2017 6:36 pm 
Не в сети
ассистент

Зарегистрирован: Вс мар 12, 2017 2:53 pm
Сообщений: 13
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Если к файлу не пашет

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#FILE_NOTIFY_CHANGE_ALL = $17F
#FILE_SHARE_DELETE = 4
Structure FILE_NOTIFY_INFORMATION
  NextEntryOffset.l
  Action.l
  FileNameLength.l
  Filename.s{255}
EndStructure
Prototype.i _ReadDirectoryChangesW(hDirectory.l, *lpBuffer,nBufferLength.l,bWatchSubtree.b,dwNotifyFilter.l,*lpBytesReturned,*lpOverlapped.OVERLAPPED,lpCompletionRoutine)
Global ReadDirectoryChangesW._ReadDirectoryChangesW
*kernel32dll = OpenLibrary(#PB_Any, "kernel32.dll")
If *kernel32dll
  ReadDirectoryChangesW = GetFunction(*kernel32dll, "ReadDirectoryChangesW")
  CloseLibrary(*kernel32dll)
EndIf
If ReadDirectoryChangesW = 0
  End
EndIf
 
Procedure DirAddeds(DirectoryName.s, NotifyFilter.l = #FILE_NOTIFY_CHANGE_ALL)
  Protected buffer.FILE_NOTIFY_INFORMATION, ovlp.OVERLAPPED
  Protected FileAction_Filename.s
  hDir = CreateFile_(DirectoryName, #FILE_LIST_DIRECTORY, #FILE_SHARE_READ | #FILE_SHARE_WRITE | #FILE_SHARE_DELETE, #Null, #OPEN_EXISTING, #FILE_FLAG_BACKUP_SEMANTICS, #Null)
  If hDir
    While ReadDirectoryChangesW(hDir, @buffer, SizeOf(FILE_NOTIFY_INFORMATION), #True, NotifyFilter, bytesRead, ovlp, 0)
      CompilerSelect #PB_Compiler_Unicode
        CompilerCase #True
          FileAction_Filename = buffer\Filename
        CompilerDefault
          FileAction_Filename = PeekS(@buffer\Filename, -1, #PB_Unicode)
      CompilerEndSelect
      Select buffer\Action
        Case 0
        Default
          Debug DirectoryName.s+FileAction_Filename
      EndSelect
    Wend
    CloseHandle_(hDir)
  EndIf
EndProcedure
 
; путь к папке
 
DirAddeds("C:\Users\")



Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср май 03, 2017 7:55 pm 
Не в сети
док

Зарегистрирован: Пн сен 27, 2010 10:30 am
Сообщений: 144
Откуда: Уренгой
Благодарил (а): 0 раз.
Поблагодарили: 10 раз.
Пункты репутации: 5
GetFileDate(Filename$,#PB_Date_Modified) не катит?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт май 04, 2017 1:06 am 
Не в сети
профессор

Зарегистрирован: Пн янв 03, 2011 4:27 pm
Сообщений: 412
Благодарил (а): 5 раз.
Поблагодарили: 17 раз.
Пункты репутации: 0
Цитата:
Нашел папку программы в которой изменяется файл
ну тебе КЭС, уже подсказал
Цитата:
подскажите такой хук, который следит за выбранным файлом а не папкой.
ну тебе КЭС, уже подсказал, и тебе хук не нужен, если ты знаешь файл.

P.S. почитай в интернете про HOOK API.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт май 05, 2017 8:30 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 18, 2009 3:41 am
Сообщений: 1126
Благодарил (а): 86 раз.
Поблагодарили: 11 раз.
Пункты репутации: 0
Zar писал(а):
....

функция для изменения директории отличная, юзай её.
чтобы отсеять лишнее, точно уже не помню, но поизучай в сторону флагов:
#FILE_NOTIFY_CHANGE_ALL = $17F
#FILE_SHARE_DELETE = 4
#FILE_LIST_DIRECTORY
#FILE_SHARE_READ
#FILE_SHARE_WRITE
#FILE_SHARE_DELETE


поищи, какие есть ещё, или может состав из этих сделать другой, оставить только тот который нужен.
ну и в целом, сколько бы инфы тебе не выдавала функция, ты же можешь обработать результат, использовать дальше только то, где, например, в пути имя файла совпадает с твоим именем файла, не глазками же это делать будешь а код за тебя :)


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB