Велика бібліотека української літератури
» » » Ещё раз о прямом доступе к аппаратуре

Рефераты по информатике Однажды мой знакомый попросил написать ему простую программу — «сторожевой пёс». Всё, что нужно делать — это отловить момент размыкания или замыкания

Ещё раз о прямом доступе к аппаратуре

Однажды мой знакомый попросил написать ему простую программу — «сторожевой пёс». Всё, что нужно делать — это отловить момент размыкания или замыкания внешнего контакта и при наступлении такого события запустить другую программу. Работать программа должна под Windows XP. Задача выглядела элементарной. Единственное, что не хотелось делать — аппаратную часть. Т.е. лучше всего было бы найти такое решение, при котором почти ничего не нужно было бы паять.
Достаточно быстро выяснилось, что проще всего для такой цели использовать опрос состояний LPT- или COM-портов. Тут и начинается самое интересное.
LPT
Для реализации «сторожевого пса» на LPT-порту можно использовать периодический опрос состояния некоторых его контактов. Можно просто выявлять состояния линий SELECTED (контакт 13), BUSY (контакт 11) и PAPER EMPTY (контакт 12). Достаточно замыкать/размыкать выбранный контакт с «землей» (контакты 18–25). Я выбрал использование BUSY — замыкал контакты 11 и 23. Итак, аппаратная часть получалась элементарной, теперь нужно было как-то достучаться до выбранного контакта с программной стороны. Тут-то и встретилась первая сложность — легальных способов прямого доступа к портам в линейке Windows NT нет. Использовать примочки типа gwio.sys, разрешающие прямой доступ к аппаратуре, очень не хотелось. Работа с портом как с файлом в данном случае не подходит, т.к. нужно не данные читать, а опрашивать состояния. Тем не менее, после длительного изучения MSDN, легальный доступ к некоторым линиям порта был обнаружен! Способ этот — доступ к порту через функцию DeviceIoControl(…, IOCTL_PAR_QUERY_INFORMATION, …). Тут обнаружилась вторая сложность — отсутствие нужных заголовочных файлов для Delphi. Пришлось самостоятельно портировать ntddpar.h из DDK. Портированный файл получил название JwaNtDdPar.pas и был любезно добавлен Marcel van Brakel в JEDI Windows API Library.
Небольшой пример демонстрирует итоговый код. Delphi 7.
Пример кода
uses
SysUtils, JwaWinType, JwaWinNT, JwaWinBase, JwaNtDdPar;
{$WARN SYMBOL_PLATFORM OFF}
function GetLptStatus: Boolean;
var
eFileHandle: THandle;
eInfo: TParQueryInformation;
eBytesReturned: DWORD;
begin
// откроемпорт
eFileHandle := CreateFile('LPT1', GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
Win32Check(eFileHandle
Хотите создать по-настоящему уникальный и прибыльный интернет-магазин, который будет привлекать клиентов?
Создание интернет-магазина поможет вам стремительно развивать свой бизнес, увеличить количество продаж, а самое главное, получать высокую прибыль!
Оценок: 377 (средняя 5 из 5)
© 2014 - 2017 BigLib.info — это сокращение от Big Library (большая библиотека).
Целью создания этого сайта было сделать литературу доступной для всех, кто желает ее читать.
Использование любых материалов сайта без согласования с администрацией запрещено.
Обратная связь