Ich brauche keine Komplettlösung, aber ein Hint zu nützlichen Dokus/Infos wäre klasse.
Bei mir funktioniert das Monitoring eines Devicewechsels unter WinXP grundsätzlich auch in der eigenen Service-App sowohl beim Wechsel einer CD/DVD als auch beim Anschluss irgend eines USB-Geräts (Scanner, Drucker, Stick, externe HD):
Code:
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;
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 ?