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

📄 xeduser.pas

📁 特别方便的工具程序
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit XEDUSER;

interface
uses
  Windows, WinSpool, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  BDE, ShellAPI, Math, StdCtrls, ExtCtrls, DBTables, DB, DBGrids, Registry,
  Printers, ComObj, ShlObj, ActiveX, Buttons;

const
  SysFile = 'D:\PAS\XED.INT';
type
  TCPUID = array[1..4] of Longint;
  TVChar = array[0..11] of char;

var
  KeyPath: string = 'SoftWare\MicroSoft\Windows\CurrentVersion\';
  MainCap: string = '';
  ShopName: string = '';
  CompName: string = '';
  ShopPass: string = '';
  ShopExec: string = '';
  ExePath: string = '';
  IniPath: string = '';
  CanEdit: Boolean = True;
  FirstUse: Boolean = True;
  OpenFile: Boolean = False;
  Registed: Boolean = False;
  MakeNews: Boolean = False;
  PassKey: string = 'Present';

var
  RegPass, CurPass: string;
  Name1, Name2: string;
  DeskBMP: string;
  CoName, SetTel: string;
  Truant: Word;
var
  Grade: Integer;
  SX, SY: Word;
  GDate1, GDate2: TDate;
  PrHandle: THandle;
procedure Run(S: string);
function NewCom(var Comb: TComboBox): Boolean;
procedure UpdateFieldName(Table: TTable; Mode: Boolean);
procedure SetRatio(X, Y: Word);
function GetDrive: string;
procedure SetAlias(NameStr, Dirstr: string);
procedure SetDBPass(Table: TTable; PS: string);
procedure PackTable(Table: TTable); overload;
procedure PackTable(Name: string); overload;
procedure PickStr(P: TColumn; tb: TTable; S: string);
procedure CloseMDI(H: THandle);

procedure GetPaper(List: TStrings);

function SetLocPrint(spSize, Wide, Leng: Integer; spOrder: Boolean): Boolean; overload;
function GetLocPrint(var spSize, Wide, Leng: Integer; var spOrder: Boolean): Boolean; overload;
function GetLocPrint(PS: TStringList): Boolean; overload;
function SetLocPrint(PS: TStringList): Boolean; overload;

function SetSysPrint(spSize, Wide, Leng: Integer; spOrder: Boolean): Boolean;
function GetSysPrint(var spSize, Wide, Leng: Integer; var spOrder: Boolean): Boolean;
function PrintName: PChar;
function PrintHandle: Cardinal;
function AbortPrint: Boolean;
function PrintState: integer;
function ENumPrint(S: TStrings): Boolean;
function CopyFiles(H: integer; F1, F2: string): Boolean;
function GetCPUID: TCPUID;
function GetCPUVendor: TVChar;
function FileVersion(S: string): string;
function DiskID(Drive: PChar): string;
function OutofDate: Boolean;
function EncodeStr(S: string): string;
procedure LoadSite(Form: TForm; Key: string);
procedure SaveSite(Form: TForm; Key: string);
function GetPYStr(HZStr: WideString): string;
procedure RedrawForm(Sender: TObject);
function CoinStr(SumCoin: Real): string;
function OICQ(const FName: string = 'C:\Program Files\Tencent\Dat\OICQ2000.CFG'): string;
procedure DeskShort(PathName: string; LinkName: WideString);
function TellMe(S: string): Boolean; overload;
function TellMe(N: integer): Boolean; overload;
function GetQuick(Input: string): string;

implementation

function TellMe(S: string): Boolean;
var
  ID: Integer;
begin
  ID := Application.MessageBox(PChar(S), '系统提示',
    MB_OK + MB_ICONQUESTION);
  Result := ID = ID_YES;
end;

function TellMe(N: integer): Boolean;
var
  ID: Integer;
begin
  ID := Application.MessageBox(PChar(IntToStr(N)), '系统提示',
    MB_OK + MB_ICONQUESTION + MB_TOPMOST);
  Result := ID = ID_YES;
end;

function GetDrive: string;
var
  drives: set of 0..25;
  drive: integer;
begin
  Result := '';
  DWORD(drives) := Windows.GetLogicalDrives;
  for drive := 0 to 25 do
    if drive in drives then
      Result := Result + Chr(drive + Ord('A'));
end;

procedure SetRatio(X, Y: Word);
var
  DM: TDeviceMode;
begin
  ENumDisplaySettings(nil, 0, DM);
  DM.dmFields := dm_pelswidth or dm_pelsheight;
  DM.dmPelsWidth := X;
  DM.dmPelsHeight := Y;
  ChangeDisplaySettings(DM, 1);
end;

procedure Run(S: string);
var P: array[0..79] of char;
begin
  StrPCopy(P, S);
  WinExec(P, 1);
end;

function NewCom(var Comb: TComboBox): Boolean;
var I: Integer;
  NewComb: Boolean;
begin
  NewComb := True;
  for i := 0 to Comb.Items.Count - 1 do
    if Comb.Text = Comb.Items[i] then
    begin
      NewComb := False;
      Break;
    end;
  if NewComb then Comb.items.Add(Comb.Text);
  NewCom := NewComb;
end;

procedure UpdateFieldName(Table: TTable; Mode: Boolean);
var
  Props: CURProps;
  hDb: hDBIDb;
  TableDesc: CRTblDesc;
  pFields: pFLDDesc;
  pOp: pCROpType;
  N: Byte;
begin
  Table.Close;
  Table.Exclusive := True;
  Table.Open;
  Check(DbiSetProp(hDBIObj(Table.Handle), curxltMODE, Integer(xltNONE)));
  Check(DbiGetCursorProps(Table.Handle, Props));
  if (Props.szTableType <> szPARADOX) and (Props.szTableType <> szDBASE) then
    raise EDatabaseError.Create('只是针对: Paradox, dBASE');

  pFields := AllocMem(Table.FieldCount * sizeof(FLDDesc));
  pOp := AllocMem(Table.FieldCount * sizeof(CROpType));
  try
    pOp^ := crMODIFY;
    Check(DbiGetFieldDescs(Table.Handle, pFields));
    for N := 1 to Table.FieldCount do begin
      pFields.iFldNum := N;
//      if Mode then StrPCopy(pFields.szName, GBToBIG5(pFields.szName))
//      else
//      StrPCopy(pFields.szName, BIG5ToGB(pFields.szName));
      Inc(pFields, 1);
    end;
    Dec(pFields, Table.FieldCount);
    FillChar(TableDesc, sizeof(TableDesc), #0);
    Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(hDb)));

    StrPCopy(TableDesc.szTblName, Table.TableName);
    StrPCopy(TableDesc.szTblType, Props.szTableType);
    TableDesc.iFldCount := Table.FieldCount;
    TableDesc.pecrFldOp := pOp;
    TableDesc.pFldDesc := pFields;
    Table.Close;
    Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False));
  finally
    if pOp <> nil then FreeMem(pOp);
    if pFields <> nil then FreeMem(pFields);
  end;
end;

procedure SetAlias(NameStr, Dirstr: string);
var
  P: string;
begin
  P := Copy(Dirstr, 1, 2);
  with Session do begin
    if IsAlias(NameStr) then
      DeleteAlias(NameStr);
    Close;
    if DRIVE_REMOTE = GetDriveType(PChar(P)) then begin
      NetFileDir := DirStr;
      Showmessage('设置指定的网络驱动器作为系统数据库路径');
    end else NetFileDir := '';
    ConfigMode := cmSession;
    AddStandardAlias(NameStr, Dirstr, 'PARADOX');
    Open;
  end;
end;

procedure SetDBPass(Table: TTable; PS: string);
var
  TblDesc: CRTblDesc;
  hDb: hDBIDb;
  O, M: Boolean;
begin
  O := Table.Active;
  M := Table.Exclusive;
  Table.Open;
  HDb := Table.Database.Handle;
//  Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(hDb)));
  Table.Close;
  Table.Exclusive := True;
  FillChar(TblDesc, SizeOf(CRTblDesc), 0);
  StrPCopy(TblDesc.szTblName, Table.TableName);
  StrCopy(TblDesc.szTblType, szPARADOX);
  StrPCopy(TblDesc.szPassword, Ps);
  TblDesc.bProtected := True;

  { 添加主口令到PARADOX表里}
  Check(DbiDoRestructure(hDb, 1, @TblDesc, nil, nil, nil, FALSE));
   {添加一个新口令到SESSION}
  Table.Exclusive := M;
  Table.Active := O;
end;

procedure PackTable(Table: TTable);
var
  Props: CURProps;
  hDb: hDBIDb;
  TableDesc: CRTblDesc;
