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

📄 unitpublicfunction.pas

📁 手机批发商进销存管理
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  lpnLength:DWORD;
begin
  Result :='';
  lpnLength := 0;
  WNetGetUser(Nil,Nil,lpnLength);
  if lpnLength>0 then
  begin
    GetMem(lpUserName,lpnLength);
    if WNetGetUser(lpName,lpUserName,lpnLength)=NO_ERROR then
      Result := lpUserName;
    FreeMem(lpUserName,lpnLength);
  end;
end;

function HideAppTask:Boolean;//使程序不出现在任务栏
begin
  try
    SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
    result := True;
  except
    result := False;
  end;
end;

function SetComputerName(name:string):Boolean;//改变计算机在网络中的名字
begin
  try
    SetComputerName(PChar(name));
    result := True;
  except
    result := False;
  end;
end;

function GetSysPath:string;//获取WINDOWS系统路径
var
  MySysPath : PChar;
begin
  GetMem(MySysPath,255);
  GetSystemDirectory(MySysPath,255);
  Result := MySysPath;
end;

function GetSysInfo:string;//获取WINDOWS版本信息
var
  s : AnsiString;
  OSVI : OSVERSIONINFO;
begin
  OSVI.dwOSVersionInfoSize := sizeof(OSVERSIONINFO);
  GetVersionEx(OSVI);
  s := IntToStr(OSVI.dwMajorVersion)+'.'+IntToStr(OSVI.dwMinorVersion)
       +'.'+IntToStr(OSVI.dwBuildNumber)+'.'+IntToStr(OSVI.dwPlatformId)
       +OSVI.szCSDVersion;
  Result := s;
end;

function IsEqualsTStrs(A,B:TStrings):Boolean;//比较两个TStrings
var
  i : integer;
  function SearchTStrs(tmpstr:string;sourceTStrs:TStrings):Boolean;
  var
    j : integer;
  begin
    Result := False;
    for j:=0 to sourceTStrs.Count-1 do
    begin
      if tmpstr=sourceTStrs.Strings[j] then
      begin
        Result := True;
        Break;
      end;
    end;
  end;
begin
  Result := True;
  if A.Count<>B.Count then
  begin
    Result := False;
    Exit;
  end;
  for i:=0 to A.Count-1 do
  begin
    if not SearchTStrs(A.Strings[i],B) then
    begin
      Result := False;
      Break;
    end;
  end;
end;

function IsDate(tmp:string):Boolean;//判断是否为合法日期
var
  s : string;
begin
  Result := True;
  if tmp<>'' then
  begin
    if length(tmp)<>8 then
    begin
      Result := False;
      Exit;
    end;
    try
      s := copy(tmp,1,4)+'-'+copy(tmp,5,2)+'-'+copy(tmp,7,2);
      StrToDate(s);
    except
      Result := False;
    end;
  end;
end;

function CopyDir(fromdir,todir:string):Boolean;
var
  OPStruc : TSHFileOpStruct;
  frombuf,tobuf : array [0..128] of Char;
begin
  try
    Result := False;
    FillChar(frombuf,sizeof(frombuf),0);
    FillChar(tobuf,sizeof(tobuf),0);
    if copy(fromdir,length(fromdir),1)='\' then
      StrPCopy(frombuf,fromdir+'\*.*')
    else
      StrPCopy(frombuf,fromdir);
    StrPCopy(tobuf,todir);
    with OpStruc do
    begin
      Wnd := Application.Handle;
      wFunc := FO_COPY;
      pFrom := @frombuf;
      pTo := @tobuf;
      fFlags := FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
      fAnyOperationsAborted := False;
      hNameMappings := Nil;
      lpszProgressTitle := Nil;
    end;
    ShFileOperation(OpStruc);
    Result := True;
  except
    Result := False;
  end;
end;

function GetIdeSerialNumber: PChar;//获取第一个IDE硬盘的序列号
const
   IDENTIFY_BUFFER_SIZE = 512;
