У меня проблемы с записью раздела реестра. Я использую стандартную процедуру, которую я использовал раньше, и вызываю ее в конструкторе. Я администратор на этом устройстве. По какой-то причине ключ не создается. Я работаю на виртуальной машине windows 10, но не думаю, что это что-то изменит.
unit FrmMainMenu;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, tlhelp32, ShellApi,
Vcl.ExtCtrls, Vcl.Menus, System.Win.Registry;
type
TMainMenu = class(TForm)
constructor TMainMenu; overload;
procedure RunOnWinStart(RunOnce: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainMenu: TMainMenu;
lclCurrProc: TProcessEntry32;
lclPrntProc: TProcessEntry32;
lclSnapHndl: THandle;
lclEXEName: string;
lclPrntName: string;
myFileName: string;
myFilePath: string;
FullPath: string;
Reg: TRegistry;
implementation
{$R *.dfm}
{ ------------------------------------------------------------------------------ }
/// <summary>
/// RunOnWinStart
/// </summary>
/// <remarks>
/// </remarks>
/// <param name="RunOnce"></param>
/// <returns>None</returns>
procedure TMainMenu.RunOnWinStart(RunOnce: Boolean);
var
TheKey: string;
begin
myFileName := ExtractFileName(Application.ExeName);
myFilePath := ExtractFilePath(Application.ExeName);
try
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
TheKey := 'Software\Microsoft\Windows\CurrentVersion\Run';
if RunOnce then
TheKey := TheKey + 'Once';
Reg.OpenKey(TheKey, True);
Reg.WriteString(myFileName, FullPath);
finally
Reg.CloseKey;
Reg.Free;
end;
end;
{------------------------------------------------------------------------------}
/// <summary>
/// TMainMenu
/// </summary>
/// <remarks>
/// </remarks>
/// <returns>None</returns>
constructor TMainMenu.TMainMenu;
begin
TrayIcon1.Visible := True;
Application.ShowMainForm := False;
RunOnWinStart(False);
end;