Hallo,
ich habe im Moment ein kleines Problem mit meinem PC.
In bestimmten Situationen wird mein System instabil und beginnt in regelmäßigen abständen einzufrieren. Dies lässt sich nur durch ein neu starten des Systems beheben.
Allerdings höre ich jedes mal bevor dies beginnt den Windows-sound das ein Gerät getrennt und wieder verbunden wurde.
Ich könnte mir also vorstellen das ich ein defektes Gerät am oder im PC habe.
Jetzt hat Windows keine vernünftige Funktion ein Log zu erstellen welche Geräte getrennt und verbunden wurden.
Daher will ich das jetzt mit einem kleinen Delphi Programm selbst erledigen.
Wie kann ich einfach nur (am liebsten als String) angezeigt bekommen, welche Hardware verbunden oder getrennt wurde?
Ich habe bereits gelesen das dies mit WM_DEVICECHANGE, DBT_DEVICEARRIVAL und DBT_DEVICEREMOVECOMPLETE möglich sein soll, allerdings bin ich längst nicht gut genug im Programmieren um zu verstehen wie ich diese funktionen nutzen kann.
Mit diesem Code hier kann ich schon auf das ereignis reagieren, allerdings habe ich keinerlei informationen was für ein Gerät es ist:
Code:
unit Unit1;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs;
type
TForm1 = class(TForm)
private
procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WMDeviceChange(var Msg: TMessage);
const
DBT_DEVICEARRIVAL = $8000; // system detected a new device
DBT_DEVICEREMOVECOMPLETE = $8004; // device is gone
var
myMsg: string;
begin
inherited;
case Msg.wParam of
DBT_DEVICEARRIVAL: myMsg := 'Verbunden';
DBT_DEVICEREMOVECOMPLETE: myMsg := 'Getrennt';
end;
ShowMessage(myMsg);
end;
end.