Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Сообщения: 1133
Благодарности: 581

Профиль | Отправить PM | Цитировать


El Sanchez, извиняюсь, но немного подправил ваш скрипт Закрепить ярлык на панели задач в Windows 7 (вариант №2).
Сделал в виде примера с кнопками...
Подробнее

Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
AppCopyright=Copyright © El Sanchez
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
Compression=lzma2/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes

[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl

[Code]
const
  BUF_SIZE = 1024;
  LOAD_LIBRARY_AS_DATAFILE = 2;

#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryExA@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: UINT; lpBuffer: PChar; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';


function GetDllResourceStr(const Index: Integer): string;
var
  hLibrary: THandle;
  iSize: Integer;
begin
  Result := '';
  hLibrary := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
  if hLibrary <> 0 then
  try
    SetLength(Result, BUF_SIZE);
    iSize := LoadString(hLibrary, Index, PChar(Result), BUF_SIZE);
    if iSize > 0 then
      SetLength(Result, iSize)
    else
      Result := '';
  finally
    FreeDLL(hLibrary);
  end;
end;

function AddTaskbarWin7(const FileName: string): Boolean;
var
  i: Integer;
  strVerb: string;
  objShell, colVerbs: Variant;
begin
  strVerb := GetDllResourceStr(5386);
  if not FileExists(Filename) or (strVerb = '') then Exit;
  try
    objShell := CreateOleObject('Shell.Application');
  except
    ShowExceptionMessage;
    Exit;
  end;
  colVerbs := objShell.Namespace(ExtractFileDir(Filename)).ParseName(ExtractFileName(Filename)).Verbs;
  for i := colVerbs.Count downto 1 do
    if colVerbs.Item[i].Name = strVerb then
      begin
        colVerbs.Item[i].DoIt;
        Result := True;
        Break;
      end;
end;

function DelTaskbarWin7(const FileName: string): Boolean;
var
  i: Integer;
  strVerb: string;
  objShell, colVerbs: Variant;
begin
  strVerb := GetDllResourceStr(5387);
  if not FileExists(Filename) or (strVerb = '') then Exit;
  try
    objShell := CreateOleObject('Shell.Application');
  except
    ShowExceptionMessage;
    Exit;
  end;
  colVerbs := objShell.Namespace(ExtractFileDir(Filename)).ParseName(ExtractFileName(Filename)).Verbs;
  for i := colVerbs.Count downto 1 do
    if colVerbs.Item[i].Name = strVerb then
      begin
        colVerbs.Item[i].DoIt;
        Result := True;
        Break;
      end;
end;

procedure AddButtonClick(Sender: TObject);
begin
  // Присобачим Блокнот на панель задач
  if AddTaskbarWin7('c:\windows\notepad.exe') then
    MsgBox('ok', mbInformation, MB_OK)
  else
    MsgBox('no', mbInformation, MB_OK);
end;

procedure DelButtonClick(Sender: TObject);
begin
  // Удялим Блокнот из панели задач
  if DelTaskbarWin7('c:\windows\notepad.exe') then
    MsgBox('ok', mbInformation, MB_OK)
  else
    MsgBox('no', mbInformation, MB_OK);
end;

procedure InitializeWizard();
begin
  if (GetWindowsVersion shr 24 = 6) and ((GetWindowsVersion shr 16) and $FF = 1) then
    begin
      with TButton.Create(WizardForm) do
        begin
          Parent := WizardForm;
          SetBounds(ScaleX(16), ScaleY(327), ScaleX(75), ScaleY(25));
          Caption := 'Добавить';
          OnClick := @AddButtonClick;
        end;

      with TButton.Create(WizardForm) do
        begin
          Parent := WizardForm;
          SetBounds(ScaleX(128), ScaleY(327), ScaleX(75), ScaleY(25));
          Caption := 'Удалить';
          OnClick := @DelButtonClick;
        end;
    end;
end;

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.


Последний раз редактировалось Serega, 04-01-2012 в 20:27. Причина: исправления

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:21, 03-01-2012 | #555