Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Obsluga urzadzen USB w win98
anonim




Typ: Nie zarejestrowany
Obsluga urzadzen USB w win98

Od pewnego czasu pisze program w VB6, ktory umozliwialby mi odlaczanie urzadzen USB (przynajmniej typu PenDrive) na podobnej zasadzie jak to jest w win2k - jedno klikniecie na ikone na pasku tray, wybor z listy urzadzenia (mobile disk) i jego odlaczenie. W eksplorerze pod prawym przyciskiem jest polecenie "wysun". Jak do niej dotrzec z poziomu VB? Bardzej odpowiadalaby mi mozliwosc odlaczenia jak w win2k, a nie tylko "wysuniecie". Czy Ktos zna funkcje API, kontrolki, ..., umozliwiajace obsluge urzadzen usb we wlasnej aplikacji?

15-04-2004 11:09
  
andrey
Łódź



Typ: neutral
Postów: 295
Zarejestrowany: Mar 2003

wejdź na www.planet-source-code.com/vb i uzyj opcji search w podane pole wpisz USB Wśród wielu nieodpowiadających przykladów znajdziesz ten co szukasz bo pamiętam że widziałem tam taki Niestey mówi on o używaniu USB jedynie w Win NT i Win2K o ile mnie pamięć nie myli ale zawsze możesz popatrzeć. Powodzenia


_____________________________________________
http://www.carbondesign.pl/ - rowery poziome, trójkołówce, handbike-i, tuning, akcesoria

15-04-2004 21:24
Pokaż profil andrey  Wyślij email do andrey   Odwiedź stronę andrey       3078613
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003

Wykorzystaj funkcję EnumDisplayDevices(), która pozwala wyliczyć urządzenia w systemie.

UWAGA!
Wymaga Windows 2000 lub późniejszych; Win9x/ME: nie obsługuje

SKŁADNIA:
Declare Function EnumDisplayDevices Lib "user32" Alias "EnumDisplayDevicesA" (Unused As Any, ByVal iDevNum As Long, lpDisplayDevice As DISPLAY_DEVICE, ByVal dwFlags As Long) As Boolean


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

15-04-2004 21:27
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
anonim




Typ: Nie zarejestrowany

Dzieki za wskazowki. Po win98 faktycznie moga byc problemy. Chodzi o wygodne i bezpieczne odlaczenie urzadzenia usb. Od biedy wystarczaloby mi wykonanie w swojej aplikacji dokladnie tego samego polecenia jak z prawego menu myszki - wysun (dla dyskow przenosnych typu pendrive). Tylko jak?

16-04-2004 00:48
  
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003
A może zastosuj funkcję taką, jaką stosuje się do wysuwania CD...

Oto przykład:


'Example by Howard Henry Schlunder
' This example requires one command button (Command1)
Private Declare Function GetVersion Lib "kernel32" () As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function DeviceIoControl Lib "kernel32" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, lpOverlapped As Any) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const INVALID_HANDLE_VALUE = -1
Private Const OPEN_EXISTING = 3
Private Const FILE_FLAG_DELETE_ON_CLOSE = 67108864
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const IOCTL_STORAGE_EJECT_MEDIA = 2967560
Private Const VWIN32_DIOC_DOS_IOCTL = 1

Private Type DIOC_REGISTERS
  reg_EBX As Long
  reg_EDX As Long
  reg_ECX As Long
  reg_EAX As Long
  reg_EDI As Long
  reg_ESI As Long
  reg_Flags As Long
End Type

Private Sub Command1_Click()
Dim hDrive As Long, DummyReturnedBytes As Long
Dim EjectDrive As String, DriveLetterAndColon As String
Dim RawStuff As DIOC_REGISTERS
  EjectDrive = InputBox("Which drive shall we try to eject the media from?", "Eject Media"
  If Len(EjectDrive) Then 'Confirm the user didn't cancel
    DriveLetterAndColon = UCase(Left$(EjectDrive & ":", 2)) 'Make it all caps for easy interpretation
    If GetVersion >= 0 Then 'We are running Windows NT/2000
      hDrive = CreateFile("\\.\" & DriveLetterAndColon, GENERIC_READ Or GENERIC_WRITE, 0, ByVal 0, OPEN_EXISTING, 0, 0)
      If hDrive <> INVALID_HANDLE_VALUE Then
        'Eject media!
        Call DeviceIoControl(hDrive, IOCTL_STORAGE_EJECT_MEDIA, 0, 0, 0, 0, DummyReturnedBytes, ByVal 0)
        Call CloseHandle(hDrive)  'Clean up after ourselves
      End If
    Else  'We are running Win9x/Me
      hDrive = CreateFile("\\.\VWIN32", 0, 0, ByVal 0, 0, FILE_FLAG_DELETE_ON_CLOSE, 0)
      If hDrive <> INVALID_HANDLE_VALUE Then
        'Setup our raw registers to use Interrupt 21h Function 440Dh Minor Code 49h
        RawStuff.reg_EAX = &H440D  'The function to use
        RawStuff.reg_EBX = Asc(DriveLetterAndColon) - Asc("A" + 1 'The drive to do it on
        RawStuff.reg_ECX = &H49 Or &H800    'The minor code of the function in the low byte of the low word and the device category of 8 in the high byte of the low word
        'Eject media!
        Call DeviceIoControl(hDrive, VWIN32_DIOC_DOS_IOCTL, RawStuff, LenB(RawStuff), RawStuff, LenB(RawStuff), DummyReturnedBytes, ByVal 0)
        Call CloseHandle(hDrive)  'Clean up after ourselves
      End If
    End If
  End If
End Sub



_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

16-04-2004 23:15
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
anonim




Typ: Nie zarejestrowany

Jest pierwszy sukces. Pomysl z zastosowaniem funkcji wysuwania CD-R do wysuwania dyskow wymiennych jest trafny i dziala zarowno pod win2k jak i win98. Najwidocznej funkcja ta dziala tak samo jak ta w explorerze - "wysun". Nie wiadomo na ile jest bezpieczna. Przykladowo jakie beda skutki jej wykonania w trakcie dzialania programu uruchomionego na dysku wymiennym, albo gdy znajdujacy sie na dysku dokument office, czy dowolny inny plik jest otwarty? Niemniej jednak funkcja dziala dostatecznie dobrze.
Pozostaje jeszcze znalezc funkcje powodujaca odlaczanie dysku wymiennego tak jak pod win2k.

19-04-2004 10:30
  
Wszystkich odpowiedzi: 5 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1