Pagina 1 van 1

Lazarus Pascal – Unit voor automatisch starten van jouw programma (Windows/MacOSX)

Lazarus Pascal – Unit voor automatisch starten van jouw programma (Windows/MacOSX)
   0

Wanneer je programma’s ontwikkeld, dan kan het soms handig zijn dat je de eindgebruiker een eenvoudige methode biedt om het betreffende programma automatisch te laten opstarten als het systeem opstart. Bij de Mac heten deze items “LoginItems” en onder Windows heten ze “Autorun items”.

Omdat ik zelf een paar programma’s heb geschreven die dit nodig hebben, en omdat een van de meest recente zelfs op Windows en MacOS X moest werken, leek het me handig een unit te maken die hiervoor functies biedt. Niet alleen handig voor mijn eigen programma’s maar ook handig voor anderen …

Ben dus vrij in het gebruik van de code. Deze unit biedt de mogelijkheid om een programma toe te voegen, verwijderen en om te kijken of het programma al automatisch start. De unit is geschreven voor Lazarus Pascal en werkt dus met Windows en MacOS X.




Functies voor Check Autorun items

Het idee van deze unit is dat we de gebruiker een simpele interface bieden om het programma dat je geschreven hebt, eenvoudig automatisch te laten opstarten als het besturingssysteem start (Windows of Mac).

Uiteraard is alleen toevoegen niet genoeg, verwijderen moet natuurlijk ook een optie zijn. Daarbij komt dan ook nog een functie die dus controleert of het programma al automatisch opstart of niet.

Het Toevoegen, Controleren en Verwijderen is geheel automatsich en gebaseerd op de zogenaamde “project Title” (application.Title) welke je in Lazarus Pascal onder “Project Options” opgeeft.
Het gebruikte pad wordt afgeleid van de locatie waar je het programma start.

Basics

De functies in deze unit zijn geschreven zodat ze werken met Windows en MacOS X.

Voor Windows gebruiken we de registry en voor MacOS X gebruiken we “osascript” en “LoginItems” om een programma automatusch te kunnen laten starten.

In beide gevallen is dit alleen voor de huidige gebruiker!

Zoals je ziet gebruik ik veel {$IFDEF} statements om per platform alleen het nodige mee te compileren.

Mocht iemand een “one-fits-all” methode weten voor het Linux platform, laat het me dan weten!

Om alles zo simpel mogelijk te houden, behoeven geen van deze functies parameters.
Niet vergeten: de gebruikte naam staat in “Project options” “Title”, en het pad wordt afegleid van waar het programma is gestart.

Installatie

Kopieer het bestand t4a_loginitems.pas in jouw project directory en voeg het toe aan de “Uses” clausule.

Functie: CheckLoginItem : boolean

Deze functie kijkt of het programma al automatisch start, wat het handig maakt om een eventuele TCheckbox te gebruiken.

Het resultaat is een boolean, en lever TRUE als het programma al automatisch start.

Functie: AddLoginItem : boolean

Met “AddLoginItem” voegen we ons programma toe, zodat deze bij een volgende start van Windows of MacOS X meteen uitgevoerd wordt.

Als dit succesvol was, dan levert dit een TRUE op.

Functie: RemoveLoginItem : boolean

Deze functie verwijderd het programma weer, dus het start hierna niet meer automatisch op.

Als dit succesvol was, dan levert dit een TRUE op.

Gebruik voorbeeld:


1
2
3
4
5
6
7
8
  // assign to TCheckBox
  cbItemInAutostart.checked := CheckLoginItem;

  // Add or remove application from auto run
  if cbItemInAutostart.checked then
    AddLoginItem
  else
    RemoveLoginItem;

Source

Je kunt de source code hier kopiëren of downloaden …

DOWNLOAD - T4a Loginitems Pas 

Platform: Windows, Mac OS X
Bestand: t4a_loginitems.pas_.zip
Versie: 1.1
Omvang: 1.3 KiB
Datum: 10 mei 2016
 Download Nu 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
{
   Unit   : t4a_loginitems

   Version: 1.1
   Author : Hans Luijten, Tweaking4All.com

   Purpose: This unit provides 3 simple functions, that work for MacOS X and Windows,
            to add, check or remove your application for Login Items (MacOSX) or
            the registry (Windows), for auto startup when the OS starts.

   Copyright Hans Luijten, Tweaking4All.com, you're free to use this code as long
   as you keep this copyright statement in tact.
}

unit t4a_loginitems;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils {$IFDEF Darwin}, process{$ENDIF} , Forms {$IFDEF Windows}, registry {$ENDIF};

function  CheckLoginItem  :Boolean;
function  AddLoginItem    :Boolean;
function  RemoveLoginItem :Boolean;

implementation


{
  CheckLoginItems

  Returns TRUE if your application already exists in the MacOSX LoginItems or Windows Registry (Current User).
  Application name is derived from the Title in project options.

  Example:    if not CheckLoginItems then AddLoginItem;
}

function CheckLoginItem:Boolean;
{$IFDEF Darwin}
var s:ansistring;
{$ENDIF}
{$IFDEF Windows}
var tmpRegistry:TRegistry;
{$ENDIF}
begin
  {$IFDEF Darwin}
  RunCommand('/usr/bin/osascript',
             ['-e','tell application "System Events" to get the path of every login item'],s);
  CheckLoginItem := (Pos(Application.Title,s)>0);
  {$ENDIF}
  {$IFDEF Windows}
  tmpRegistry:=TRegistry.Create;
  CheckLoginItem := false;

  if (Application.Title<>'') and (Application.ExeName<>'') then
    begin
      tmpRegistry.RootKey := HKEY_CURRENT_USER; //Current User settings are stored Here
      if tmpRegistry.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\', False) then
        CheckLoginItem := tmpRegistry.ReadString(Application.Title)<>'';
      tmpRegistry.Free;
    end;
  {$ENDIF}
end;

{
  AddLoginItem

  Adds your application as a login item for MacOSX or registry entry fot Windows and returns the appName as seen in the LoginItems/Registry.
  Application name is derived from the Title in project options.

  Example:    AppName := AddLoginItem;
}

function AddLoginItem:boolean;
{$IFDEF Darwin}
var s:ansistring;
    appName:string;
{$ENDIF}
{$IFDEF Windows}
var tmpRegistry:TRegistry;
{$ENDIF}
begin
  {$IFDEF Darwin}
  appName := Copy(Application.ExeName,0,pos('.app/',Application.ExeName)+3);

  if not CheckLoginItem then
    RunCommand('/usr/bin/osascript',
               ['-e',
                'tell app "System Events" to make login item at end with properties {name: "'+Application.title+
                '", path:"'+appName+'", hidden:true}'],s);

  AddLoginItem:= CheckLoginItem;
  {$ENDIF}
  {$IFDEF Windows}
  tmpRegistry  := TRegistry.Create;
  AddLoginItem := CheckLoginItem;

  if (not AddLoginItem) and (Application.Title<>'') and (Application.ExeName<>'') then
    begin
      tmpRegistry.RootKey := HKEY_CURRENT_USER; //Current User only
      if tmpRegistry.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\', False) then
        begin
          tmpRegistry.WriteString(Application.Title,Application.ExeName);
          AddLoginItem := tmpRegistry.ReadString(Application.Title)=Application.ExeName;
        end;
      tmpRegistry.Free;
    end;
  {$ENDIF}
end;

{
  RemoveLoginItem

  Removes your application as a login item for MacOSX or registry entry for Windows.
  Application name is derived from the Title in project options (Windows) or .app package (MacOSX).

  Example:    RemoveLoginItem;
}

function RemoveLoginItem:boolean;
{$IFDEF Darwin}
var s:ansistring;
{$ENDIF}
{$IFDEF Windows}
var tmpRegistry:TRegistry;
{$ENDIF}
begin
  {$IFDEF Darwin}
  RunCommand('/usr/bin/osascript',
             ['-e',
              'tell app "System Events" to delete login item "'+Application.Title+'"'],s);
  RemoveLoginItem := (s='');
  {$ENDIF}
  {$IFDEF Windows}
  tmpRegistry:=TRegistry.Create;
  RemoveLoginItem := false;

  if Application.Title<>'' then
    begin
      tmpRegistry.RootKey := HKEY_CURRENT_USER; //Current User settings are stored Here
      if tmpRegistry.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\', False) then
        RemoveLoginItem:=tmpRegistry.DeleteValue(Application.Title);
      tmpRegistry.Free;
    end;
  {$ENDIF}
end;

end.

 

Donatie Opties


Donaties worden zeer gewaardeerd, maar zijn zeker niet vereist. Donaties worden gebruikt voor het dekken van kosten voor web-hosting en project materialen, en eventueel voor een drankje of een snack. Voor wie al gedoneerd heeft: Hartelijk dank! Het is werkelijk geweldig om te zien dat men onze artikelen en applicaties waardeert.

Reacties


Er zijn nog geen reacties geplaatst.
Je kunt jouw eigen opmerkingen plaatsen m.b.v. dit formulier, of een reactie op een opmerking plaatsen door op de "Reageer" knop te klikken.



Jouw Reactie ...

Vriendelijk verzoek om hier geen lange teksten te plaatsen (zoals source codes, log files of config files). Gebruik daarvoor het Forum.

Deel met anderen:
*
*
Houd me op de hoogte van nieuwe reacties (email).
       Gebruik jouw RSS reader om reacties te volgen.


Tweaking4All uses the free Gravatar service for Avatar display.
Tweaking4All zal nooit jouw email adres met anderen delen.