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

📄 unitmain.pas

📁 西门子 X65 系列手机截屏工具
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit UnitMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, BFC, ComPort, Crc16, ComCtrls, ExtCtrls, StdCtrls, Buttons, jpeg,
  ExtDlgs, Menus, DateUtils ,IniFiles;

type
  TfrmMain = class(TForm)
    PanelTop: TPanel;
    PanelLeft: TPanel;
    ScrollBox1: TScrollBox;
    StatusBar1: TStatusBar;
    btnCommOpen: TBitBtn;
    CommList: TComboBox;
    Bevel1: TBevel;
    Label1: TLabel;
    DispPic: TPanel;
    BitBtn1: TBitBtn;
    ImageA: TImage;
    Panel1: TPanel;
    Image1: TImage;
    Panel2: TPanel;
    Image2: TImage;
    Panel3: TPanel;
    Image3: TImage;
    Panel4: TPanel;
    Image4: TImage;
    Panel6: TPanel;
    Image6: TImage;
    Panel5: TPanel;
    Image5: TImage;
    Panel7: TPanel;
    Image7: TImage;
    Panel8: TPanel;
    Image8: TImage;
    CheckBox1: TCheckBox;
    BitBtn2: TBitBtn;
    SavePictureDialog1: TSavePictureDialog;
    RadioGroup1: TRadioGroup;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    SpeedButton4: TSpeedButton;
    SpeedButton3: TSpeedButton;
    ImageT: TImage;
    Label4: TLabel;
    Label3: TLabel;
    Label5: TLabel;
    Label2: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Panel9: TPanel;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton6: TSpeedButton;
    SpeedButton5: TSpeedButton;
    SpeedButton7: TSpeedButton;
    procedure btnCommOpenClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure Image1DragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure Image1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure BitBtn2Click(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure ImageAMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure SavePictureDialog1TypeChange(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure SpeedButton3Click(Sender: TObject);
    procedure SpeedButton4Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure SpeedButton5Click(Sender: TObject);
    procedure SpeedButton6Click(Sender: TObject);
    procedure SpeedButton7Click(Sender: TObject);
    procedure BitBtn1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure ShowErr(Mess:String);
    function CommOpen(CommNum:Integer):Boolean;
    procedure GetDisp;
    //procedure SetLang;
  end;

const
  COMSTAT     = 0;
  MESSINFO    = 1;

var
  frmMain: TfrmMain;
  BufferAddress : DWord;
  DisplayWidth, DisplayHeight : Word;
  ClientID: Byte;
  inifile: TIniFile;
  Product, SW_Version,CurrentMode,CapTime, Scre,CopyErr,OpenErr,Conn:String;
  DisConn,ConnErr,Tips,ConnSucc :string;
implementation

uses UnitAbout, UnitTools;

{$R *.dfm}
{$R WindowsXP.res}
procedure TfrmMain.ShowErr(Mess:String);
begin
  MessageBox(handle,PChar(Mess),'系统提示',MB_ICONERROR);
end;

function TfrmMain.CommOpen(CommNum:Integer):Boolean;
var
  Ver:string;
begin
  Result := false;
  iComNum := CommNum;
  if not OpenCom(False) then
  begin
    ShowErr('COM'+IntToStr(CommNum)+OpenErr);
    Exit;
  end;
  Sleep(300);
  WriteComStr('AT^SQWE=1'^M);  // BFC 模式
  ReadBFC;
  Ver := BFC_GetPhoneModel;
  StatusBar1.Panels[COMSTAT].Text := 'COM'+IntToStr(CommNum)+
                                     ':'+Ver +ConnSucc;

  if BFC_Funcs20($0A, [$07,$01], 2)<>ERR_NO then  // 屏幕信息
  begin
    ShowErr(ConnErr);
    Exit;
  end;
  DisplayWidth  := ibfc.cd.DisplayInfo.Width;
  DisplayHeight := ibfc.cd.DisplayInfo.Height;
  ClientID      := ibfc.cd.DisplayInfo.ClientID;

  DispPic.Width := DisplayWidth+2;DispPic.Height:= DisplayHeight+2;
  Panel1.Width := DisplayWidth+2;Panel1.Height:= DisplayHeight+2;
  Panel2.Width := DisplayWidth+2;Panel2.Height:= DisplayHeight+2;
  Panel3.Width := DisplayWidth+2;Panel3.Height:= DisplayHeight+2;
  Panel4.Width := DisplayWidth+2;Panel4.Height:= DisplayHeight+2;
  Panel5.Width := DisplayWidth+2;Panel5.Height:= DisplayHeight+2;
                                 Panel5.Top := Panel1.Top+Panel1.Height+7;
  Panel6.Width := DisplayWidth+2;Panel6.Height:= DisplayHeight+2;
                                 Panel6.Top := Panel1.Top+Panel1.Height+7;
  Panel7.Width := DisplayWidth+2;Panel7.Height:= DisplayHeight+2;
                                 Panel7.Top := Panel1.Top+Panel1.Height+7;
  Panel8.Width := DisplayWidth+2;Panel8.Height:= DisplayHeight+2;
                                 Panel8.Top := Panel1.Top+Panel1.Height+7;

  Label1.Caption := Scre+IntToStr(DisplayHeight)+
                    '*'+IntToStr(DisplayWidth);
  BitBtn1.Top := DispPic.Top + DisplayHeight + 6;
  SpeedButton6.Top := DispPic.Top + DisplayHeight + 6;

  Label8.Caption := Product+Ver;
  //Label6.Caption := 'IMEI: '+BFC_GetIMEI;
  Label7.Caption := SW_Version+'V'+BFC_GetSoftWareVer;
  Label9.Caption := CurrentMode+BFC_GetSecurityMode;

  if BFC_Funcs20($0A, [$09,ClientID], 2)<>ERR_NO then
  begin
    ShowErr('获取手机缓冲区地址失败!');
    Exit;
  end;
  BufferAddress := ibfc.cd.DisplayUpdateInfo.BufferAddress;
  Result := true;
end;



procedure TfrmMain.btnCommOpenClick(Sender: TObject);
var
  COMID:string;
begin
  if btnCommOpen.Tag = 0{'连接'} then
  begin
    COMID := CommList.Text;
    Delete(COMID,1,3);
    if not CommOpen(StrToInt(COMID)) then
    begin
      //ShowErr('COM'+IntToStr(CommList.ItemIndex+1)+' 打开失败!');
      Exit;
    end;
    btnCommOpen.Caption := DisConn;//'断开';
    btnCommOpen.Tag := 1;
    BitBtn1.Enabled := true;
    SpeedButton5.Enabled := true;
    SpeedButton2.Enabled := false;
    Inifile.WriteString('COMM', 'Port',CommList.Text);
    //StatusBar1.Panels[COMSTAT].Text := 'COM'+IntToStr(CommList.ItemIndex+1)+' 打开成功!'
  end
  else
  begin
    BFC_SendAT('AT^SQWE=0'^M);
    CloseCom;
    btnCommOpen.Caption := Conn;
    btnCommOpen.Tag := 0;
    Label1.Caption := Scre;//'屏幕:';
    BitBtn1.Enabled := false;
    SpeedButton5.Enabled := false;
    SpeedButton2.Enabled := true;
    StatusBar1.Panels[COMSTAT].Text := 'COM '+DisConn;
  end;
end;

procedure TfrmMain.FormShow(Sender: TObject);
var
  I,OldCOM: Integer;
  CommName: String;
begin
  OldCOM := -1;
  Inifile := TInifile.Create(ExtractFilePath(Application.ExeName)+'X65.ini');
  CommName := Inifile.ReadString('COMM', 'Port', '');
  SpeedButton7.Caption := Inifile.ReadString('LANGUAGE','LANGUAGE', 'English');

  if SpeedButton7.Caption = 'Chinese' then
  begin
    SpeedButton7.Tag := 0;
    SpeedButton7Click(Sender);
  end
  else
  begin
    SpeedButton7.Tag := 1;
    SpeedButton7Click(Sender);
  end;
  // 取得串口列表
  CommList.Items.Clear;
  for I := 1 to 15 do    // Iterate
  begin
    iComNum := I;
    if OpenCom(False) then
    begin
      CommList.Items.Add(Format('COM%d',[I]));
      if CommName=Format('COM%d',[I]) then OldCOM := CommList.Items.Count-1;
      CloseCom;
    end;
  end;    // for

  if OldCOM=-1 then
    CommList.ItemIndex := CommList.Items.Count-1
  else
    CommList.ItemIndex := OldCOM;

  Label8.Caption := '';
  Label6.Caption := '';
  Label7.Caption := '';
  Label9.Caption := '';
end;

procedure TfrmMain.GetDisp;
var
  I, J, H : Integer;
  Addr: DWord;
  b:array of byte;
  w:array of word absolute b;
  Bitmap:  TBitmap;
  Row   :  pWordArray;// from SysUtils
begin
  SetLength(b,DisplayWidth*2);
  SetLength(w,DisplayWidth);
  Bitmap := TBitmap.Create;
  Bitmap.PixelFormat := pf16bit;
  Bitmap.Width  := DisplayWidth;
  Bitmap.Height := DisplayHeight;
  BitBtn1.Enabled := false;
  CheckBox1.Enabled := false;
  //StatusBar1.Panels[MESSINFO].Text := '正在截取屏幕内容,请稍等...';
  H := -2;
  try
    for I := 0 to DisplayHeight - 1 do    // Iterate
    begin
      if CheckBox1.Checked then
        H := H+2
      else H := I;
      if H< (DisplayHeight - 1) then
        Addr := BufferAddress+H*DisplayWidth*2
      else begin
        H := -1;
        continue;
      end;
      //Addr := BufferAddress+I*DisplayWidth*2;
      if not BFCReadMem(Addr,DisplayWidth*2,b) then
      begin
        ShowErr(CopyErr);
        Break;
      end;
      Row := Bitmap.Scanline[H];
      for J := 0 to DisplayWidth - 1 do    // Iterate

⌨️ 快捷键说明

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