OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 11:49

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




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
СообщениеДобавлено: Суббота, 09 Январь, 2021 17:28 

Зарегистрирован: Воскресенье, 06 Август, 2017 19:33
Сообщения: 79
Меня интересует, как можно сделать запуск процедуры в ответ на событие ОС, например на подключение/отключение флешки. И вообще: можно ли как-нибудь отлавливать сообщения ОС подобно программе Microsoft Spy++, или как при помощи процедуры WinProc из Visual Basic.NET?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 09 Январь, 2021 17:40 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
Вы можете объявить процедуру P:
Код:
MODULE M;
  IMPORT SYSTEM;
  PROCEDURE [callback] P (...);

И после этого передать ее в Windows как callback-процедуру. Windows, когда системное событие наступит, ее вызовет.

В качестве примера см. HostWindows.DocWinHandler - это реализованная в ББ обычная оконная процедура WinApi. Вместо [callback] она отмечена [2], это одно и то же. [callback] и [2] - это т.н. sysflags, они доступны только если в ваш модуль импортирует SYSTEM. Подробнее см. Platform Specific Issues в справке, или прямиком DevCPM.GetProcSysFlag.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 10 Январь, 2021 16:10 

Зарегистрирован: Воскресенье, 06 Август, 2017 19:33
Сообщения: 79
Цитата:
И после этого передать ее в Windows как callback-процедуру
Как это?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 11 Январь, 2021 00:51 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
Вот по вашей теме нашлось https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-registerdevicenotificationw и пример использования https://docs.microsoft.com/ru-ru/windows/win32/devio/registering-for-device-notification.

Т.е. вам нужно иметь winapi-Окно b зарегистрировать его, чтобы оно получало сообщения от системы о наступлении событий, в этом случае - какие-то события с усб. И будут прилетать эти сообщения в оконную процедуру.

Вы знаете, что такое оконная процедура, и как в целом ето работает? В ББ можно сделать такую процедуру, и получать любые уведомления от ОС.

********* ПРо Callback:
Вот например DialogBoxParamA, которая создает диалоговое окно из какого-то шаблона lpTemplateName, и прежде чем его показать вызывает функцию, адрес которой вы должны передать ей в параметре lpDialogFunc.
Код:
INT_PTR DialogBoxParamA(
  HINSTANCE hInstance,
  LPCSTR    lpTemplateName,
  HWND      hWndParent,
  DLGPROC   lpDialogFunc,
  LPARAM    dwInitParam
);

lpDialogFunc - это указатель на функцию, или ее адрес. Вы должны написать эту функцию, потом вызвать DialogBoxParamA, передав ей адрес своей функции; и тогда в нужный момент Windows вызовет вашу функцию.


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

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


Кто сейчас на конференции

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


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB