Pagina1 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 - Lazarus Pascal LoginitemsUnit 

Bestandsnaam:  Lazarus-Pascal-LoginitemsUnit-.zip
Platform:  Undefined
Versie:  1.1
Omvang:  1.4 kB
Datum:  2016-05-10
 Download Nu  Stuur me Koffie    


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.

 

Ondersteun ons ...


Jouw ondersteuning wordt zeer gewaardeerd, en hoeft zelfs niets te kosten. Bijvoorbeeld door links naar ons te delen op social media, of andere websites.

Andere vormen kunnen ook gratis zijn (b.v. shoppen op Amazon).
Alle opbrengsten worden gebruikt voor web-hosting kosten, project hardware en software, koffie, etc.

Hartelijk dank voor wie al heeft bijgedragen!
Het is altijd geweldig om te zien hoe men mijn artikeltjes en applicaties weet te waarderen.

Merk op dat het klikken op affiliate links een kleine commissie voor ons kunnen genereren - dit wordt zeer gewaardeerd.

Reacties


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



Jouw Opmerking ...

Plaats hier geen grote bestanden (zoals source codes, log files of config files). Gebruik hiervoor het Forum.

Delen:
*
*
Laat me per email weten als er nieuwe reacties zijn.
       Je kunt jouw RSS reader gebruiken om reacties te volgen.


Tweaking4All gebruikt de gratis Gravatar dienst voor Avatar weergave.