begin
  Table.Close;
  Table.Exclusive := True;
  try
    Table.Open;
    HDb := Table.Database.Handle;
    DbiGetCursorProps(Table.Handle, Props);
    Table.Close;
    if (Props.szTableType = szPARADOX) then begin
      FillChar(TableDesc, sizeof(TableDesc), 0);
      StrPCopy(TableDesc.szTblName, Table.TableName);
      StrPCopy(TableDesc.szTblType, Props.szTableType);
      TableDesc.bPack := True;
      DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False);
    end;
  except
    on E: Exception do begin
      Beep;
      ShowMessage(E.Message);
    end;
  end;
end;

procedure PackTable(Name: string);
//DbiPackTable(Table1.DBHandle, Table1.Handle, nil, szdBASE, True);
var
  Props: CURProps;
  hDb: hDBIDb;
  TableDesc: CRTblDesc;
  Table: TTable;
begin
  Table := TTable.Create(nil);
  Table.Exclusive := True;
  Name := ExpandFileName(Name);
  Table.TableName := Name;
  try
    Table.Open;
    HDb := Table.Database.Handle;
    DbiGetCursorProps(Table.Handle, Props);
    Table.Close;
    if (Props.szTableType = szPARADOX) then begin
      FillChar(TableDesc, sizeof(TableDesc), 0);
      StrPCopy(TableDesc.szTblName, Table.TableName);
      StrPCopy(TableDesc.szTblType, Props.szTableType);
      TableDesc.bPack := True;
      DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False);
    end;
  except
    Showmessage('因故无法整理数据库:' + Name);
  end;
  Table.Free;
end;

procedure PickStr(P: TColumn; tb: TTable; S: string);
var
  Opened: Boolean;
begin
  Opened := tb.Active;
  tb.Open;
  tb.First;
  tb.DisableControls;
  P.PickList.Clear;
  while not tb.eof do begin
    P.PickList.Add(tb[S]);
    tb.Next;
  end;
  tb.Active := Opened;
  tb.enableControls;
end;

function GetPass(S: string): Real;
var
  I: Word;
  T: Real;
begin
  T := 1.2345678;
  for i := 1 to Length(S) do T := T * Byte(S[I]);
  Result := T;
end;


procedure CloseMDI(H: THandle);
begin
  SendMessage(application.mainform.ClientHandle, WM_MDIDESTROY, H, 0);
end;

procedure GetPaper(List: TStrings);
type
  TPaperName = array[1..64] of Char;
  TPaperNames = array[0..0] of TPaperName;
  PPaperNames = ^TPaperNames;

  TPaper = Word;
  TPapers = array[0..0] of TPaper;
  PPapers = ^TPapers;
var
  Dev, Drv, Port: array[1..128] of Char;
  hDMode: THandle;
  pDMode: PDevMode;
  I, Num: Integer;
  PAPERNAMES: PPaperNames;
  PAPERS: PPapers;
begin
  Printer.GetPrinter(@Dev, @Drv, @Port, hDMode);
  if hDMode <> 0 then begin
    pDMode := GlobalLock(hDMode);
    //获取纸张名称
    Num := DeviceCapabilities(@Dev, @Port, DC_PAPERNAMES, nil, @pDMode);
    GetMem(PAPERNAMES, Num * Sizeof(TPaperName));
    DeviceCapabilities(@Dev, @Port, DC_PAPERNAMES, PChar(PAPERNAMES), @pDMode);

    //获取纸张大小
    Num := DeviceCapabilities(@Dev, @Port, DC_PAPERS, nil, @pDMode);
    GetMem(PAPERS, Num * Sizeof(TPaper));
    DeviceCapabilities(@Dev, @Port, DC_PAPERS, PChar(PAPERS), @pDMode);
    for i := 0 to Num - 1 do List.AddObject(PaperNames[i], TObject(Papers[i]));
    GlobalUnlock(hDMode);
  end;
end;

function GetLocPrint(var spSize, Wide, Leng: Integer; var spOrder: Boolean): Boolean;
type
  TPaperName = array[1..64] of Char;
  TPaperNames = array[0..0] of TPaperName;
  PPaperNames = ^TPaperNames;
var
  Dev, Drv, Port: array[1..128] of Char;
  hDMode: THandle;
  pDMode: PDevMode;
begin
  Printer.GetPrinter(@Dev, @Drv, @Port, hDMode);
  if hDMode <> 0 then begin
    pDMode := GlobalLock(hDMode);
    if pDMode <> nil then begin
      spOrder := pDMode.dmOrientation = 1;
      spSize := pDMode.dmPaperSize;
      Wide := pDMode.dmPaperWidth;
      Leng := pDMode.dmPaperLength;
    end;
    GlobalUnlock(hDMode);
  end;
  Result := True;
