![]() |
"Gerät auswerfen" Funktion gesucht
Hallo!
[Beim Auslesen der SMART-Werte meiner Externen Festplatte ist mir aufgefallen dass ich die HDD 757 Mal an/ausgeschaltet habe und davon 518 mal "hart" (Stromzufuhr während des Betriebs unterbrochen). Das liegt daran, dass ich den USB Stecker nicht ziehe. Ich werfe die HDD mit "Hardware sicher entfernen" aus und schalte dann die HDD mit dem An/Ausschalter am Gerät aus. Und scheinbar lässt Windows die HDD ganz normal weiterlaufen auch wenn sie bereits ausgeworfen wurde.] Ich bin mal auf eine Windows-Api-Funktion gestoßen die in etwa "Eject/Remove Media/Device" hieß. Die Funktion hatte scheinbar nichts mit "Hardware sicher entfernen" zu tun und ich glaube man konnte die HDD danach nicht mehr verwenden (erst wieder nach dem Aus- und Einstecken). Ich bin mir aber sicher, dass die HDD beim Ausführen der Funktion aufgehört hat sich zu drehen, also genau das was ich gerne hätte. Weiß jemand wie diese Funktion heißt??? Grüße blablab |
AW: "Gerät auswerfen" Funktion gesucht
Zitat:
![]() |
AW: "Gerät auswerfen" Funktion gesucht
Liste der Anhänge anzeigen (Anzahl: 1)
Geht mit DEVCON - das gibt es bei MICROSOFT:
Delphi-Quellcode:
function GetConsoleOutput(Command : string;
Output, Errors : TStringList) : Boolean; var Buffer : array[0..255] of Char; CreationFlags : DWORD; NumberOfBytesRead : DWORD; PipeErrorsRead : THandle; PipeErrorsWrite : THandle; PipeOutputRead : THandle; PipeOutputWrite : THandle; ProcessInfo : TProcessInformation; SecurityAttr : TSecurityAttributes; StartupInfo : TStartupInfo; Stream : TMemoryStream; begin //Initialisierung ProcessInfo FillChar(ProcessInfo, SizeOf(TProcessInformation), 0); //Initialisierung SecurityAttr FillChar(SecurityAttr, SizeOf(TSecurityAttributes), 0); SecurityAttr.nLength := SizeOf(TSecurityAttributes); SecurityAttr.bInheritHandle := True; SecurityAttr.lpSecurityDescriptor := nil; //Pipes erzeugen CreatePipe(PipeOutputRead, PipeOutputWrite, @SecurityAttr, 0); CreatePipe(PipeErrorsRead, PipeErrorsWrite, @SecurityAttr, 0); //Initialisierung StartupInfo FillChar(StartupInfo, SizeOf(TStartupInfo), 0); StartupInfo.cb := SizeOf(TStartupInfo); StartupInfo.hStdInput := 0; StartupInfo.hStdOutput := PipeOutputWrite; StartupInfo.hStdError := PipeErrorsWrite; StartupInfo.wShowWindow := SW_HIDE; StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; CreationFlags := CREATE_DEFAULT_ERROR_MODE or CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS; // Folgende Zeile ist nur für Delphi ab 2009 erforderlich: UniqueString(Command); if CreateProcess(nil, PChar(Command), nil, nil, True, CreationFlags, nil, nil, StartupInfo, ProcessInfo) then begin Result := True; //Write-Pipes schließen CloseHandle(PipeOutputWrite); CloseHandle(PipeErrorsWrite); //Ausgabe Read-Pipe auslesen Stream := TMemoryStream.Create; try while ReadFile(PipeOutputRead, Buffer, 255, NumberOfBytesRead, nil) do begin Stream.Write(Buffer, NumberOfBytesRead); end; Stream.Position := 0; Output.LoadFromStream(Stream); finally Stream.Free; end; CloseHandle(PipeOutputRead); //Fehler Read-Pipe auslesen Stream := TMemoryStream.Create; try while ReadFile(PipeErrorsRead, Buffer, 255, NumberOfBytesRead, nil) do begin Stream.Write(Buffer, NumberOfBytesRead); end; Stream.Position := 0; Errors.LoadFromStream(Stream); finally Stream.Free; end; CloseHandle(PipeErrorsRead); WaitForSingleObject(ProcessInfo.hProcess, INFINITE); CloseHandle(ProcessInfo.hProcess); end else begin Result := False; CloseHandle(PipeOutputRead); CloseHandle(PipeOutputWrite); CloseHandle(PipeErrorsRead); CloseHandle(PipeErrorsWrite); end; end; procedure TForm2.Button1Click(Sender: TObject); var Output : TStringList; Errors : TStringList; begin Output := TStringList.Create; Errors := TStringList.Create; Memo1.Lines.Add('----------------------USB OFF---------------------'); try if GetConsoleOutput('devcon.exe disable USB\ROOT_HUB20', Output, Errors) // USB2.0 then Memo1.Lines.AddStrings(Output); Memo1.Lines.Add(''); if GetConsoleOutput('devcon.exe disable USB\ROOT_HUB30', Output, Errors) // USB3.0 then Memo1.Lines.AddStrings(Output); finally Output.free; Errors.free; end; end; procedure TForm2.Button2Click(Sender: TObject); var Output : TStringList; Errors : TStringList; begin Output := TStringList.Create; Errors := TStringList.Create; Memo1.Lines.Add('----------------------USB ON----------------------'); try if GetConsoleOutput('devcon.exe enable USB\ROOT_HUB20', Output, Errors) // USB2.0 then Memo1.Lines.AddStrings(Output); Memo1.Lines.Add(''); if GetConsoleOutput('devcon.exe enable USB\ROOT_HUB30', Output, Errors) // USB3.0 then Memo1.Lines.AddStrings(Output); finally Output.free; Errors.free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz