![]() |
Devicechange aus Service mitbekommen
Tag allerseits,
Ich bin einfach nur am verzweifeln. Ich habe mir eine Button1 anwendung gemacht, welche WM_DEVICECHANGE behandelt. Ich kann jetzt ohne probleme erkennen ob ein USB datenträger, Netzlaufwerk angeschlossen oder eine CD/DVD eingelegt wurde. ich bekomme ebenfalls Infos wie Laufwerksbuchstaben raus. Das ganze in einen Dienst gepackt und schon geht rein gar nichts mehr. Ok ist klar, dienste haben in der Regel kein Fenster. RegisterDeviceNotification ausprobiert, bringt aber rein gar nichts. Ich bekomme zwar mit das sich was geändert hat, aber keinerlei informationen was genau(z.B ob und welches Volume). Das bringt mich nicht weiter. (Es sei denn ich habe bei dieser Methode etwas entscheidendes übersehen). Also die schmutzige methode. Dienst erstellt einfach ein Fenster und lässt ne Messageloop laufen. Klasse ich finde jetzt wieder wie bei der Button1 anwendung raus was mit USB Volumes passiert und bekomme die entsprechenen informationen. ich kann ja jetzt wieder über WM_DEVICECHANGE arbeiten. Tja zu früh gefreut, denn aus irgendeinem grund wird keine WM_DEVICECHANGE empfangen, wenn es sich um eine CD/DVD oder ein Netzlaufwerk handelt(?). Was ich brauche an informationen: Wurde ein Volume angeschlossen/eingesteckt?(Sowohl USB als auch Netzlaufwerk und CD/DVD) Welchen Laufwerksbuchstaben ist diesem zugeordnet? Ich wäre wirklich sehr froh, wenn mir jemand nen schubser in die richtige Richtung geben könnte. Hintergrund: Ich arbeite gerade in der Gruppe an einem Projekt, bei dem es darum geht unerwünschte Datenträger wieder rauszuschubsen(ja es muss ein dienst sein). In der Button1 anwendung alles prima, im Dienst leider nicht mehr. Ich brauche keine Komplettlösung, aber ein Hint zu nützlichen Dokus/Infos wäre klasse. MFG Memnarch |
AW: Devicechange aus Service mitbekommen
Zitat:
Code:
Die weitere Analyse der Feinheiten (Gerätetyp, ggf. Laufwerksbuchstaben, usw.) habe ich aber so schnell noch nicht einbauen können; ist ja etwas aufwändiger. Hilft's trotzdem was ?
Const LogFileName = 'c:\temp\logged.txt'; // z.B.
procedure LogMessage(const Msg: string); const OpenFlags: array[Boolean] of Integer = (fmCreate or fmShareExclusive, fmOpenReadWrite or fmShareExclusive); Var FileStream : TFileStream; begin begin // hier Msg in Logfile speichern oder sonstwas machen ... FileStream := TFileStream.Create(LogFileName, OpenFlags[FileExists(LogFileName)]); try FileStream.Seek(0, soFromEnd); FileStream.Write(PChar(Msg + #13#10)^, Length(Msg) + 2) finally FileStream.Free; end; end; procedure TService1.WndProc(var AMsg: TMessage); begin if AMsg.Msg = WM_DEVICECHANGE then LogMessage(format('%s Message: %s', [FormatDateTime('dd.mm.yyyy hh:nn:ss', Now), 'WM_DEVICECHANGE'])); end; procedure TService1.ServiceExecute(Sender: TService); begin while not Terminated do ServiceThread.ProcessRequests(true); end; |
AW: Devicechange aus Service mitbekommen
so klappt das leider bei mir nicht :(
bei wm_devicechange bekomme ich in WParam kein arrival event und als struktur kein DBT_DEV_VOLUME. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 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