Aktuelle Zeit: 20.10.2020 13:01

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: USB-Geräte ab- und -zuschalten
BeitragVerfasst: 16.07.2008 17:13 
Offline
Benutzeravatar

Registriert: 11.11.2004 16:13
Wohnort: Magdeburg
Mitunter vertragen sich gleichzeitig angeschlossene USB-Geräte nicht. Bei mir "stänkerte" ein TV-Stick, der z.B. Kopier-Operationen eines normalen Sticks verhinderte. Den TV-Stick abzuschalten geht ja, aber wie wieder aktivieren ohne PC-Neustart, Aktionen über den Geräte-Manager oder erneutes Einstecken (hinten am PC, und das bei meinem Bierbauch)? Die Lösung liefert MS mit dem wirklich guten Tool Devcon. Diese Exe (knapp 60KB) gibts incl. Source-Code bei MS zum freien Download. Mit Devcon kann man hardware-mässig eine ganze Menge machen, hier mein Beispiel zum Schalten von USB-Geräten:
Code:
;- Ein- und Aus-Schalten von angeschlossenen USB-Geräten
;- "Helle" Klaus Helbing, 04.09.2008, PB v.4.20
;- Die Datei "devcon.exe" kann in einem beliebigen Ordner liegen, hier selber Ordner wie das Programm 
;- Bitte die Zwangspausen (Delay(2000)) beachten! Kann auf schnellen Rechnern runtergesetzt werden
;- Also etwas Geduld zwischen den einzelnen Aktionen!
;- Benutzung auf eigene Gefahr! Ist aber harmlos; wer seine USB-Maus oder -Tastatur beendet, braucht
;-  schlimmstenfalls ein Zweit-Gerät an einem anderen Anschluß und kann das beendete Gerät wieder
;-  starten. Trotzdem aufpassen! Oder im Programm als Gerät ausblenden.   
;- Getestet mit W2k und XP. Auf eine Auswertung von Rückgabewerten (Fehler) wurde hier verzichtet.

USBR$ = "USB\ROOT"
Activ$ = "running"
Dis$ = "disabled"

Structure USB
  Name$
  VID$
  PID$
  Status$
EndStructure

If OpenWindow(0, 0, 0, 400, 200, "USB-Geräte verwalten, linker Maus-Doppelklick ändert Status", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
  ListIconGadget(0, 10, 10, 380, 180, "Geräte-Name", 180, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect)
  AddGadgetColumn(0, 1, "VID", 65)
  AddGadgetColumn(0, 2, "PID", 65)
  AddGadgetColumn(0, 3, "Status", 60)
  ;Pfad von devcon evtl.anpassen
  ProgID = RunProgram("devcon", "find usb\*", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
  Delay(2000)                               ;muss sein! Bei Bedarf höher!
  Laenge = AvailableProgramOutput(ProgID)
  Buffer = AllocateMemory(Laenge)
  ReadProgramData(ProgID, Buffer, Laenge)

  Dim Geraet.USB(Laenge)                    ;gaaaanz sicher! Kann man natürlich verkleinern

  For i = 0 To Laenge - 1
    If PeekB(Buffer + i) = 13
      USB$ = PeekS(Buffer + j, i-j, #PB_Ascii)
      j = i
      If FindString(USB$, USBR$, 1) = 0
        AddGadgetItem(0, -1, "")
        If FindString(USB$, "VID", 1) > 0   ;sonst Käse bei kein Gerät
          USB$ = RTrim(USB$)                ;zeigt hier auch ausgeschaltete Geräte an!
          Geraet(z)\VID$ = Mid(USB$, 7, 8)  ;8 Zeichen lang, Position ermittelt
          SetGadgetItemText(0, z, Geraet(z)\VID$, 1)
          Geraet(z)\PID$ = Mid(USB$, 16, 8)
          SetGadgetItemText(0, z, Geraet(z)\PID$, 2)
          k = FindString(USB$, ":", 20)     ;oder mehr als 20
          Geraet(z)\Name$ = Mid(USB$, k+2, i-k)  ;oder bei bekannter VID/PID eigenen Namen setzen
          SetGadgetItemText(0, z, Geraet(z)\Name$, 0)   
          ProgID2 = RunProgram("devcon", "status usb\"+Geraet(z)\VID$+Chr(38)+Geraet(z)\PID$, "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
          Delay(2000)
          Laenge2 = AvailableProgramOutput(ProgID2)
          Buffer2 = AllocateMemory(Laenge2)
          ReadProgramData(ProgID2, Buffer2, Laenge2)
          Act$ = PeekS(Buffer2, Laenge2, #PB_Ascii)
          KillProgram(ProgID2)
          CloseProgram(ProgID2)     
          FreeMemory(Buffer2)
          If FindString(Act$, Activ$, 1) <> 0
            Geraet(z)\Status$ = Activ$
           Else
            Geraet(z)\Status$ = Dis$
          EndIf
          SetGadgetItemText(0, z, Geraet(z)\Status$, 3)
          z + 1   
          If i > Laenge - 50                ;50 oder so in etwa
            Break
          EndIf
        EndIf
      EndIf
    EndIf
  Next

  KillProgram(ProgID)                       ;sicher ist sicher
  CloseProgram(ProgID)

  Repeat
    Repeat
      Event = WaitWindowEvent()
      If Event = #PB_Event_CloseWindow
        End
      EndIf   
    Until EventType() = #PB_EventType_LeftDoubleClick

  z = GetGadgetState(0)

  If z >= 0
    ;Status switchen
    If Geraet(z)\Status$ = Activ$
      ProgID2 = RunProgram("devcon", "disable usb\" + Geraet(z)\VID$ + Chr(38) + Geraet(z)\PID$, "", #PB_Program_Open | #PB_Program_Hide)
     Else
      ProgID2 = RunProgram("devcon", "enable usb\" + Geraet(z)\VID$ + Chr(38) + Geraet(z)\PID$, "", #PB_Program_Open | #PB_Program_Hide)
    EndIf

    ;aktuellen Status des geswitchten Gerätes abfragen
    Delay(2000)                                ;evtl. anpassen
    ProgID3 = RunProgram("devcon", "status usb\"+Geraet(z)\VID$+Chr(38)+Geraet(z)\PID$, "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
    Delay(2000)
    Laenge3 = AvailableProgramOutput(ProgID3)
    Buffer3 = AllocateMemory(Laenge3)
    ReadProgramData(ProgID3, Buffer3, Laenge3)
    Act$ = PeekS(Buffer3, Laenge3, #PB_Ascii)
    KillProgram(ProgID3)
    CloseProgram(ProgID3)     
    FreeMemory(Buffer3)
    If FindString(Act$, Activ$, 1) <> 0
      Geraet(z)\Status$ = Activ$
     Else
      Geraet(z)\Status$ = Dis$
    EndIf
    SetGadgetItemText(0, z, Geraet(z)\Status$, 3)
  EndIf
  Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Gruß
Helle

Edit: 5.9.2008 Kosmetik, wenn kein USB-Gerät angeschlossen ist


Zuletzt geändert von Helle am 05.09.2008 17:00, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 21.07.2008 12:04 
Offline
Benutzeravatar

Registriert: 14.08.2007 15:41
Wohnort: Lelbach
Ich habe so das Gefühl, als ob dein Programm mein Problem lösen könnte. Habe einen Serial-USB-Konverter
der vermutlich Treiberprobleme hat und sich gelegentlich einfach mal so verabschiedet. Gezieltes ab- und
anmelden könnte vielleicht helfen.

Hast du mal einen direkten Link zu "devcon.exe"? Finde nichts bei MS.

_________________
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 21.07.2008 12:19 
Offline

Registriert: 10.11.2004 03:22
[offtopic]
"devcon" ist ja auch ein nettes wortspielchen.... Bild
[/offtopic]

_________________
... machts gut und danke für den fisch ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 21.07.2008 12:41 
Offline
Benutzeravatar

Registriert: 29.08.2004 08:48
7x7 hat geschrieben:
Hast du mal einen direkten Link zu "devcon.exe"? Finde nichts bei MS.

http://support.microsoft.com/kb/311272

_________________
Rings hat geschrieben:
ziert sich nich beim zitieren


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 21.07.2008 15:51 
Offline
Benutzeravatar

Registriert: 14.08.2007 15:41
Wohnort: Lelbach
Kaeru Gaman hat geschrieben:
[offtopic]
"devcon" ist ja auch ein nettes wortspielchen.... Bild
[/offtopic]

In der Tat ('Defense Condition')
Oh nein, das Pentagon wird doch wohl nicht Windows benutzen...?! :wink:


Danke Rings für den Link!

_________________
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 21.07.2008 19:25 
Offline
Benutzeravatar

Registriert: 26.10.2006 13:19
@Helle: Super! (und das ohne Assembler :D )
Ich hab` natürlich nichts gegen Assembler - Ich versteh`s nur überhaupt nicht.

_________________
Windows 7 - PB 4.51 RC2
4.30, 4.20, 4.10, 4.02, 4.01, 4.00, 3.94, 3.93, 3.92, 3.91, 3.90, 3.81, 3.72, 3.62, 3.51, 3.50, 3.30, 2.90, 2.60, 2.50, 2.40, 2.30, 2.20, 2.10, 2.00
_________________________________


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 21.07.2008 19:56 
Offline

Registriert: 10.11.2004 03:22
7x7 hat geschrieben:
In der Tat ('Defense Condition')

yo, der Bezug zur Abkürzung DEFCON ist das wortspielchen.
die Abkürzung devcon heißt device control.

_________________
... machts gut und danke für den fisch ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 21.07.2008 23:27 
Offline
Benutzeravatar

Registriert: 29.08.2004 20:46
Wohnort: Luxemburg
Zitat:
MORE INFORMATION
DevCon is not redistributable. It is provided for use as a debugging and development tool. You can freely modify DevCon for private use. The sample demonstrates how to use the SetupAPI and CfgMgr32 functions together effectively to enumerate devices and perform device operations. The following file is available for download from the Microsoft Download Center:

Das ist ja mal doof... :|

_________________
„Warum siehst du den Splitter im Auge deines Bruders, aber den dicken fetten schwarzen Zensurbalken vor deinem Auge bemerkst du nicht?“


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 22.07.2008 14:25 
Offline
jaAdmin
Benutzeravatar

Registriert: 13.09.2004 17:48


eher schlau

hier gehts zum quellcode (u.a.)
http://www.microsoft.com/whdc/devtools/ddk/default.mspx

viel Spass beim Lernen

_________________
‮pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye