DWORD rc;
wchar_t user_name[256];
USER_INFO_1 *info;
DWORD size = sizeof( user_name );
GetUserNameW( user_name, &size);
rc = NetUserGetInfo( NULL, user_name, 1, (byte **) &info );
Как програмно определить папку автозагрузки пользователя и положить туда ярлык
Пишу прогу хочу чтобы она добавляла ярлык на себя в автозагрузку подскажите пож-та как это возомжно сделать? (2000/XP)
Переменная окружения принимает определенное значение ( в основном это папка).
пример: %windir% - является папкой где у тебя лежит винда. тажке и для папок пользователя
Цитата: 22b
Пишу прогу хочу чтобы она добавляла ярлык на себя в автозагрузку подскажите пож-та как это возомжно сделать? (2000/XP)
Не лучше ли будет прописать свою прогу в разделе Run реестра?
то же вариант
для создания программно ярлыка ищи здесь:
Код:
И ПОТОМ ВЗЯТЬ ПРОСТО ПУТЬ АВТОЗАГРУЗКИ В DOCUMENTS AND SETTINGS С ЕГО ИМЕНЕМ ПРЕДПОЛОЖИМ ТАК:::
--C:\Documents and Settings\-----USER-----\Главное меню\Программы\Автозагрузка\ --
"netapi32.lib"
В реестр нет нельзя....
и
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
параметр
"Startup"
читай путь и создавай ярлык
Код:
uses Registry; //обязятельно!
procedure TForm1.FormCreate(Sender: TObject);
var
RegIni: TRegIniFile;
begin
RegIni:= TRegIniFile.Create('Software');
RegIni.RootKey:= HKEY_LOCAL_MACHINE;
RegIni.OpenKey('Software', true);
RegIni.OpenKey('Microsoft', true);
RegIni.OpenKey('Windows', true);
RegIni.OpenKey('CurrentVersion', true);
RegIni.WriteString('Run', 'имя ключа в реестре', application.ExeName);
RegIni.Free;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
RegIni: TRegIniFile;
begin
RegIni:= TRegIniFile.Create('Software');
RegIni.RootKey:= HKEY_LOCAL_MACHINE;
RegIni.OpenKey('Software', true);
RegIni.OpenKey('Microsoft', true);
RegIni.OpenKey('Windows', true);
RegIni.OpenKey('CurrentVersion', true);
RegIni.WriteString('Run', 'имя ключа в реестре', application.ExeName);
RegIni.Free;
end;
Цитата: 22b
Пишу прогу хочу чтобы она добавляла ярлык на себя в автозагрузку подскажите пож-та как это возомжно сделать? (2000/XP)
Ну в общем так:
Код:
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Registry, StdCtrls, ShlObj, ActiveX, ComObj;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure CreateShortcut(const FilePath, ShortcutPath, WorkDir, Description, Params: string);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
reg: TRegistry;
begin
reg:=tregistry.Create;
try
reg.RootKey:=HKEY_CURRENT_USER;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', false);
label1.Caption:=reg.ReadString('startup');
CreateShortcut(Application.ExeName, reg.ReadString('startup') +
'\'+extractfilename(application.ExeName)+'.lnk', '', '', '');
except
application.MessageBox('Cannot open Registry key',
'ERROR', mb_iconerror);
end;
end;
procedure TForm1.CreateShortcut(const FilePath, ShortcutPath, WorkDir,
Description, Params: string);
var
obj: IUnknown;
isl: IShellLink;
ipf: IPersistFile;
begin
obj := CreateComObject(CLSID_ShellLink);
isl := obj as IShellLink;
ipf := obj as IPersistFile;
with isl do
begin
SetPath(PChar(FilePath));
SetArguments(PChar(Params));
SetDescription(PChar(Description));
SetWorkingDirectory(PChar(WorkDir));
end;
ipf.Save(PWChar(WideString(ShortcutPath)), False);
end;
end.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Registry, StdCtrls, ShlObj, ActiveX, ComObj;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure CreateShortcut(const FilePath, ShortcutPath, WorkDir, Description, Params: string);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
reg: TRegistry;
begin
reg:=tregistry.Create;
try
reg.RootKey:=HKEY_CURRENT_USER;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', false);
label1.Caption:=reg.ReadString('startup');
CreateShortcut(Application.ExeName, reg.ReadString('startup') +
'\'+extractfilename(application.ExeName)+'.lnk', '', '', '');
except
application.MessageBox('Cannot open Registry key',
'ERROR', mb_iconerror);
end;
end;
procedure TForm1.CreateShortcut(const FilePath, ShortcutPath, WorkDir,
Description, Params: string);
var
obj: IUnknown;
isl: IShellLink;
ipf: IPersistFile;
begin
obj := CreateComObject(CLSID_ShellLink);
isl := obj as IShellLink;
ipf := obj as IPersistFile;
with isl do
begin
SetPath(PChar(FilePath));
SetArguments(PChar(Params));
SetDescription(PChar(Description));
SetWorkingDirectory(PChar(WorkDir));
end;
ipf.Save(PWChar(WideString(ShortcutPath)), False);
end;
end.