OberonCore
https://forum.oberoncore.ru/

Реакция на сообщения (транзакции) ОС, на события
https://forum.oberoncore.ru/viewtopic.php?f=2&t=6711
Страница 1 из 1

Автор:  Александр К [ Суббота, 09 Январь, 2021 17:28 ]
Заголовок сообщения:  Реакция на сообщения (транзакции) ОС, на события

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

Автор:  adimetrius [ Суббота, 09 Январь, 2021 17:40 ]
Заголовок сообщения:  Re: Реакция на сообщения (транзакции) ОС, на события

Вы можете объявить процедуру 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 ]
Заголовок сообщения:  Re: Реакция на сообщения (транзакции) ОС, на события

Цитата:
И после этого передать ее в Windows как callback-процедуру
Как это?

Автор:  adimetrius [ Понедельник, 11 Январь, 2021 00:51 ]
Заголовок сообщения:  Re: Реакция на сообщения (транзакции) ОС, на события

Вот по вашей теме нашлось 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 вызовет вашу функцию.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/