For Newbie

Tuesday, 15 November 2011

Add and Remove Startup Dephi

Technique how to put our application and other applications on the Windows start-up in the registry and startup folder directory.
Function declaration:uses
  
Registry, ActiveX, ShlObj, ComObj;
const
  
CURRENT_USER = 1;
  
ALL_USERS = 2;
  
keyReg = 'Software \ Microsoft \ Windows \ CurrentVersion \ Run';
  
ShellFolder = 'Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Folders';
  
strPath = "\ Start Menu \ Programs \ Startup \ ';
/ / Function to read environment variables to WindowsEnvVar function (const v: string): string;var
  
c: array [0 .. 1023] of Char;begin
  
if ExpandEnvironmentStrings (PChar (v), c, 1024) = 0 then
  
Result: = v
  
else Result: = Trim (c);end;
/ / Function to create a ShortcutCreateShortCut function (const FromFile: String; dest: widestring): Boolean;var
  
MOBJAX: IUnknown;
  
MSHLink: IShellLink;
  
MPRFile: IPersistFile;
  
HRes: HRESULT;begin
  
MOBJAX: = CreateCOMObject (CLSID_ShellLink);
  
MSHLink: = MOBJAX as IShellLink;
  
MPRFile: = MOBJAX as IPersistFile;
  
with MSHLink do
  
begin
    
SetPath (PChar (FromFile));
    
SetRelativePath (PChar (ExtractFilePath (FromFile)), 0);
    
SetWorkingDirectory (PChar (ExtractFilePath (FromFile)));
    
SetIconLocation (PChar (FromFile), 0);
  
end;
  
HRes: = MPRFile.Save (PWChar (dest), False);
  
if HRes = S_OK then Result: = True else Result: = False;end;
/ / Function to read the location of the startup directory (slightly forcing functions)StartupFolderDir function (const tStartup: Byte): String;var
  
tmpKey, tmpEnv, tmpPath: String;
  
tmpRoot: HKEY;begin
  
Result: ='';
  
if tStartup = CURRENT_USER then
  
begin
    
tmpKey: = 'startup';
    
tmpRoot: = HKEY_CURRENT_USER;
    
tmpEnv: = '% UserProfile%';
  
end
  
else
  
begin
    
tmpKey: = 'Common Startup';
    
tmpRoot: = HKEY_LOCAL_MACHINE;
    
tmpEnv: = '% AllUsersProfile%';
  
end;
  
with TRegistry.Create (KEY_READ) do
  
begin
    
try
      
RootKey: = tmpRoot;
      
if OpenKey (ShellFolder, False) then
      
begin
        
if ValueExists (tmpKey) then tmpPath: = ReadString (tmpKey);
      
end;
    
finally
      
Free;
    
end;
  
end;
  
if Trim (tmpPath) =''then tmpPath: = EnvVar (tmpEnv) + strPath;
  
Result: = IncludeTrailingBackSlash (tmpPath);end;
ToStartupRegistry procedure (const IDApp, exefile: String; tStartup: Byte);var
  
rk: HKEY;begin
  
with TRegistry.Create do
  
begin
    
if tStartup = CURRENT_USER then
      
rk: = HKEY_CURRENT_USER
    
else
      
rk: = HKEY_LOCAL_MACHINE;
    
try
      
RootKey: = rk;
      
OpenKey (keyReg, True);
      
WriteString (IDApp, exefile);
    
finally
      
Free;
    
end;
  
end;end;
RemStartupRegistry procedure (const IDApp: String; tStartup: Byte);var
  
rk: HKEY;begin
  
with TRegistry.Create do
  
begin
    
if tStartup = CURRENT_USER then
      
rk: = HKEY_CURRENT_USER
    
else
      
rk: = HKEY_LOCAL_MACHINE;
    
try
      
RootKey: = rk;
      
if OpenKey (keyReg, False) then
        
if ValueExists (IDApp) then DeleteValue (IDApp);
    
finally
      
Free;
    
end;
  
end;end;
ToStartupFolder procedure (const IDApp, exefile: String; tStartup: Byte);begin
  
CreateShortcut (exefile, StartupFolderDir (tStartup) + + IDApp. 'Lnk');end;
RemStartupFolder procedure (const IDApp: String; tStartup: Byte);var
  
F: String;begin
  
F: = StartupFolderDir (tStartup) + + IDApp '. Lnk';
  
if FileExists (F) then DeleteFile (F);end;
If you want to access start-ups in the current user, fill in the parameters and ALL_USERS CURRENT_USER tStartup with start-ups for all users.
Example of implementation:/ / To Startup in the registry/ / Add to ...ToStartupRegistry ('myapp', Application.ExeName, ALL_USERS);/ / RemoveRemStartupRegistry ('myapp', ALL_USERS);
/ / For the Startup folder on Startup/ / Add to ...ToStartupFolder ('myapp', Application.ExeName, ALL_USERS);/ / RemoveRemStartupFolder ('myapp', ALL_USERS);

Share on Facebook
Share on Twitter
Share on Google+

Related : Add and Remove Startup Dephi