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

📄 unit1.pas

📁 给定偏移地址和大小,实现对USB块设备(如U盘)的读写
💻 PAS
字号:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    ComboBox1: TComboBox;
    Label2: TLabel;
    Edit1: TEdit;
    Label3: TLabel;
    Button1: TButton;
    Button2: TButton;
    Label4: TLabel;
    Edit2: TEdit;
    Memo1: TMemo;
    Memo2: TMemo;

    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ComboBox1Click(Sender: TObject);

  private
    temp : PChar;
    USB : TUSB;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

function inttobcd(input:integer):string;

implementation

{$R *.dfm}

function inttobcd(input:integer):string;
var
    i,j:integer;
begin
    i := input div 16;
    j := input mod 16;

    result := '0x';
    case i of
        10: result := result+'A';
        11: result := result+'B';
        12: result := result+'C';
        13: result := result+'D';
        14: result := result+'E';
        15: result := result+'F';
    else
        result := result+inttostr(i);
    end;

    case j of
        10: result := result+'A';
        11: result := result+'B';
        12: result := result+'C';
        13: result := result+'D';
        14: result := result+'E';
        15: result := result+'F';
    else
        result := result+inttostr(j);
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
    index: integer;
    size : integer;
    i : integer;
    hex_line: string;
begin
    USB.set_driver(PChar(ComboBox1.Items.Strings[ComboBox1.ItemIndex])[0]);
    if USB.Open = False then USB.Open := True;
    if USB.Open = False then begin
        MessageBox(0,'Can Open disk, please check it!',nil,mb_OK);
        exit;
    end;
    index := strtoint(Edit1.Text);
    size := strtoint(Edit2.Text);
    Memo1.Font.Color := clBlue;
    GetMem(temp,size shl SECTRO_SHFT);
    USB.SectorRead_retry(temp,DWORD(index),DWORD(size));
    Memo1.Clear;
    Memo2.Clear;

   // Memo1.Lines.SetText(temp);
    hex_line := '';
    for i := 0 to ((size shl SECTRO_SHFT)-1) do begin
        hex_line := hex_line + inttobcd(integer(temp[i]))+ ' ';
        //Memo1.Lines.Append(temp[i]);
        Memo1.Text := Memo1.Text + temp[i];
        if (((i+1) mod 16) = 0) and (i <>0) then begin
            hex_line := hex_line + #13#10;
        end;
    end;
    Memo2.Lines.SetText(PChar(hex_line));

    freeMem(temp);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    USB := TUSB.Create;
    USB.set_driver(PChar(ComboBox1.Items.Strings[ComboBox1.ItemIndex])[0]);
    USB.Open := True;
    if USB.Open = False then begin
        MessageBox(0,'Can Open disk, please check it!',nil,mb_OK);
        exit;
    end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
    index: integer;
    size : integer;
    i : integer;
    hex_line: string;
begin
    Memo1.Font.Color := clRed;
    USB.set_driver(PChar(ComboBox1.Items.Strings[ComboBox1.ItemIndex])[0]);
    if USB.Open = False then USB.Open := True;
    if USB.Open = False then begin
        MessageBox(0,'Can Open disk, please check it!',nil,mb_OK);
        exit;
    end;
    index := strtoint(Edit1.Text);
    size := strtoint(Edit2.Text);
    GetMem(temp,size shl SECTRO_SHFT);
    memcopy(temp,Memo1.Lines.GetText,size shl SECTRO_SHFT);
    hex_line := '';
    for i := 0 to ((size shl SECTRO_SHFT)-1) do begin
        hex_line := hex_line + inttobcd(integer(temp[i]))+ ' ';
        if (((i+1) mod 16) = 0) and (i <>0) then begin
            hex_line := hex_line + #13#10;
        end;
    end;
    Memo2.Lines.SetText(PChar(hex_line));

    USB.SectorWrite_retry(temp,DWORD(index),DWORD(size));

    freeMem(temp);
end;

procedure TForm1.ComboBox1Click(Sender: TObject);
begin
    USB.set_driver(PChar(ComboBox1.Items.Strings[ComboBox1.ItemIndex])[0]);
    USB.Open := False;
    USB.Open := True;
    if USB.Open = False then begin
        MessageBox(0,'Can Open disk, please check it!',nil,mb_OK);
        exit;
    end;
end;

end.


⌨️ 快捷键说明

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