USB-Stick wurde eingesteckt

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Code: Alles auswählen


#DBT_DEVICEARRIVAL        = $8000
#DBT_DEVICEREMOVECOMPLETE = $8004
#DBT_DEVTYP_VOLUME        = $0002

Procedure.s GetDevice(Bits)
  For i = 'A' To 'Z'
    If Bits & 1 = 1
      Laufwerk.s = Chr(i)
    EndIf
    Bits = Bits >> 1
  Next
  ProcedureReturn Laufwerk
EndProcedure

Procedure CB(hwnd,msg,wParam,lParam)
 
  Protected *db.DEV_BROADCAST_HDR
  Protected *dbv.DEV_BROADCAST_VOLUME
 
  If msg = #WM_DEVICECHANGE
    Select wParam
      Case #DBT_DEVICEARRIVAL       
       
        *db = lParam
       
        If *db\dbch_devicetype = #DBT_DEVTYP_VOLUME
          *dbv = *db
          Laufwerk.s = GetDevice(*dbv\dbcv_unitmask) + ":\"
          Debug Laufwerk  + " = insert Media"
        EndIf
       
      Case #DBT_DEVICEREMOVECOMPLETE
       
        *db = lParam
       
        If *db\dbch_devicetype = #DBT_DEVTYP_VOLUME
          *dbv = *db
          Laufwerk.s = GetDevice(*dbv\dbcv_unitmask) + ":\"
          Debug Laufwerk + " = remove Media"
        EndIf
       
    EndSelect
    ProcedureReturn 1
  EndIf
 
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

hwnd = OpenWindow(0,#PB_Ignore,#PB_Ignore,200,200,"")

SetWindowCallback(@CB(),0)

Repeat : Until WaitWindowEvent() = #WM_CLOSE 
scoty
Beiträge: 64
Registriert: 18.10.2005 16:43
Wohnort: Raum Hildesheim

Beitrag von scoty »

Danke erst einmal für Eure Hilfe. Ich habe schon was ganz brauchbares zusammenbekommen.
Kennt sich vielleicht noch jemand aus, wie man das ganze unter Linux realisieren kann?
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

Möglichkeit a wäre die /var/log/messages mitzuschneiden:
Feb 11 01:04:55 alex2007 kernel: usb 5-7: new high speed USB device using ehci_hcd and address 4
Feb 11 01:04:55 alex2007 kernel: usb 5-7: new device found, idVendor=05e3, idProduct=0702
Feb 11 01:04:55 alex2007 kernel: usb 5-7: new device strings: Mfr=0, Product=1, SerialNumber=0
Feb 11 01:04:55 alex2007 kernel: usb 5-7: Product: USB TO IDE
Feb 11 01:04:55 alex2007 kernel: usb 5-7: configuration #1 chosen from 1 choice
Feb 11 01:04:55 alex2007 kernel: scsi7 : SCSI emulation for USB Mass Storage devices
Feb 11 01:04:55 alex2007 kernel: usb-storage: device found at 4
Feb 11 01:04:55 alex2007 kernel: usb-storage: waiting for device to settle before scanning
Feb 11 01:04:56 alex2007 kernel: Vendor: WDC WD30 Model: 00JB-00KFA0 Rev: 0811
Feb 11 01:04:56 alex2007 kernel: Type: Direct-Access ANSI SCSI revision: 00
Feb 11 01:04:56 alex2007 kernel: SCSI device sdc: 586072368 512-byte hdwr sectors (300069 MB)
Feb 11 01:04:56 alex2007 kernel: sdc: test WP failed, assume Write Enabled
Feb 11 01:04:56 alex2007 kernel: sdc: assuming drive cache: write through
Feb 11 01:04:56 alex2007 kernel: SCSI device sdc: 586072368 512-byte hdwr sectors (300069 MB)
Feb 11 01:04:56 alex2007 kernel: sdc: test WP failed, assume Write Enabled
Feb 11 01:04:56 alex2007 kernel: sdc: assuming drive cache: write through
Feb 11 01:04:56 alex2007 kernel: sdc: sdc1
Feb 11 01:04:56 alex2007 kernel: sd 7:0:0:0: Attached scsi disk sdc
Feb 11 01:04:56 alex2007 kernel: sd 7:0:0:0: Attached scsi generic sg2 type 0
Feb 11 01:04:56 alex2007 kernel: usb-storage: device scan complete
möglichkeit b es gibt bestimmt eine passende kernelapi funktion die ich aber leider nicht kenne...

Hoffe das hilft dir weiter.

mfg
125
Bild
BildDas ist Tux. Kopiere Tux in deine Signatur und hilf ihm so auf seinem Weg zur Weltherrschaft.
Marvin
Beiträge: 497
Registriert: 17.07.2005 14:42
Wohnort: Krikkit

Beitrag von Marvin »

Möglichkeit c wäre, ständig alle sdx-Devices zu überprüfen... :twisted:

(braucht aber eben root-Rechte)
Toshy
Beiträge: 713
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Beitrag von Toshy »

Was meinst du genau? Meinst du das auslesen der Devices mit SetupDiGetClassDevs() & Co.? Braucht man dazu spezielle Rechte?
1. Win10
PB6.1
Marvin
Beiträge: 497
Registriert: 17.07.2005 14:42
Wohnort: Krikkit

Beitrag von Marvin »

Nee, ich meine:

Code: Alles auswählen

If ReadFile(0,"/dev/sda") And ReadQuad(0)
  Debug "sda vorhanden"
  CloseFile(0)
EndIf
If ReadFile(0,"/dev/sdb") And ReadQuad(0)
  Debug "sdb vorhanden"
  CloseFile(0)
EndIf
(Die ersten 8 Bytes des MBR werden wohl irgendwas enthalten :twisted: )
Toshy
Beiträge: 713
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Beitrag von Toshy »

Na dann sollte man es mit diesen Funktionen versuchen.
Ich bastele gerade mit den "Akkufunktionen" rum, die ja grundlegend genau so arbeiten, halt nur eine andere GUID.

Es ist sogar die einzige Möglichkeit, die richtig funktionieren kann. Für einen selbst bei immer selber Konstallation ist vielleicht was anderes möglich, aber auch da nicht sicher. Bei mir z.B. bekommt ein USB-Stick nicht immer den selben Laufwerksbuchstaben und wenn ich man mehrere USB-Laufwerke hat und dann vielleicht noch mit mehreren Partitionen so kann man nicht mehr sicher erkennen, wo nun was angeschlossen ist. Entweder muß man dann wohl alle vorhandenen Laufwerksbuchstaben auslesen oder über die WinApi sein Glück versuchen.

Als Tip mal folgende zwei Link:
http://msdn2.microsoft.com/en-gb/library/aa363250.aspx
http://msdn2.microsoft.com/en-us/library/ms791134.aspx

Ich habe zwar auch noch nicht alles verstanden, komme aber langsam weiter.

Gruß
Toshy
1. Win10
PB6.1
Antworten