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.
Apple App Store – Deze methode werkt niet meer vorr Sandboxed Mac Apps
Applicaties voor de Apple App Store moeten worden gesandboxed, waardoor deze methode dan niet meer werkt.
Deze methode werkt nog wel voor applicaties die buiten de App Store om gedistribueerd worden.
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. |
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.