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/ |