end;

function SetLocPrint(spSize, Wide, Leng: Integer; spOrder: Boolean): Boolean; overload;
type
  TPaperName = array[1..64] of Char;
  TPaperNames = array[0..0] of TPaperName;
  PPaperNames = ^TPaperNames;
var
  Dev, Drv, Port: array[1..128] of Char;
  hDMode: THandle;
  pDMode: PDevMode;
begin
  Printer.PrinterIndex := Printer.PrinterIndex;
  Printer.GetPrinter(@Dev, @Drv, @Port, hDMode);
  if hDMode <> 0 then begin
    pDMode := GlobalLock(hDMode);
    if pDMode <> nil then begin
      if spOrder then
        pDMode.dmOrientation := DMORIENT_PORTRAIT
      else
        pDMode.dmOrientation := DMORIENT_LANDSCAPE;
      pDMode.dmPaperSize := spSize;
      pDMode.dmPaperLength := Leng;
      pDMode.dmPaperWidth := Wide;
      pDMode.dmMediaType := 1;
      pDMode.dmFields := pDMode.dmFields
        or dm_Orientation
        or dm_PaperSize
        or dm_PaperLength
        or dm_PaperWidth
        or dm_MediaType;
    end;
    GlobalUnlock(hDMode);
  end;
  Printer.PrinterIndex := Printer.PrinterIndex;
  Result := True;
end;

function GetLocPrint(PS: TStringList): Boolean;
type
  TPaperName = array[1..64] of Char;
  TPaperNames = array[0..0] of TPaperName;
  PPaperNames = ^TPaperNames;
var
  Dev, Drv, Port: array[1..128] of Char;
  hDMode: THandle;
  pDMode: PDevMode;
begin
  PS.Clear;
  Printer.GetPrinter(@Dev, @Drv, @Port, hDMode);
  if hDMode <> 0 then begin
    pDMode := GlobalLock(hDMode);
    if pDMode <> nil then begin
      PS.Add(Format('纸张=%d', [pDMode.dmPaperSize]));
      PS.Add(Format('宽度=%d', [pDMode.dmPaperWidth]));
      PS.Add(Format('长度=%d', [pDMode.dmPaperLength]));
      PS.Add(Format('方向=%d', [pDMode.dmOrientation]));
    end;
    GlobalUnlock(hDMode);
  end;
  Result := True;
end;

function SetLocPrint(PS: TStringList): Boolean;
type
  TPaperName = array[1..64] of Char;
  TPaperNames = array[0..0] of TPaperName;
  PPaperNames = ^TPaperNames;
var
  Dev, Drv, Port: array[1..128] of Char;
  hDMode: THandle;
  pDMode: PDevMode;
begin
  Printer.PrinterIndex := Printer.PrinterIndex;
  Printer.GetPrinter(@Dev, @Drv, @Port, hDMode);
  if hDMode <> 0 then begin
    pDMode := GlobalLock(hDMode);
    if pDMode <> nil then begin
      pDMode.dmPaperSize := StrToInt(PS.Values['纸张']);
      pDMode.dmPaperWidth := StrToInt(PS.Values['宽度']);
      pDMode.dmPaperLength := StrToInt(PS.Values['长度']);
      pDMode.dmOrientation := StrToInt(PS.Values['方向']);
      pDMode.dmMediaType := 1;
      pDMode.dmFields := pDMode.dmFields
        or dm_Orientation
        or dm_PaperSize
        or dm_PaperLength
        or dm_PaperWidth
        or dm_MediaType;
    end;
    GlobalUnlock(hDMode);
  end;
  Printer.PrinterIndex := Printer.PrinterIndex;
  Result := True;
end;

function GetSysPrint(var spSize, Wide, Leng: Integer; var spOrder: Boolean): Boolean;
var
  S3: Cardinal;
  P1: _PRINTER_INFO_2;
  DV: Devmode;
  Buffer: array[1..1200] of Byte;
begin
  S3 := 1000;
  spSize := 0;
  spOrder := True;
  if not GetPrinter(PrHandle, 2, @Buffer[1], S3, @S3) then
  begin
    Result := False;
    Exit;
  end;
  Move(Buffer[1], P1, Sizeof(P1));

⌨️ 快捷键说明

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