|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Создание ярлыка с помощью VBS |
|
VBS/WSH/JS - [решено] Создание ярлыка с помощью VBS
|
![]() Ветеран Сообщения: 863 |
Подскажите пожалуйста скрипт который будет создавать закрепленный ярлык на панели задач.....Очень надо. Или какой-нибудь другой способ данного действия.
|
|
Отправлено: 23:29, 30-01-2014 |
![]() Ветеран Сообщения: 863
|
Профиль | Отправить PM | Цитировать Iska, есть какие-нибудь идеи?
|
------- Отправлено: 20:11, 10-04-2016 | #51 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Dodakaedr, тут не идеи нужны. Надо загрузить InnoSetup+редактор, создать инсталляцию, запустить её и отследить, что происходит.
|
Отправлено: 20:55, 10-04-2016 | #52 |
![]() Ветеран Сообщения: 863
|
Профиль | Отправить PM | Цитировать Iska, если указывать параметр то скрипт не видит файл.
|
------- Отправлено: 20:59, 10-04-2016 | #53 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Dodakaedr, ото ж
![]() Давайте попробуем так: сначала прикрепляем ярлык на Панель задач, затем добавляем к нему аргумент. Добавьте в секцию [code] скрипта инсталляции следующий код: Скрытый текст
//the function is work well on Unicode Inno Setup,
//if Non Unicode Inno Setup, one need to modify,
//and I think you can do it!
//Inno use Win32 API
const
// these constants are not defined in Windows
SHELL32_STRING_ID_PIN_TO_TASKBAR = 5386;
SHELL32_STRING_ID_PIN_TO_STARTMENU = 5381;
SHELL32_STRING_ID_UNPIN_FROM_TASKBAR = 5387;
SHELL32_STRING_ID_UNPIN_FROM_STARTMENU = 5382;
sFileName = 'Program.exe';
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif
function LoadLibrary(lpFilename : String) : LongInt;
external 'LoadLibrary{#A}@kernel32.dll stdcall delayload'; //if Non Unicode Inno Setup, use LoadLibraryA
function FreeLibrary(hModule : LongInt) : BOOL;
external 'FreeLibrary@kernel32.dll stdcall delayload';
function LoadString(hInstance:LongInt; uId:UINT; lpBuffer:String; nBufferMax:Integer) : Integer;
external 'LoadString{#A}@user32.dll stdcall delayload'; //if Non Unicode Inno Setup, use LoadStringA
//here is the function
//@param strPath The App's directory,
//@param strApp The App's name
//@example zylPinAppToTaskbar('c:\window', 'notepad.exe');
procedure zylPinAppToTaskbar(strPath, strApp: string);
var
vShell, vFolder, vFolderItem, vItemVerbs: Variant;
vPinnedShortcutFileName: Variant;
vWshShell, vShellLink: Variant;
vPath, vApp: Variant;
i: Integer;
sItem: String;
h: LongInt;
szPinName: String;
filenameEnd : Integer;
filename : String;
strEnd : String;
begin
SetLength(szPinName, 255);
h := LoadLibrary(ExpandConstant('{sys}\Shell32.dll'));
LoadString(h, SHELL32_STRING_ID_PIN_TO_TASKBAR, szPinName, 255); //pin to taskbar text
FreeLibrary(h);
strEnd := #0;
filenameEnd := Pos(strEnd, szPinName);
filename := Copy(szPinName, 1, filenameEnd - 1);
if (Length(filename) > 0) then //WinXp or lower, no pin taskbar function
begin
vShell := CreateOleObject('Shell.Application');
vPath := strPath;
vFolder := vShell.NameSpace(vPath);
vApp := strApp;
vFolderItem := vFolder.ParseName(vApp);
vItemVerbs := vFolderItem.Verbs;
for i := 1 to vItemVerbs.Count do
begin
sItem := vItemVerbs.Item(i).Name;
if (sItem = filename) then
begin
// 63 63 72 75 6E 2E 63 6F 6D
vItemVerbs.Item(i).DoIt;
vPinnedShortcutFileName := vShell.NameSpace('shell:User Pinned').self.Path + '\TaskBar\' + vFolder.GetDetailsOf(vFolderItem, 34) + '.lnk';
if (FileExists(vPinnedShortcutFileName)) then
begin
vWshShell := CreateOleObject('Wscript.Shell');
vShellLink := vWshShell.CreateShortcut(vPinnedShortcutFileName);
vShellLink.Arguments := '/Rem';
vShellLink.Save();
end;
break;
end;
end;
end;
end;
//You can use zylPinAppToTaskbar like this
procedure CurPageChanged(CurPageID: Integer);
begin
//When Finished page is shown, call the function
//You can also call is when the "Finish" button clicked.
if CurPageID = wpFinished then
begin
if IsTaskSelected('pintaskbar') then
zylPinAppToTaskbar(ExpandConstant('{app}'), sFileName);
end;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
vShell, vFolder, vFolderItem: Variant;
vPinnedShortcutFileName: Variant;
begin
if CurUninstallStep = usUninstall then
begin
vShell := CreateOleObject('Shell.Application');
vFolder := vShell.NameSpace(ExpandConstant('{app}'));
vFolderItem := vFolder.ParseName(sFileName);
vPinnedShortcutFileName := vShell.NameSpace('shell:User Pinned').self.Path + '\TaskBar\' + vFolder.GetDetailsOf(vFolderItem, 34) + '.lnk';
UnpinShellLink(vPinnedShortcutFileName);
end;
end;
Укажите вместо «Program.exe» имя Вашего «MyProg.exe». У меня под Windows 7 работает. Под более новыми версиями, полагаю, могут быть проблемы из-за номера свойства Проводника «Описание файла» (или отсутствия описания). P.S. По-хорошему, надо попробовать закреплять не сам исполняемый файл из %ProgramFiles%, а ярлык на него, созданный в Главном меню в процессе инсталляции (уже со всеми потребными параметрами). |
Отправлено: 00:54, 11-04-2016 | #54 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Ну, вот, попробовал:
Скрытый текст
//the function is work well on Unicode Inno Setup,
//if Non Unicode Inno Setup, one need to modify,
//and I think you can do it!
//Inno use Win32 API
const
// these constants are not defined in Windows
SHELL32_STRING_ID_PIN_TO_TASKBAR = 5386;
SHELL32_STRING_ID_PIN_TO_STARTMENU = 5381;
SHELL32_STRING_ID_UNPIN_FROM_TASKBAR = 5387;
SHELL32_STRING_ID_UNPIN_FROM_STARTMENU = 5382;
sFileName = 'ShortcutName.lnk';
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif
function LoadLibrary(lpFilename : String) : LongInt;
external 'LoadLibrary{#A}@kernel32.dll stdcall delayload'; //if Non Unicode Inno Setup, use LoadLibraryA
function FreeLibrary(hModule : LongInt) : BOOL;
external 'FreeLibrary@kernel32.dll stdcall delayload';
function LoadString(hInstance:LongInt; uId:UINT; lpBuffer:String; nBufferMax:Integer) : Integer;
external 'LoadString{#A}@user32.dll stdcall delayload'; //if Non Unicode Inno Setup, use LoadStringA
//here is the function
//@param strPath The App's directory,
//@param strApp The App's name
//@example zylPinAppToTaskbar('c:\window', 'notepad.exe');
procedure zylPinAppToTaskbar(strPath, strApp: string);
var
vShell, vFolder, vFolderItem, vItemVerbs: Variant;
vPath, vApp: Variant;
i: Integer;
sItem: String;
h: LongInt;
szPinName: String;
filenameEnd : Integer;
filename : String;
strEnd : String;
begin
SetLength(szPinName, 255);
h := LoadLibrary(ExpandConstant('{sys}\Shell32.dll'));
LoadString(h, SHELL32_STRING_ID_PIN_TO_TASKBAR, szPinName, 255); //pin to taskbar text
FreeLibrary(h);
strEnd := #0;
filenameEnd := Pos(strEnd, szPinName);
filename := Copy(szPinName, 1, filenameEnd - 1);
if (Length(filename) > 0) then //WinXp or lower, no pin taskbar function
begin
vShell := CreateOleObject('Shell.Application');
vPath := strPath;
vFolder := vShell.NameSpace(vPath);
vApp := strApp;
vFolderItem := vFolder.ParseName(vApp);
vItemVerbs := vFolderItem.Verbs;
for i := 1 to vItemVerbs.Count do
begin
sItem := vItemVerbs.Item(i).Name;
if (sItem = filename) then
begin
// 63 63 72 75 6E 2E 63 6F 6D
vItemVerbs.Item(i).DoIt;
break;
end;
end;
end;
end;
//You can use zylPinAppToTaskbar like this
procedure CurPageChanged(CurPageID: Integer);
begin
//When Finished page is shown, call the function
//You can also call is when the "Finish" button clicked.
if CurPageID = wpFinished then
begin
if IsTaskSelected('pintaskbar') then
zylPinAppToTaskbar(ExpandConstant('{group}'), sFileName);
end;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
vShell, vFolder: Variant;
vPinnedShortcutFileName: Variant;
begin
if CurUninstallStep = usUninstall then
begin
vShell := CreateOleObject('Shell.Application');
vFolder := vShell.NameSpace(ExpandConstant('{app}'));
vPinnedShortcutFileName := vShell.NameSpace('shell:User Pinned').self.Path + '\TaskBar\' + sFileName;
UnpinShellLink(vPinnedShortcutFileName);
end;
end;
«ShortcutName» — имя ярлыка, создаваемого в разделе ярлыков [Icons] скрипта инсталляции с параметром «/Rem», наподобие: |
Отправлено: 06:40, 11-04-2016 | #55 |
![]() Ветеран Сообщения: 863
|
Профиль | Отправить PM | Цитировать Iska, не могу скомпилировать, неизвестный идентификатор UnpinShellLink.
У меня китайская расширенная версия компилятора. |
------- Отправлено: 14:10, 11-04-2016 | #56 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Dodakaedr:
Цитата:
Цитата Dodakaedr:
|
|||
Отправлено: 14:24, 11-04-2016 | #57 |
![]() Ветеран Сообщения: 863
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
|
||
------- Отправлено: 14:38, 11-04-2016 | #58 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Dodakaedr, тогда берите последний код — и с ним сюда: Скрипты Inno Setup. Помощь и советы [часть 8]. Кто-нибудь да сделает, там делов не на много. В качестве параметров для планируемой функции UnPin() должны передаваться те же параметры путь/имя на исходный ярлык в Главном меню (а не на сам прикреплённый ярлык).
|
Отправлено: 18:15, 11-04-2016 | #59 |
![]() Ветеран Сообщения: 863
|
Профиль | Отправить PM | Цитировать Iska, если брать сам ярлык, то можно воспользоватся и vbs скриптом, проверил работает, только для "полного счастья" нужен обратный код, то есть открепления...
|
------- Отправлено: 15:25, 12-04-2016 | #60 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBS/WSH/JS - [решено] Скрипт vbs для создания ярлыка на рабочем столе | angel_lyucifer | Скриптовые языки администрирования Windows | 31 | 27-11-2017 14:26 | |
CMD/BAT - [решено] Создание с помощью bat ярлыка в SendTo | intelem | Скриптовые языки администрирования Windows | 4 | 24-12-2011 19:59 | |
CMD/BAT - [решено] Возможно ли в свойствах ярлыка поменять размер шрифта посредством cmd/vbs? | Anton04 | Скриптовые языки администрирования Windows | 20 | 06-09-2011 16:53 | |
VBS/WSH/JS - [решено] Автоматическое создание папок из полей таблицы c помощью VBS | NecroTYN | Скриптовые языки администрирования Windows | 58 | 14-07-2011 20:13 | |
Обои и Значки - Возможно позиционирование окна с помощью ярлыка? | KupC | Оформление Windows XP | 1 | 03-05-2011 14:11 |
|