Подозреваю, что как-то через ключи реестра...
Но обширно погуглив, ответа так и не нашел.

Именно базовый адрес адрес LPT-порта, а не принтера по умолчанию.
Moderator: Shaos
paper wrote:why you not reading the parallel port-address from windows registry ?
Code: Select all
WIN98SE:
HKLM\System\CurrentControlSet\Services\Class\Ports\ (enumerate all ports on your PC)
and
HKLM\Enum (PortName, LogConfig, etc... of ports)
Code: Select all
HKLM\System\CurrentControlSet\Services\Class\Ports\0002 (LPT1 on board)
InfSection = "LptPort"
MatchingDeviceId = "*PNP0400"
HKLM\System\CurrentControlSet\Services\Class\Ports\0005 (LPT2 on PCI card)
InfSection = "LptPort"
MatchingDeviceId = "NMMFENUM\PCI9710_LPT"
Code: Select all
HKLM\Enum\ACPI\*PNP0400\0\LogConfig =
HKLM\Enum\NMMFENUM\PCI9710_LPT\68F000&PORT_0002\LogConfig =
Но WMI class похоже, что работает только начиная с Minimum supported client - Windows XP...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.
В Linux, как я прочитал роясь в поиске, этот вопрос решается более просто и имеетVituZz wrote:В Linux в процессе загрузки действия протоколируются...
Похоже, что именно так, а не иначе... решение вроде как нашел:Lavr wrote:Как программно узнать адрес LPT-порта в Windows-98, Windows XP, Windows 7?
Подозреваю, что как-то через ключи реестра...
Как я понял, для Win2k это работает, т.к. есть по ссылке пример. Осталось проверитьhan_malign wrote:Через HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Ports - находишь где описан Lpt и лезешь скажем в HKEY_LOCAL_MACHINE\Enum\BIOS\*PNP0400\00\LogConfig - вот тебе и порт.
З.Ы. Вообще все это делается через SetupAPI и CfgMgr32, но это надо довольно много ковыряться (выяснить GUID класса портов, проенумить все порты по классу, выбрать нужный, получить Device Node, по DevNode прочитать загруженную логическую конфигурацию)
Это я так думаю, что "не очень хорошо", вот тут пишут, что Виндавоз XP счтает несколько иначе...Lavr wrote:чтобы убедиться в наличии порта, по этим адресам записывают число, после чего
считывают его и если записанное = считанному, то есть некая уверенность в наличии
порта.
В принципе - не очень хорошо, если на порте висит принтер...
eMitya wrote:Оказывается, XP следит за устройствами, периодически записывая в порт какую-то гадость. Что, конечно, нарушало все наши протоколы взаимодействия. Сие мерзопакостное поведение XP отключается при помощи задания соответствующего параметра в реестре
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Parport\Parameters
Если нет, то нужно прописать DisableWarmPoll REG_DWORD = 1
Насколько я всё это прочитал и по своему опыту работы с портами, тут дело даже не в Виндe Хрр,VituZz wrote:А как насчёт прав на запись в порт? Винда Хрр позволит это простому пользователю?
Что-то мне в первый раз нигде не попался довольно простой пример, как искать порты в Венде.Lavr wrote:Как получить адрес LPT порта в Win2k.
Решение довольно громоздкое - сугубо в стиле М$ - сделать простые вещи сложными...