|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
|
Page 1 of 1
|
[ 10 posts ] |
|
Как узнать адрес LPT-порта в windows
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Как программно узнать адрес LPT-порта в Windows-98, Windows XP, Windows 7?
Подозреваю, что как-то через ключи реестра...
Но обширно погуглив, ответа так и не нашел.
Именно базовый адрес адрес LPT-порта, а не принтера по умолчанию.
_________________ iLavr
|
03 Jan 2014 15:00 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я, честно говоря, знаю, где в реестре прописаны свойства LPT-портов на моей машине,
но с этим есть разночтения...
Вот, к примеру, совет на одном из зарубежных сайтов:
for sample on my PC with W98SE: Address of ports are:
In LogConfig are (device driver resource list) information of port-address.
Вся засада в том, что на моей машине в этих ключах прописаны вовсе не LPT-порты, а вот как
выяснить - по какому принципу заносятся данные о портах в ключи...
Впрочем, в Windows XP эти ключи вроде как и совсем другие.
_________________ iLavr
|
03 Jan 2014 17:32 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
На сайте М$ в ответ на похожий вопрос:" How to find I/O range for given LPT Port programatically?"
разводят очень густой туман...
| | | | Quote: These two WMI classes would be helpful: Win32_PortResource and Win32_ParallelPort, you can also find the C++ WMI samples in that category. The Win32_PortResource WMI class represents an I/O port on a computer system running Windows. The Win32_ParallelPort WMI class represents the properties of a parallel port on a computer system running Windows. | | | | |
Но WMI class похоже, что работает только начиная с Minimum supported client - Windows XP...
_________________ iLavr
|
03 Jan 2014 17:49 |
|
|
VituZz
God
Joined: 13 Nov 2010 04:06 Posts: 1345
|
В Linux в процессе загрузки действия протоколируются, после загрузки протокол можно посмотреть командой dmesg. Может, что-то наподобие можно сделать и в Windows?
Вот пример с моего компа. grep позволяет выбрать нужные строки по шаблону из вывода команды dmesg:
|
04 Jan 2014 09:03 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
В Linux, как я прочитал роясь в поиске, этот вопрос решается более просто и имеет
конкретное решение.
В принципе - вопрос советуют решать корректно примерно так:
Поскольку параллельные порты имеют известные адреса:
3BCh, 378h, 278h
то чтобы убедиться в наличии порта, по этим адресам записывают число, после чего
считывают его и если записанное = считанному, то есть некая уверенность в наличии
порта.
В принципе - не очень хорошо, если на порте висит принтер...
Но дело в том, что в ноутах сейчас этих портов нет. А есть только УСБ.
Поэтому LPT-порты эмулируются вот такими гаджетами:
Если повезёт при покупке, они могут эмулировать LPT-порт прямо на уровне регистров,
но вся неприятность в том, что по включению базовый адрес такого "LPT-порта" вовсе
не ложится в привычные 3BCh, 378h, 278h... ,
а устанавливается в верхние адреса портов, причем в разные.
Вот эту ситуацию я (и многие в сети, как я увидел) пытаюсь разрешить, поскольку
к новому ноутбуку я такую USB2LPT приблуду приобрел...
_________________ iLavr
|
04 Jan 2014 09:49 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Похоже, что именно так, а не иначе... решение вроде как нашел: Как получить адрес LPT порта в Win2k.Решение довольно громоздкое - сугубо в стиле М$ - сделать простые вещи сложными...
Как я понял, для Win2k это работает, т.к. есть по ссылке пример. Осталось проверить
этот рецепт для Windows XP, Windows 7...
_________________ iLavr
|
04 Jan 2014 10:20 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Это я так думаю, что "не очень хорошо", вот тут пишут, что Виндавоз XP счтает несколько иначе...
_________________ iLavr
|
04 Jan 2014 11:53 |
|
|
VituZz
God
Joined: 13 Nov 2010 04:06 Posts: 1345
|
А как насчёт прав на запись в порт? Винда Хрр позволит это простому пользователю?
|
04 Jan 2014 13:15 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Насколько я всё это прочитал и по своему опыту работы с портами, тут дело даже не в Виндe Хрр,
право на запись в порт регулируется на уровне процесора.
Но не всё так грустно!
Для управления портами из программы для Windows NT/XP используется драйвер inpout32.dll.
Сколь он коварный, что обходит все препоны ОС, можно прочитать здесь: How Inpout32.dll works ?
_________________ iLavr
|
04 Jan 2014 15:32 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Что-то мне в первый раз нигде не попался довольно простой пример, как искать порты в Венде.
А между тем у меня на жестком диске такой пример даже в двух вариантах имеется.
В обоих вариантах используется функция из библиотеки winspool.drv:
Function EnumPorts Lib "winspool.drv" Alias "EnumPortsA" (ByVal pName As String, ByVal Level As Long, _ ByVal lpbPorts As Long, ByVal cbBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long
Если кто столкнется с такой же проблемой, пример на VB есть вот здесь:
Получить список доступных портов
Под Вендой_98 похожий вариант программы у меня добросовестно " выкатил" все порты:
--------------
Здесь нет адресов портов, но по их именам теперь можно читать соответствующие ключи
реестра, поскольку теперь точно известно, сколько и каких LPT - портов есть в системе.
Я не проверял пока, как это работает под Вендой 7 - там у меня просто нет LPT и СОМ портов...
_________________ iLavr
|
04 Feb 2014 11:29 |
|
|
|
Page 1 of 1
|
[ 10 posts ] |
|
Who is online |
Users browsing this forum: No registered users and 73 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|