Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Problem mit CD/DVD Notification (https://www.delphipraxis.net/148021-problem-mit-cd-dvd-notification.html)

ATS3788 20. Feb 2010 20:26


Problem mit CD/DVD Notification
 
Hat jemand eine Idee warum das unter Vista & Delphi 2006
nicht funktioniert.
Erst wenn ich das Program schließe kommt
die Message WM_DEVICECHANGE!

type
TOnDeviceArrived = procedure(Sender: TObject; Drive: Char) of object;
TOnDeviceQueryRemove = procedure(Sender: TObject; Drive: Char; var CanRemove: Boolean) of object;

TJvDeviceChanged = class(TJvComponent)
private
FHandle: THandle;
FOnDeviceArrived: TOnDeviceArrived;
FOnDeviceRemoveCompleted: TOnDeviceArrived;
function GetFirstDriveLetter(UnitMask: Longint): Char;
procedure WndProc(var Msg: TMessage);
public
procedure WMDeviceChange(var Msg: TWMDeviceChange);
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property OnDeviceArrived: TOnDeviceArrived read FOnDeviceArrived write FOnDeviceArrived;
property OnDeviceRemoveCompleted: TOnDeviceArrived read FOnDeviceRemoveCompleted write FOnDeviceRemoveCompleted;
end;

procedure Register;
implementation

uses
JvJVCLUtils;

// (rom) change to RegisterWndProcHook mechanism?

constructor TJvDeviceChanged.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FHandle := AllocateHWndEx(WndProc);
end;

destructor TJvDeviceChanged.Destroy;
begin
DeallocateHWndEx(FHandle);
inherited Destroy;
end;

procedure TJvDeviceChanged.WndProc(var Msg: TMessage);
begin
sendMessage(HWND_BROADCAST,WM_USER + 7,0,0);
if Msg.Msg = WM_DEVICECHANGE then
WMDeviceChange(TWMDeviceChange(Msg))
else
Msg.Result := DefWindowProc(FHandle, Msg.Msg, Msg.wParam, Msg.lParam);
end;

daywalker9 20. Feb 2010 20:32

Re: Problem mit CD/DVD Notification
 
Benutz bitte die Delphi Tags. Dann kann man den Source auch besser lesen

himitsu 20. Feb 2010 20:52

Re: Problem mit CD/DVD Notification
 
Die Komponente wurde aber nicht in einem Thread erstellt?

Garfield 21. Feb 2010 12:17

Re: Problem mit CD/DVD Notification
 
Zitat:

Zitat von ATS3788
Delphi-Quellcode:
  public
    procedure WMDeviceChange(var Msg: TWMDeviceChange);

Vielleicht ist das besser:
Delphi-Quellcode:
protected
    procedure WMDeviceChange(var Msg: TMessage); dynamic;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz