Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Как добавить иконку к ярлыку (http://forum.oszone.net/showthread.php?t=327113)

Zerstoren 27-05-2017 14:45 2740091

Как добавить иконку к ярлыку
 
Доброго времени суток!
Есть задача создать Url, но чтобы был значок
Код такой
PHP код:

Set WshShell WScript.CreateObject("WScript.Shell")  
 
strDesktop WshShell.SpecialFolders("Desktop"
 
Set oUrlLink WshShell.CreateShortcut(strDesktop "\ЕК АСУИ.url"
 
oUrlLink.TargetPath "http://loki.gvc.oao.rzd/maximo/webclient/login/login.jsp" 
 
oUrlLink.Save 

 DesktopPath 
sh.SpecialFolders("Desktop")  
 
Set sc sh.CreateShortcut(DesktopPath "\ЕК АСУИ.lnk")  
 
sc.TargetPath sh.ExpandEnvironmentStrings("http://loki.gvc.oao.rzd/maximo/webclient/login/login.jsp")  
 
sc.Arguments "user32.dll,LockWorkStation"  
 
sc.WindowStyle 7  
 sc
.Hotkey ""  
 
sc.Description "ЕК АСУИ"  
 
sc.IconLocation sh.ExpandEnvironmentStrings("%windir%\explorer.exe,14")  
 
sc.WorkingDirectory sh.ExpandEnvironmentStrings(DesktopPath)  
 
sc.Save 

В первом варианте создается URL
Во втором создается LNK

Но и у url и у lnk есть кнопка сменить значок
Картинка

Iska 27-05-2017 17:49 2740128

И что? Для класса WshURLShortcut свойство IconLocation не поддерживается.

Вы можете создать url-ярлык, затем открыть его как обычный текстовый файл и тупо дописать две строки, например:
Скрытый текст
Код:

Option Explicit

Const ForAppending = 8

Dim strPath2UrlFile


strPath2UrlFile = "C:\Мои проекты\0074\My.url"

With WScript.CreateObject("WScript.Shell").CreateShortcut(strPath2UrlFile)
        .TargetPath = "http://forum.oszone.net/thread-327113.html"
        .Save
        WScript.Echo .FullName
End With

With WScript.CreateObject("Scripting.FileSystemObject").OpenTextFile(strPath2UrlFile, ForAppending)
        .WriteLine "IconFile=C:\Windows\system32\SHELL32.dll"
        .WriteLine "IconIndex=27"
End With

WScript.Quit 0


Zerstoren 27-05-2017 19:01 2740139

Цитата:

Цитата Iska
strPath2UrlFile = "C:\Мои проекты\0074\My.url" »

а как сюда засунуть

PHP код:

strDesktop WshShell.SpecialFolders("Desktop"

 
Set oUrlLink WshShell.CreateShortcut(strDesktop "\ссылка.url"


Zerstoren 27-05-2017 19:22 2740146

Цитата:

Цитата Iska
Вы можете создать url-ярлык, затем открыть его как обычный текстовый файл и тупо дописать две строки, например: »

почему-то иконку через тотал видно, а через проводник белый листок (я свои поставил значения, но разницы нет)

код

PHP код:

Option Explicit

Const ForAppending 8

Dim strPath2UrlFile

strPath2UrlFile 
"C:\Users\Admin\Desktop\ярлык.url"

With WScript.CreateObject("WScript.Shell").CreateShortcut(strPath2UrlFile)
    .
TargetPath "http://yandex.ru"
    
.Save
    WScript
.Echo .FullName
End With

With WScript
.CreateObject("Scripting.FileSystemObject").OpenTextFile(strPath2UrlFileForAppending)
    .
WriteLine "IconFile=C:\Windows\system32\SHELL32.dll"
    
.WriteLine "IconIndex=27"
    
.WriteLine "HotKey=0"
End With

WScript
.Quit 0 



содержание url через блокнот

[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,2
[InternetShortcut]
URL=http://yandex.ru
IDList=
IconFile=C:\Windows\system32\SHELL32.dll
IconIndex=27
HotKey=0

Iska 28-05-2017 02:47 2740184

Цитата:

Цитата Zerstoren
а через проводник белый листок »

Цитата:

Цитата Zerstoren
содержание url через блокнот »

У меня — нормально:
Скрытый текст

«WScript.Echo .FullName» можно убрать — это по недосмотру оставил.

Цитата:

Цитата Zerstoren
а как сюда засунуть… »

Например. так:
Скрытый текст
Код:

Option Explicit

Const ForAppending = 8

Dim strUrlFileName

Dim objFSO
Dim strPath2UrlFile


strUrlFileName = "ссылка.url"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

With WScript.CreateObject("WScript.Shell")
        strPath2UrlFile = objFSO.BuildPath(.SpecialFolders("Desktop"), strUrlFileName)
       
        With .CreateShortcut(strPath2UrlFile)
                .TargetPath = "http://yandex.ru"
                .Save
        End With
End With
       
With objFSO.OpenTextFile(strPath2UrlFile, ForAppending)
        .WriteLine "IconFile=C:\Windows\system32\SHELL32.dll"
        .WriteLine "IconIndex=27"
End With

Set objFSO = Nothing

WScript.Quit 0


Кстати: использование раскрытие пути к специальной папке Рабочий стол вместо прямого задания пути — правильный подход, Вы совершенно правы.

Zerstoren 28-05-2017 09:45 2740218

Цитата:

Цитата Iska
У меня — нормально: »

А у меня нет, даже на нулевой виртуалке


Изменяет иконку после второго запуска скрипта :)
Странно, почему :dont-know

Iska 28-05-2017 11:32 2740237

Цитата:

Цитата Zerstoren
Изменяет иконку после второго запуска скрипта »

А если после первого (и единственного) запуска выделить что-нибудь на Рабочем столе и нажать F5?

Zerstoren 28-05-2017 19:27 2740323

Цитата:

Цитата Iska
нажать F5? »

да хоть занажимайся

Iska 28-05-2017 22:34 2740350

Цитата:

Цитата Zerstoren
да хоть занажимайся »

Давайте ещё одно посмотрим, если Вы не против. Вам оно, конечно, ни к чему, а мне интересно. Если, опять же, с нуля создать ярлык скриптом, а затем завершить сеанс пользователя и заново войти в систему — ярлык отобразится со значком?

Zerstoren 29-05-2017 11:02 2740454

Iska, все сработало!! :yes: :up
тема закрыта

Iska 29-05-2017 11:24 2740458

Ну вот :(. А у меня ещё столько замечательных идей родилось™ :lol:.

Zerstoren 29-05-2017 11:54 2740468

Iska, давай откроем опять, пиши идеи))

например как запустить из WPI без батника,
а то приходится на каждый ярлык делать vbs и к нему bat чтобы его запустить

Итого вдруг кому надо (решение)
Link.vbs

PHP код:

Option Explicit

Const ForAppending 8

Dim strUrlFileName

Dim objFSO
Dim strPath2UrlFile

strUrlFileName 
"ссылка.url"

Set objFSO WScript.CreateObject("Scripting.FileSystemObject")

With WScript.CreateObject("WScript.Shell")
    
strPath2UrlFile objFSO.BuildPath(.SpecialFolders("Desktop"), strUrlFileName)
    
    
With .CreateShortcut(strPath2UrlFile)
        .
TargetPath "http://yandex.ru"
        
.Save
    End With
End With
    
With objFSO
.OpenTextFile(strPath2UrlFileForAppending)
    .
WriteLine "IconFile=C:\Windows\system32\SHELL32.dll"
    
.WriteLine "IconIndex=27"
End With

Set objFSO 
Nothing

WScript
.Quit 0 



start.bat

start /w wscript.exe "C:\Distr\link.vbs"

Iska 31-05-2017 05:56 2740928

Цитата:

Цитата Zerstoren
например как запустить из WPI без батника, »

А как Вы запускаете «из WPI батником»? И, главное — зачем «батником»?

Цитата:

Цитата Zerstoren
а то приходится на каждый ярлык делать vbs »

Инсталляция приложения сама умеет создавать ярлыки. Какие именно ярлыки Вы создаёте?

Цитата:

Цитата Zerstoren
start.bat »

Крайне не рекомендую давать пакетным файлам имя start.

Zerstoren 02-06-2017 21:31 2741722

Цитата:

Цитата Iska
А как Вы запускаете «из WPI батником»? И, главное — зачем «батником»? »

очень просто, выбираю файл *.bat, затем, что vbs не видит WPI, там файлы bat,cmd,exe
Цитата:

Цитата Iska
Какие именно ярлыки Вы создаёте? »

Ярлыки на корпоративные программы (web-программы, т.е. сайты), у пользователей должны быть ссылки на определенные сайты на рабочем столе, у всех разные, но есть и одинаковые, задал в WPI вместе с установкой таких прог как офис и добавление ярлыков и усё.

Iska 02-06-2017 22:02 2741726

Цитата:

Цитата Zerstoren
затем, что vbs не видит WPI, там файлы bat,cmd,exe »

Выбирайте exe. Конкретно — %SystemRoot%\System32\wscript.exe (cscript.exe). Аргументом к нему указываете путь к скрипту .vbs.

Цитата:

Цитата Zerstoren
Ярлыки на корпоративные программы (web-программы, т.е. сайты), у пользователей должны быть ссылки на определенные сайты на рабочем столе, у всех разные, но есть и одинаковые, задал в WPI вместе с установкой таких прог как офис и добавление ярлыков и усё. »

Предпочтения групповой политики не думали использовать для подобных корпоративных вещей? А также, через групповую политику, развёртывание Office и прочих приложений.


Время: 16:27.

Время: 16:27.
© OSzone.net 2001-