Search Members Help

» Willkommen Gast
[ Einloggen :: Registrieren ]

Alle Beiträge auf einer Seite

[ bei Antworten benachrichtigen :: per E-Mail senden :: Thema ausdrucken ]

reply to topic new topic new poll
Thema: DriveEject ?< Älteres Thema | Neueres Thema >
 Beitrag Nummer: 1
steffen2 Search for posts by this member.
Supportnet.de Moderator
Avatar



Gruppe: Special Members
Beiträge: 79
Seit: 31.12.2005
PostIcon Geschrieben: 15.5.2006, 15:32  Skip to the next post in this topic. Ignore posts   QUOTE

Hallo

kannst du verraten wie die Windows-API heißt um auszuwerfen?

Wir wollen einen Button in eine VB-5 Anwendung machen um einen USB-Stick auszuwerfen.

Danke

Gruß Steffen



mist, falschen Beitrag editiert :wall:  :wall:


Bearbeitet von steffen2 am 16.5.2006, 15:03
Offline
Top of Page Profile Contact Info 
 Beitrag Nummer: 2
Luke_Filewalker Search for posts by this member.
Bastard Operator From Hell
Avatar

TeamIcon

Gruppe: Administrators
Beiträge: 891
Seit: 23.12.2005
PostIcon Geschrieben: 15.5.2006, 18:04 Skip to the previous post in this topic. Skip to the next post in this topic. Ignore posts   QUOTE

Servus steffen

Die API ist kernel32 direkt. Schau Dir mal diesen Code an, ein Teil davon bildet die Basis für DriveEject. Das ist die Funktion um generell Wechseldatenträger abzumelden und ggf. geich auszuwerfen, je nach Typ eben.

CODE
'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


Bearbeitet von Luke_Filewalker am 15.5.2006, 18:17

--------------
Luke 'GTH' Filewalker
...may the backup be with you - always!
Zitat: "Nicht gesicherte Dateien dürfen als gelöscht betrachtet werden"
Offline
Top of Page Profile Contact Info WEB 
 Beitrag Nummer: 3
steffen2 Search for posts by this member.
Supportnet.de Moderator
Avatar



Gruppe: Special Members
Beiträge: 79
Seit: 31.12.2005
PostIcon Geschrieben: 16.5.2006, 08:46 Skip to the previous post in this topic. Skip to the next post in this topic. Ignore posts   QUOTE

Danke  :)

es tut nur teilweise  :(
Wir haben hier W2K (später auch XP) und das Laufwerk ist danach zwar teilweise weg (im Explorer beim draufklicken kein Inhalt)

Aber der Buchstaben ist noch da und im Systray das Symbol auch. Und beim herausziehen kommt die Fehlermeldung

Das Ziel soll eigentlich sein den Stick nach dem Tastendruck herauszuziehen ohne dass eine (Fehler-)Meldung erschient
(das ganze ist eine Vollbildanwendung in der keine Taskleiste sichtbar ist)
Offline
Top of Page Profile Contact Info 
 Beitrag Nummer: 4
Luke_Filewalker Search for posts by this member.
Bastard Operator From Hell
Avatar

TeamIcon

Gruppe: Administrators
Beiträge: 891
Seit: 23.12.2005
PostIcon Geschrieben: 16.5.2006, 13:57 Skip to the previous post in this topic. Skip to the next post in this topic. Ignore posts   QUOTE

Hmm funktioniert denn driveeject selbst auf dem PC korrekt? Falls ja, kram ich mal den entsprechenden Source direkt von driveeject raus.

--------------
Luke 'GTH' Filewalker
...may the backup be with you - always!
Zitat: "Nicht gesicherte Dateien dürfen als gelöscht betrachtet werden"
Offline
Top of Page Profile Contact Info WEB 
 Beitrag Nummer: 5
steffen2 Search for posts by this member.
Supportnet.de Moderator
Avatar



Gruppe: Special Members
Beiträge: 79
Seit: 31.12.2005
PostIcon Geschrieben: 16.5.2006, 15:02 Skip to the previous post in this topic. Skip to the next post in this topic. Ignore posts   QUOTE

da kommt dann die Box dass man es entfernen kann

aber wenn man den Stick danach rauszieht kommt trotzdem von Windows die Fehlermeldung dass man es so nicht tun soll.


Bild hinzugefügt (klicken für Originalgrösse)
Bild hinzugefügt (klicken für Originalgrösse)
Offline
Top of Page Profile Contact Info 
 Beitrag Nummer: 6
Luke_Filewalker Search for posts by this member.
Bastard Operator From Hell
Avatar

TeamIcon

Gruppe: Administrators
Beiträge: 891
Seit: 23.12.2005
PostIcon Geschrieben: 16.5.2006, 16:13 Skip to the previous post in this topic. Skip to the next post in this topic. Ignore posts   QUOTE

Interessant. Unter XP jedenfalls scheint es richtig zu funktionieren. Allerdings muss ich dazu sagen, dass DE nie für 2K/XP designed war, da es da ja auch nicht benötigt wird. Die Unterstützung dafür hab ich nur zu Testzwecken eingebaut, da DE ja für 98 gedacht war. Hmm dann kann ich Dir atm nicht wirklich weiterhelfen.

--------------
Luke 'GTH' Filewalker
...may the backup be with you - always!
Zitat: "Nicht gesicherte Dateien dürfen als gelöscht betrachtet werden"
Offline
Top of Page Profile Contact Info WEB 
 Beitrag Nummer: 7
steffen2 Search for posts by this member.
Supportnet.de Moderator
Avatar



Gruppe: Special Members
Beiträge: 79
Seit: 31.12.2005
PostIcon Geschrieben: 17.5.2006, 07:45 Skip to the previous post in this topic. Skip to the next post in this topic. Ignore posts   QUOTE

:clap:  :clap:  :clap:

unter XP reagiert es wirklich unterschiedlich zu 2K

ich will endlich 2K auf diesem PC loswerden.  :rant:

Danke für die Hilfe
Offline
Top of Page Profile Contact Info 
 Beitrag Nummer: 8
Luke_Filewalker Search for posts by this member.
Bastard Operator From Hell
Avatar

TeamIcon

Gruppe: Administrators
Beiträge: 891
Seit: 23.12.2005
PostIcon Geschrieben: 17.5.2006, 09:28 Skip to the previous post in this topic.  Ignore posts   QUOTE


(steffen2 @ 17.5.2006, 07:45)
QUOTE
ich will endlich 2K auf diesem PC loswerden.  :rant:

Danke für die Hilfe

Hmm über 2K kannste eig. froh sein: Ich hab bis vor kurzem noch unter 98 entwickelt und erst jetzt XP bekommen. ;) Und es ist eine Strafe unter 98 coden zu müssen, da ist 2K schon das reinste Paradies dagegen.

Btw: Ich wusste gar nicht das Du selbst auch entwickelst!? Na das finde ich praktisch, dann kriegst beim nächsten Betatest bei irgendwelchen Bugs gleich den Source in die Hand gedrückt. :D In welchem Bereich codest Du und in welcher Sprache?


--------------
Luke 'GTH' Filewalker
...may the backup be with you - always!
Zitat: "Nicht gesicherte Dateien dürfen als gelöscht betrachtet werden"
Offline
Top of Page Profile Contact Info WEB 
7 Antworten seit 15.5.2006, 15:32 < Älteres Thema | Neueres Thema >

[ bei Antworten benachrichtigen :: per E-Mail senden :: Thema ausdrucken ]


Alle Beiträge auf einer Seite
reply to topic new topic new poll