Seite 1 von 1

Windows Geräte deaktivieren (USB-Root-Hub)

Verfasst: Samstag 13. September 2008, 11:57
von da.dom
Hallo Zusammen,

kann ich über Python bestimmte Hardwarekomponenten deaktivieren, handelt sich konkret um einen bestimmten USB-Root-Hub den ich aktivieren und deaktivieren will?

Danke schon mal Dom

[Für die die Wissen wollen warum das Ganze]
Hab seid geraumter Zeit das Problem das Windows der Meinung ist das er eine USB-Hardware nicht erkennen konnte (selbst wenn GAR KEINE Geräte am USB hingen), liegt scheinbar an meinen beiden FrontUSB Steckplätzen. Problem ist das die Meldung permanent aufpoppt und ich nur durch deaktivieren des entsprechenden USB-Root-Hubs da ruhe bekomme. Wenn ich nun aber doch mal ein Gerät vorne anschließen will (das geht nämlich) muss ich immer erst in die Systemsteuerung..., und da wollte ich mit einem Python Programm abhilfe schaffen :)

Verfasst: Samstag 13. September 2008, 12:43
von HWK
Vielleicht hilft das: DevCon
MfG
HWK

Verfasst: Montag 15. September 2008, 09:09
von da.dom
Sieht gut aus. Jetzt muss ich nur noch heute Abend mal testen ob das ganze auch unter Vista rennt. In der Programmbeschreibung wird es nämlich nicht aufgeführt...

Grüße
D

PS: Mal eine doofe Frage, wie ruf ich das Programm mit Parametern auf?

Code: Alles auswählen

file="devcon.exe -enable " + DEVICE_TO_DISABLE
os.startfile(file)
scheint zu kurz gedacht zu sein :)

Verfasst: Montag 15. September 2008, 10:27
von da.dom

Code: Alles auswählen

os.system("cmd /C devcon.exe enable " + DEVICE_TO_DISABLE)
>>
cmd /C devcon.exe enable @USB\ROOT_HUB\4&56F6491&0

Das wäre die Lösung für oben genanntes Problem, Problem 2:

Wie entwerte ich das & Zeichen ? Die Gerätebezeichnung für Windows enthält & Zeichen und der cmd Interpreter scheint das Zeichen zu interpretieren und die Befehle da zu trennen..., das erwartete

\&

scheint allerdings nicht zu funktionieren :(

Verfasst: Montag 15. September 2008, 10:43
von Leonidas
...subprocess...

Verfasst: Montag 15. September 2008, 11:26
von da.dom
Leonidas hat geschrieben:...subprocess...
auch schön, aber dasselbe Problem beim entwerten des "&"-Zeichens.

Verfasst: Montag 15. September 2008, 11:29
von Leonidas
da.dom hat geschrieben:
Leonidas hat geschrieben:...subprocess...
auch schön, aber dasselbe Problem beim entwerten des "&"-Zeichens.
Wieso? Es wird nicht von einer Shell ausgewertet, also muss es auch nicht escaped werden.

Verfasst: Montag 15. September 2008, 12:14
von da.dom
Hast ja recht, war nur mal wieder zu beschränkt um das ganze korrekt zu benutzen.

Läuft einwandfrei, super vielen Dank. Hier noch mal das Ergebnis für jedermann (die Device ID, passt natürlich nicht :) mit "devcon.exe status" kann man sie sich anzeigen lassen). Läuft unter XP Problemlos, den Vista-Test muss das Programm (bzw. Devcon.exe) heute Abend dann mal bestehen:

Programm aktiviert angegebenes Gerät bei Start, und deaktiviert es wieder wenn man mit einer Tase bestätigt.

Code: Alles auswählen

import subprocess

DEVICE_TO_DISABLE='"@USB\\ROOT_HUB\\4&56F6491&0"'

print "\n*** Disable Device ***\n"
p = subprocess.Popen("devcon.exe enable " + DEVICE_TO_DISABLE, shell=False)
p.wait()
print "\n"
raw_input("Hit any Key when Device-Usage is finished...")
print "\n"
p = subprocess.Popen("devcon.exe disable " + DEVICE_TO_DISABLE, shell=False)
p.wait()
exit

Verfasst: Montag 15. September 2008, 12:32
von Leonidas
Und jetzt statt dem String bei Popen eine Liste verwenden, dann ist es auch richtig. *nitpick*

Verfasst: Montag 15. September 2008, 13:24
von da.dom
Leonidas hat geschrieben:Und jetzt statt dem String bei Popen eine Liste verwenden, dann ist es auch richtig. *nitpick*
Tut mir Leid, dazu bin ich jetzt wirklich zu doof :) wo soll da jetzt eine Liste hin? Hab das doch so aus der Doku:

p = Popen("mycmd" + " myarg", shell=True)

Verfasst: Montag 15. September 2008, 13:42
von Leonidas

Code: Alles auswählen

p = subprocess.Popen(["devcon.exe", "disable", DEVICE_TO_DISABLE]) 

Verfasst: Montag 15. September 2008, 16:41
von da.dom
Änderung durchgeführt.

DevCon.exe läuft auch unter Vista