Dodawanie skrótu na Pulpicie w WinXP

0

Proszę kogoś kto się wyznaje na XP o pomoc. Stosuje taką proc na dodanie skrótu:

procedure DodajSkrotDoPulpitu(prog_path:string);
var
   obiekt:IUnknown;
   skrot:IShellLink;
   p_file:IPersistFile;
   dir:String;
   w_prog_path:WideString;
   reg:TRegIniFile;
begin
   obiekt:=CreateComObject(CLSID_ShellLink);
   skrot:=obiekt as IShellLink;
   p_file:=obiekt as IPersistFile;
   with skrot do
   begin
      SetPath(PChar(prog_path));
      SetWorkingDirectory(PChar(ExtractFilePath(prog_path)));
   end;
   reg:=TRegIniFile.Create('Software\MicroSoft\Windows\CurrentVersion\Explorer');
   try
      dir:=reg.ReadString('Shell Folders','Desktop','');
      CreateDir(dir);

      w_prog_path:=dir+'\MyProg.lnk';
      p_file.Save(PWChar(w_prog_path),False);
   finally
      reg.Free;
   end;
end;

Pod Win98 nie ma problemów ale pod XP(się na nim nie znam) jak się zainstaluje (ta proc jest w instalatorze), to wszystko działa ale tylko z poziomu admina. Z poziomu użytkownika nie można nawet execa uruchomić bo wywala błąd. To samo ze skrótem w menu Start. Co tu trzeba poprawić?

0

sprobuj do sciezki

reg:=TRegIniFile.Create('Software\MicroSoft\Windows\CurrentVersion\Explorer');

dopisac na poczatku HKEY_LOCAL_MACHINE
choc nie daje za to glowy
:P

0

Dzisiaj tego nie sprawdzę, bo nie mam w domu XP

0
greenmag napisał(a)

sprobuj do sciezki

reg:=TRegIniFile.Create('Software\MicroSoft\Windows\CurrentVersion\Explorer');

dopisac na poczatku HKEY_LOCAL_MACHINE

Po pierwsze, to nazwy klucza głównego nie daje się w ścieżce, tylko jako TRegistry.RootKey :). Po drugie, ta wartość nie może być w HKEY_LOCAL_MACHINE, tylko gdzieś w HKEY_CURRENT_USER, bo dla każdego użytkownika jest inny pulpit.

0
thenkles napisał(a)
greenmag napisał(a)

sprobuj do sciezki

reg:=TRegIniFile.Create('Software\MicroSoft\Windows\CurrentVersion\Explorer');

dopisac na poczatku HKEY_LOCAL_MACHINE

Po pierwsze, to nazwy klucza głównego nie daje się w ścieżce, tylko jako TRegistry.RootKey :). Po drugie, ta wartość nie może być w HKEY_LOCAL_MACHINE, tylko gdzieś w HKEY_CURRENT_USER, bo dla każdego użytkownika jest inny pulpit.

racja :/

0
unit maxwklb_1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,
  ShlObj, ActiveX, ComObj, Registry, StdCtrls;  {te są ważne!aby dodac}
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure DodajSkrotDoPulpitu(prog_path:string);
var  MyObject:IUnknown;
     MySLink:IShellLink;
     MyPFile:IPersistFile;
     Directory:String;
     WFileName:WideString;
     MyReg:TRegIniFile;
begin
 MyObject:=CreateComObject(CLSID_ShellLink);
 MySLink:=MyObject as IShellLink;
 MyPFile:=MyObject as IPersistFile;
 with MySLink do
 begin
{  SetArguments('C:\AUTOEXEC.BAT');} {co otworzyc? przykładowo autoexec.bat}
  SetPath(PChar(prog_path));
  SetWorkingDirectory(PChar(ExtractFilePath(prog_path)));
end;
 MyReg := TRegIniFile.Create('Software\MicroSoft\Windows\CurrentVersion\Explorer');

 // Poniższe dodaje skrót do desktopu
 Directory := MyReg.ReadString('Shell Folders','Desktop','');

 // A to do menu Start
 //  Directory := MyReg.ReadString('Shell Folders','Start Menu','')+
 //      '\Whoa!';//  CreateDir(Directory);

 WFileName := Directory+'\FooBar.lnk';  {nazwa tego skrótu}
 MyPFile.Save(PWChar(WFileName),False);
 MyReg.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  DodajSkrotDoPulpitu('c:\windows\notepad.exe');
end;

end.

testowane na winXP/win98/win2000 i chodzi!

0

O ile dobrze widzę to jest to samo co wcześniej napisałem...

0

Czy wie ktoś, jak do skrótu utworzonego tą procedurą dodać parametr?

0

Patrz linijka
{ SetArguments('C:\AUTOEXEC.BAT');} {co otworzyc? przykładowo autoexec.bat}

0

Dzięki działa [green]

0

Działać działa, tylko czy sprawdzaliście to o czym pisałem na początku? Być może ja coś z tym XP nie tak robię

0

A ja mam pytanie odnośnie tworzenia skrótu w menu start. .

Sposób podany wyżej oczywiście działa, ale tworzy skrót nad kreską (nie wiem jak się ów kreska nazywa..) w menu start, a czy można utworzyć go pod nią tak jak robi to większość programów?

0

Ok już wiem..

Directory := MyReg.ReadString('Shell Folders','Start Menu','')+
'\Programs\Whoa!';
CreateDir(Directory);

0

kreska = separator ;)

0

Powiedzcie dlaczego po wykonaniu skrótu wg podanej przeze mnie procedury nie można uruchomić programu z poziomu użytkownka. Co jest nie tak?

1 użytkowników online, w tym zalogowanych: 0, gości: 1