(* DESCRIPTION A simple component with some methods to control windows AUTHOR Harm van Zoest, email 4923559@hsu1.fnt.hvu.nl VERSION 0.95 (beta), 07-05-96 REMARK If you have comments, found bugs or you add some interestig new features, please mail me! *) unit WinUtil; interface uses Classes, ExtCtrls; type TWinUtil = class(TComponent) private FTimer: TTimer; Expired: Boolean; procedure Expire(Sender: TObject); function GetInterval: LongInt; procedure SetInterval(AInterval: LongInt); procedure Sleep; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Restart; procedure Reboot; procedure ShutDown; procedure CopyFile( source, dest : string); procedure SleepFor(AInterval: LongInt); function GetEnvironvar(const VariableName: string): string; function GetWindir: string; function GetCompanyName: string; function GetUserName : string; published property Interval: LongInt read GetInterval write SetInterval; end; procedure Register; implementation uses WinTypes, WinProcs,LZexpand, sysutils,Forms; constructor TWinUtil.Create(AOwner: TComponent); begin inherited Create(AOwner); FTimer := TTimer.Create(Self); FTimer.Enabled := False; end; destructor TWinUtil.Destroy; begin FTimer.Free; FTimer := nil; inherited Destroy; end; procedure TWinUtil.Expire(Sender: TObject); begin Expired := True; end; function TWinUtil.GetInterval: LongInt; begin if Assigned(FTimer) then Result := FTimer.Interval else Result := 0; end; procedure TWinUtil.SetInterval(AInterval: LongInt); begin if Assigned(FTimer) then FTimer.Interval := AInterval; end; procedure TWinUtil.Sleep; begin if Assigned(FTimer) then begin Expired := False; FTimer.OnTimer := Expire; FTimer.Enabled := True; repeat Application.ProcessMessages; until Expired; FTimer.Enabled := False; end; end; procedure TWinUtil.SleepFor(AInterval: LongInt); begin if Assigned(FTimer) then begin if FTimer.Interval <> AInterval then FTimer.Interval := AInterval; Sleep; end; end; function TWinUtil.GetEnvironVar(const VariableName: string): string; var APChar, VPChar: PChar; begin GetMem(VPChar, Length(VariableName) + 1); { place the pascal-style string in a null-terminated one} StrPCopy(VPChar, VariableName); APChar:=GetDOSEnvironment; while not ((APChar^ = #1) or (StrLIComp(APChar, VPChar, (StrScan(APChar, '=') - APChar)) = 0)) do Inc(APChar, StrLen(APChar) + 1); FreeMem(VPChar, Length(VariableName) + 1); if APChar^ = #1 then Result:='' else Result:=Copy(StrPas(APChar), (StrScan(APChar, '=') - APChar) + 2, 255); end;{GetEnviron} { get the windows dir} function TWinUtil.GetWindir: string; var x : word; buf : Pchar; begin { get memory} Getmem(buf , 500); { call api funtion} x := GetWindowsDirectory(buf,500); GetWindir := StrPas(buf); Freemem(buf,500); end;{GetWindir} procedure TWinUtil.Restart; var rc : boolean; begin rc := ExitWindows(ew_restartwindows, 0); end; procedure TWinUtil.Reboot; var rc : boolean; begin rc := ExitWindows(ew_rebootsystem, 0); end; procedure TWinUtil.Shutdown; var rc : boolean; begin rc := ExitWindows(0, 0); end; procedure TWinUtil.CopyFile( source, dest : string); var fil : Pchar; HandleSource, HandleDest : integer; rec : TOFStruct; x : longint; begin { get the handle voor de source file} Getmem(fil, (length(source)+1)); strPcopy(fil, source); { get the handle which identifies the source file} HandleSource := LZOpenfile(fil,rec, OF_READWRITE); FreeMem(fil,length(source)+1); { create a desination file} Getmem(fil, (length(dest)+1)); strPcopy(fil, dest); _lcreat(fil, 0); { get the handle which identifies the destination file} HandleDest := LZOpenfile(fil, rec, OF_READWRITE); { now, we are ready to copy the file} x:= LZCopy(HandleSource, HandleDest); Freemem(fil,( length(dest) +1)); end; function TWinUtil.GetUserName: string; var fileHandle : Thandle ; fileBuffer: Array [0..29] of Char; begin fileHandle := LoadLibrary('USER'); if fileHandle >= HINSTANCE_ERROR then begin If LoadString(fileHandle, 514, @fileBuffer, 30) <> 0 Then GetUserName := fileBuffer; FreeLibrary(fileHandle); end;{if} end;{GetUserName} function TWinUtil.GetCompanyName: string; var fileHandle : Thandle; fileBuffer: Array [0..29] of Char; begin fileHandle := LoadLibrary('USER'); if fileHandle >= HINSTANCE_ERROR then begin If LoadString(fileHandle, 515, @fileBuffer, 30) <> 0 Then GetCompanyName := fileBuffer; FreeLibrary(fileHandle); end;{if} end;{GetCompanyName} procedure Register; begin RegisterComponents('System', [TWinUtil]); end; end.