2010-07-24 20 views
2

Je travaille sur le projet de contrôle de certains appareils via le port lpt. J'utilise inpout32.dll pour obtenir un accès brut aux ports et je tente maintenant d'énumérer tous les ports LPT disponibles et d'obtenir leur plage d'E/S.Comment énumérer les ports LPT Windows et leur plage d'E/S?

Maintenant, je peux vérifier le gestionnaire de périphériques, mais y a-t-il un moyen plus automatisé?

Maintenant, je suis en train d'utiliser un exemple de code WMI qui devrait fonctionner, mais cela ne

Set wmiService = GetObject("winmgmts:\\.\root\cimv2") 

Set parallelports = wmiService.ExecQuery("SELECT * FROM Win32_ParallelPort")      

For Each port In parallelports 
    q = "SELECT * FROM Win32_PnPEntity WHERE PNPDeviceID = '" & port.PNPDeviceID & "'" 
    Set pnpentities = wmiService.ExecQuery(q) 

    For Each pnpentity In pnpentities 
     wscript.echo pnpentity.PNPDeviceID 
    Next 
Next 

en ligne «Pour chaque pnpentity En pnpentities j'obtiens l'erreur. Aussi je ne suis pas sûr si trouver l'entité correspondante m'aidera.

PS. Enfin, j'ai compris comment énumérer les plages de ports I/O.

Set wmiService = GetObject("winmgmts:\\.\root\cimv2") 

Set parallelports = wmiService.ExecQuery("SELECT * FROM Win32_ParallelPort") 

For Each port In parallelports 
    Set port_resources = wmiService.ExecQuery("ASSOCIATORS OF {Win32_ParallelPort.DeviceID='" & port.DeviceID & "'} WHERE ResultClass = Win32_PortResource") 

    For Each port_resource In port_resources 
     wscript.echo port_resource.Caption 
    Next 
Next 

Répondre

5

vous obtenez une erreur, car PNPDeviceID contient des barres obliques inverses (\) et les antislashs dans les requêtes WQL doit être doublé. Il suffit de ne remplacer une de \ avec \\ en port.PNPDeviceID avant de l'insérer dans votre requête, et votre script fonctionne très bien:

strPNPDeviceID = Replace(port.PNPDeviceID, "\", "\\") 
Set pnpentities = wmiService.ExecQuery(_ 
    "SELECT * FROM Win32_PnPEntity WHERE PNPDeviceID = '" & strPNPDeviceID & "'") 


Vous pouvez également trouver cette question utile: How to find available parallel ports and their I/O addresses using Delphi and WMI.