type
   TIDERegs = packed record
    bFeaturesReg     : BYTE; // Used for specifying SMART "commands".
    bSectorCountReg  : BYTE; // IDE sector count register
    bSectorNumberReg : BYTE; // IDE sector number register
    bCylLowReg       : BYTE; // IDE low order cylinder value
    bCylHighReg      : BYTE; // IDE high order cylinder value
    bDriveHeadReg    : BYTE; // IDE drive/head register
    bCommandReg      : BYTE; // Actual IDE command.
    bReserved        : BYTE; // reserved for future use.  Must be zero.
  end;
  TSendCmdInParams = packed record
    // Buffer size in bytes
    cBufferSize  : DWORD;
    // Structure with drive register values.
    irDriveRegs  : TIDERegs;
    // Physical drive number to send command to (0,1,2,3).
    bDriveNumber : BYTE;
    bReserved    : Array[0..2] of Byte;
    dwReserved   : Array[0..3] of DWORD;
    bBuffer      : Array[0..0] of Byte;  // Input buffer.
  end;
  TIdSector = packed record
    wGenConfig                 : Word;
    wNumCyls                   : Word;
    wReserved                  : Word;
    wNumHeads                  : Word;
    wBytesPerTrack             : Word;
    wBytesPerSector            : Word;
    wSectorsPerTrack           : Word;
    wVendorUnique              : Array[0..2] of Word;
    sSerialNumber              : Array[0..19] of CHAR;
    wBufferType                : Word;
    wBufferSize                : Word;
    wECCSize                   : Word;
    sFirmwareRev               : Array[0..7] of Char;
    sModelNumber               : Array[0..39] of Char;
    wMoreVendorUnique          : Word;
    wDoubleWordIO              : Word;
    wCapabilities              : Word;
    wReserved1                 : Word;
    wPIOTiming                 : Word;
    wDMATiming                 : Word;
    wBS                        : Word;
    wNumCurrentCyls            : Word;
    wNumCurrentHeads           : Word;
    wNumCurrentSectorsPerTrack : Word;
    ulCurrentSectorCapacity    : DWORD;
    wMultSectorStuff           : Word;
    ulTotalAddressableSectors  : DWORD;
    wSingleWordDMA             : Word;
    wMultiWordDMA              : Word;
    bReserved                  : Array[0..127] of BYTE;
  end;
  PIdSector = ^TIdSector;
  TDriverStatus = packed record
    // 驱动器返回的错误代码,无错则返回0
    bDriverError : Byte;
    // IDE出错寄存器的内容,只有当bDriverError 为 SMART_IDE_ERROR 时有效
    bIDEStatus   : Byte;
    bReserved    : Array[0..1] of Byte;
    dwReserved   : Array[0..1] of DWORD;
  end;
  TSendCmdOutParams = packed record
    // bBuffer的大小
    cBufferSize  : DWORD;
    // 驱动器状态
    DriverStatus : TDriverStatus;
    // 用于保存从驱动器读出的数据的缓冲区,实际长度由cBufferSize决定
    bBuffer      : Array[0..0] of BYTE;
  end;
var
  hDevice : THandle;
  cbBytesReturned : DWORD;
  ptr : PChar;
  SCIP : TSendCmdInParams;
  aIdOutCmd : Array [0..(SizeOf(TSendCmdOutParams)+IDENTIFY_BUFFER_SIZE-1)-1] of Byte;
  IdOutCmd  : TSendCmdOutParams absolute aIdOutCmd;
procedure ChangeByteOrder( var Data; Size : Integer );
var ptr : PChar;
    i : Integer;
    c : Char;
begin
  ptr := @Data;
  for i := 0 to (Size shr 1)-1 do begin
    c := ptr^;
    ptr^ := (ptr+1)^;
    (ptr+1)^ := c;
    Inc(ptr,2);
  end;
end;
begin
  Result := ''; // 如果出错则返回空串
  if SysUtils.Win32Platform=VER_PLATFORM_WIN32_NT then// Windows NT, Windows 2000
  begin
      // 提示! 改变名称可适用于其它驱动器,如第二个驱动器: '\\.\PhysicalDrive1\'
      hDevice := CreateFile( '\\.\PhysicalDrive0', GENERIC_READ or GENERIC_WRITE,
        FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0 );
  end
  else // Version Windows 95 OSR2, Windows 98
  begin
    hDevice := CreateFile( '\\.\SMARTVSD', 0, 0, nil, CREATE_NEW, 0, 0 );
  end;
  if hDevice=INVALID_HANDLE_VALUE then Exit;
  try
    FillChar(SCIP,SizeOf(TSendCmdInParams)-1,#0);
    FillChar(aIdOutCmd,SizeOf(aIdOutCmd),#0);
    cbBytesReturned := 0;
    // Set up data structures for IDENTIFY command.
    with SCIP do
    begin
      cBufferSize  := IDENTIFY_BUFFER_SIZE;
//      bDriveNumber := 0;
      with irDriveRegs do
      begin
        bSectorCountReg  := 1;
        bSectorNumberReg := 1;
//      if Win32Platform=VER_PLATFORM_WIN32_NT then bDriveHeadReg := $A0
//      else bDriveHeadReg := $A0 or ((bDriveNum and 1) shl 4);
        bDriveHeadReg    := $A0;
        bCommandReg      := $EC;
      end;
    end;
    if not DeviceIoControl( hDevice, $0007c088, @SCIP, SizeOf(TSendCmdInParams)-1,
      @aIdOutCmd, SizeOf(aIdOutCmd), cbBytesReturned, nil ) then Exit;
  finally
    CloseHandle(hDevice);
  end;
  with PIdSector(@IdOutCmd.bBuffer)^ do
  begin
    ChangeByteOrder( sSerialNumber, SizeOf(sSerialNumber) );
    (PChar(@sSerialNumber)+SizeOf(sSerialNumber))^ := #0;
    Result := PChar(@sSerialNumber);
  end;
end;

function GetGUID:String;
var
  TmpGUID: TGUID;
begin
  Result := 'error';
  if CoCreateGUID(TmpGUID) = S_OK then
    Result := GUIDToString(TmpGUID);
end;

end.

⌨️ 快捷键说明

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