unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, JvExControls, JvComponent, JvXPCore, JvXPButtons, ExtCtrls, Mask, ShlObj, ActiveX, ComObj, Menus, DFTrayIcon, ImgList, JvComponentBase, JvTrayIcon; type TForm1 = class(TForm) Memo1: TMemo; AmPmBox: TComboBox; TimeEdit: TMaskEdit; Edit1: TEdit; Label1: TLabel; Edit2: TEdit; Label2: TLabel; Timer1: TTimer; button1: TJvXPButton; Label3: TLabel; PopupMenu1: TPopupMenu; Restore1: TMenuItem; Exit1: TMenuItem; ImageList1: TImageList; JvTrayIcon1: TJvTrayIcon; procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure AmPmBoxKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure AmPmBoxKeyPress(Sender: TObject; var Key: Char); procedure Edit2Exit(Sender: TObject); procedure Restore1Click(Sender: TObject); procedure Exit1Click(Sender: TObject); private { Private declarations } sety: string; procedure enablecomps(s: boolean); procedure CreateLink(zpadpath, linkfolderpath: string); public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); //var //s: string; //setdate: string; begin { s := FormatDateTime('hh:mm AM/PM', Now); setdate := FormatDateTime('dd/mm/yy', Now); if (FormatDateTime('hh:mm AM/PM', Now) = s) and (FormatDateTime('dd/mm/yy', Now) = SetDate) then memo1.lines.add(FormatDateTime('dd/mm/yy', Now)); } if button1.caption = 'Start program' then begin if ampmbox.Text = 'AM' then sety := TimeEdit.text + ' AM' else sety := TimeEdit.text + ' PM'; memo1.lines.add('['+ FormatDateTime('hh:mm AM/PM dd/mm/yy', Now) + '] Program started.'); memo1.lines.add('Folder will be created at: ['+ sety+']'); button1.caption := 'Stop program'; timer1.enabled := true; enablecomps(false); end else begin button1.caption := 'Start program'; memo1.lines.add('['+ FormatDateTime('hh:mm AM/PM dd/mm/yy', Now) + '] Program stopped.'); timer1.interval := 5000; timer1.enabled := false; enablecomps(true); end; end; procedure tform1.enablecomps(s: boolean); begin edit1.enabled := s; edit2.enabled := s; timeedit.enabled := s; ampmbox.enabled := s; end; procedure TForm1.Timer1Timer(Sender: TObject); var dtimenow: string; settime: string; folder: string; begin dtimenow := FormatDateTime('hh:mm AM/PM', Now); if dtimenow = sety then begin folder := IncludeTrailingPathDelimiter(edit1.text) + FormatDateTime('mmmm_dd_yyyy', Now); memo1.lines.add('['+ formatdatetime('hh:mm AM/PM', now)+ '] Creating folder: '+ folder); // create folder if CreateDir(folder) then begin memo1.lines.add('Folder created.'); // create shortcut to folder try CreateLink(folder, edit2.text); memo1.lines.add('Link created.'); except memo1.lines.add('Error creating link: '+edit2.text); end; end else memo1.lines.add('Error creating folder: '+folder); //skip an hour. if timer1.Interval = 5000 then timer1.Interval := 3900000 else timer1.Interval := 5000; end; end; procedure Tform1.CreateLink(zpadpath, linkfolderpath: string); var IObject : IUnknown; ISLink : IShellLink; IPFile : IPersistFile; //InFolder : array[0..MAX_PATH] of Char; TargetName : String; LinkName : WideString; begin TargetName := zpadpath; IObject := CreateComObject(CLSID_ShellLink) ; ISLink := IObject as IShellLink; IPFile := IObject as IPersistFile; with ISLink do begin SetPath(pChar(TargetName)) ; SetWorkingDirectory(pChar(ExtractFilePath(TargetName))) ; end; LinkName := linkfolderpath; IPFile.Save(PWChar(LinkName), false) ; end; procedure TForm1.AmPmBoxKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key = VK_UP) or (Key = VK_DOWN) or (Key = VK_LEFT) or (Key = VK_RIGHT) or (Key = VK_PRIOR) or (Key = VK_NEXT) then if AmPmBox.ItemIndex = 0 then AmPmBox.ItemIndex := 1 else AmPmBox.ItemIndex := 0; Key := 0; end; procedure TForm1.AmPmBoxKeyPress(Sender: TObject; var Key: Char); begin if (Key = 'p') or (Key = 'P') then begin AmPmBox.ItemIndex := 1; AmPmBox.SelStart := 0; end else if (Key = 'a') or (Key = 'A') then begin AmPmBox.ItemIndex := 0; AmPmBox.SelStart := 0; end; Key := #0; end; procedure TForm1.Edit2Exit(Sender: TObject); begin if pos('lnk', edit2.text) = 0 then begin edit2.text := 'c:\Today.lnk'; showmessage('The link must end in: lnk'); end; end; procedure TForm1.Restore1Click(Sender: TObject); begin ShowWindow(Application.Handle, SW_SHOW); ShowWindow(Application.Handle, SW_RESTORE); Application.BringToFront; end; procedure TForm1.Exit1Click(Sender: TObject); begin application.terminate; end; end.