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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

Samstag 13. September 2008, 11:57

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 :)
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Samstag 13. September 2008, 12:43

Vielleicht hilft das: DevCon
MfG
HWK
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

Montag 15. September 2008, 09:09

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 :)
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

Montag 15. September 2008, 10:27

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 :(
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 15. September 2008, 10:43

...subprocess...
My god, it's full of CARs! | Leonidasvoice vs Modvoice
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

Montag 15. September 2008, 11:26

Leonidas hat geschrieben:...subprocess...
auch schön, aber dasselbe Problem beim entwerten des "&"-Zeichens.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 15. September 2008, 11:29

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

Montag 15. September 2008, 12:14

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
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 15. September 2008, 12:32

Und jetzt statt dem String bei Popen eine Liste verwenden, dann ist es auch richtig. *nitpick*
My god, it's full of CARs! | Leonidasvoice vs Modvoice
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

Montag 15. September 2008, 13:24

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)
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 15. September 2008, 13:42

Code: Alles auswählen

p = subprocess.Popen(["devcon.exe", "disable", DEVICE_TO_DISABLE]) 
My god, it's full of CARs! | Leonidasvoice vs Modvoice
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

Montag 15. September 2008, 16:41

Änderung durchgeführt.

DevCon.exe läuft auch unter Vista
Antworten