git-svn-id: https://192.168.0.254/svn/Proyectos.EstudioCarnicero_ProGestion/trunk@4 1b8572a8-2d6b-b84e-8c90-20ed86fa4eca
249 lines
7.1 KiB
ObjectPascal
249 lines
7.1 KiB
ObjectPascal
{
|
|
===============================================================================
|
|
Copyright (©) 2002. Rodax Software.
|
|
===============================================================================
|
|
Los contenidos de este fichero son propiedad de Rodax Software titular del
|
|
copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado,
|
|
en su totalidad o en parte, con el permiso escrito de Rodax Software, o de
|
|
acuerdo con los términos y condiciones establecidas en el acuerdo/contrato
|
|
bajo el que se suministra.
|
|
-----------------------------------------------------------------------------
|
|
Web: www.rodax-software.com
|
|
===============================================================================
|
|
Fecha primera versión: 01-11-2002
|
|
Versión actual: 1.0.0
|
|
Fecha versión actual: 01-11-2002
|
|
===============================================================================
|
|
Modificaciones:
|
|
|
|
Fecha Comentarios
|
|
---------------------------------------------------------------------------
|
|
===============================================================================
|
|
}
|
|
|
|
unit uSysFunc;
|
|
|
|
interface
|
|
|
|
{ Funciones del sistema }
|
|
function Ejecutar (const LineaComando: String; Oculto, Esperar: Boolean) : Boolean;
|
|
function DarRutaTemporal : String;
|
|
function DarFicheroTemporal : String;
|
|
function DarFicheroBMPTemporal : String;
|
|
function DarFicheroTIFFTemporal : String;
|
|
function DarFicheroExportar (var Fichero : String) : Boolean;
|
|
function DarVersionFichero (Executable : String) : String;
|
|
function DarFechaFichero (Executable : String) : String;
|
|
procedure CopiarFichero(const Origen, Destino: string);
|
|
procedure DoDelTree( TheDir : String);
|
|
procedure Deltree(DirToKill : String; KillChoosenDir : Boolean);
|
|
|
|
|
|
implementation
|
|
|
|
uses
|
|
SysUtils, Windows, Dialogs,
|
|
|
|
Messages, Classes, Graphics, Controls, Forms,
|
|
StdCtrls;
|
|
|
|
function Ejecutar (const LineaComando: String; Oculto, Esperar: Boolean): Boolean;
|
|
var
|
|
StartupInfo : TStartupInfo;
|
|
ProcessInfo : TProcessInformation;
|
|
begin
|
|
{setup the startup information for the application }
|
|
FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
|
|
with StartupInfo do
|
|
begin
|
|
cb := SizeOf(TStartupInfo);
|
|
dwFlags:= STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
|
|
if Oculto then
|
|
wShowWindow:= SW_HIDE
|
|
else
|
|
wShowWindow:= SW_SHOWNORMAL;
|
|
end;
|
|
|
|
Result := CreateProcess(nil,PChar(LineaComando), nil, nil, False,
|
|
NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo);
|
|
if Esperar then
|
|
if Result then
|
|
begin
|
|
WaitForInputIdle(ProcessInfo.hProcess, INFINITE);
|
|
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
|
|
end;
|
|
end;
|
|
|
|
function DarRutaTemporal: String;
|
|
var
|
|
nBufferLength : DWORD; // size, in characters, of the buffer
|
|
lpBuffer : PChar; // address of buffer for temp. path
|
|
begin
|
|
nBufferLength := MAX_PATH + 1; // initialize
|
|
GetMem( lpBuffer, nBufferLength );
|
|
try
|
|
if GetTempPath( nBufferLength, lpBuffer ) <> 0 then
|
|
Result := StrPas( lpBuffer )
|
|
else
|
|
Result := '';
|
|
finally
|
|
FreeMem( lpBuffer );
|
|
end;
|
|
end;
|
|
|
|
function DarFicheroTemporal : String;
|
|
var
|
|
Buf: array [0..MAX_PATH] of Char;
|
|
RutaTmp : string;
|
|
begin
|
|
RutaTmp := DarRutaTemporal;
|
|
if GetTempFileName(PChar(RutaTmp), 'tmp', 0, Buf) <> 0 then
|
|
SetString(Result, Buf, StrLen(Buf))
|
|
else
|
|
Result := '';
|
|
end;
|
|
|
|
function DarFicheroTIFFTemporal : String;
|
|
var
|
|
Cadena : String;
|
|
begin
|
|
Cadena := DarFicheroTemporal;
|
|
Result := Copy(Cadena, 0, (Length(Cadena)-3)) + 'tif';
|
|
end;
|
|
|
|
function DarFicheroBMPTemporal : String;
|
|
var
|
|
Cadena : String;
|
|
begin
|
|
Cadena := DarFicheroTemporal;
|
|
Result := Copy(Cadena, 0, (Length(Cadena)-3)) + 'bmp';
|
|
end;
|
|
|
|
function DarFicheroExportar (var Fichero : String) : Boolean;
|
|
var
|
|
DialogoSalvar : TSaveDialog;
|
|
begin
|
|
Result := False;
|
|
DialogoSalvar := TSaveDialog.Create(NIL);
|
|
try
|
|
with DialogoSalvar do
|
|
begin
|
|
DefaultExt := 'doc';
|
|
Filter := 'Documento de Word (*.doc)|*.doc';
|
|
FilterIndex := 0;
|
|
Options := [ofOverwritePrompt, ofHideReadOnly, ofPathMustExist, ofEnableSizing];
|
|
end;
|
|
Result := DialogoSalvar.Execute;
|
|
if Result then
|
|
Fichero := DialogoSalvar.FileName;
|
|
finally
|
|
DialogoSalvar.Free;
|
|
end;
|
|
end;
|
|
|
|
function DarVersionFichero (Executable : String) : String;
|
|
var
|
|
Size, Size2: DWord;
|
|
Pt, Pt2: Pointer;
|
|
begin
|
|
Size := GetFileVersionInfoSize(PChar (Executable), Size2);
|
|
if Size > 0 then
|
|
begin
|
|
GetMem (Pt, Size);
|
|
try
|
|
GetFileVersionInfo (PChar (Executable), 0, Size, Pt);
|
|
VerQueryValue (Pt, '\', Pt2, Size2);
|
|
with TVSFixedFileInfo (Pt2^) do
|
|
begin
|
|
Result:= IntToStr (HiWord (dwFileVersionMS)) + '.' +
|
|
IntToStr (LoWord (dwFileVersionMS)) + '.' +
|
|
IntToStr (HiWord (dwFileVersionLS)) + '.' +
|
|
IntToStr (LoWord (dwFileVersionLS));
|
|
end;
|
|
finally
|
|
FreeMem (Pt);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function DarFechaFichero (Executable : String) : String;
|
|
var
|
|
FileTime, LocalFileTime : TFileTime;
|
|
SystemTime : TSystemTime;
|
|
hFile : Integer;
|
|
begin
|
|
hFile := FileOpen(Executable, fmShareDenyNone);
|
|
try
|
|
if hFile <> -1 then
|
|
begin
|
|
Windows.GetFileTime( hFile, nil, nil, @FileTime ); // ftLasWriteTime
|
|
// Change the file time to local time
|
|
FileTimeToLocalFileTime( FileTime, LocalFileTime );
|
|
if FileTimeToSystemTime(LocalFileTime, SystemTime) then
|
|
Result := DateTimeToStr(SystemTimeToDateTime(SystemTime));
|
|
end; // if hFile <> 0
|
|
finally
|
|
FileClose( hFile );
|
|
end; // try
|
|
end;
|
|
|
|
|
|
procedure CopiarFichero(const Origen, Destino: string);
|
|
var
|
|
lpMsgBuf : pchar;
|
|
begin
|
|
CopyFile(PChar(Origen), PChar(Destino), FALSE);
|
|
end;
|
|
|
|
procedure DoDelTree(TheDir : String);
|
|
Var
|
|
Search : TSearchRec;
|
|
rec : word;
|
|
Begin
|
|
If TheDir[Length(TheDir)] <> '\' Then TheDir := TheDir + '\';
|
|
rec := SysUtils.FindFirst(TheDir + '*.*', faAnyFile, Search);
|
|
While rec = 0 Do
|
|
Begin
|
|
If Search.Name[1] <> '.' Then
|
|
Begin
|
|
// Is this a directory?
|
|
If (Search.Attr And faDirectory) = faDirectory Then
|
|
Begin
|
|
// If so, lets call DelTree again using this new
|
|
// directory as the TheDir parameter.
|
|
DoDelTree(TheDir + Search.Name);
|
|
// Not that all of the files are gone from this directoy,
|
|
// we can remove the directory.
|
|
RmDir(TheDir + Search.Name);
|
|
End
|
|
Else
|
|
Begin
|
|
// We found a file.
|
|
// Now lets reset its attributes so we don't have any problems
|
|
// deleting them.
|
|
SysUtils.FileSetAttr(TheDir + Search.Name, 0);
|
|
SysUtils.DeleteFile(TheDir + Search.Name);
|
|
Application.ProcessMessages;
|
|
End;
|
|
End;
|
|
rec := SysUtils.FindNext(Search);
|
|
End;
|
|
SysUtils.FindClose(Search);
|
|
End;
|
|
|
|
procedure Deltree(DirToKill : String; KillChoosenDir : Boolean);
|
|
begin
|
|
{$I-}
|
|
DoDelTree(DirToKill);
|
|
// If we want to delete the choosen directory.
|
|
If KillChoosenDir Then
|
|
RmDir(DirToKill);
|
|
//modified
|
|
if IOResult <> 0 then
|
|
ShowMessage('Could not delete ' + DirToKill);
|
|
//{$I}
|
|
end;
|
|
|
|
|
|
end.
|
|
|