Как создать ярлык для URL?
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
Skif_off
Только не предупреждение.
Либо обрезать справа, оставив нативный метод, либо подключать скрытую консоль для полного имени. Что лучше?
Только не предупреждение.
Либо обрезать справа, оставив нативный метод, либо подключать скрытую консоль для полного имени. Что лучше?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
- Вахмурка
- Сообщения: 2587
- Зарегистрирован: Пн дек 27, 2004 14:47
- Откуда: Большая деревня Москва
- Контактная информация:
Советую перечитать первый пост темы. Там даже картинка приведена для особо внимательных. Слово "заголовок" в посте не обнаруживается. Зато русским языком написано "адресную строку".Flasher писал(а):Адрес - это не заголовок. В поставленной задаче он не фигурировал
Впрочем, если неймется, по классу ищем окно и берем его заголовок.
Для первого случая имеется функция:Flasher писал(а):Браузеров разных может быть сколько угодно открыто или не открыто вообще
Во втором же случае задача вовсе теряет смыслPowerPro help писал(а):s = browserURL("brser") URL in current browser window; brser gives browser name, if omitted uses exec.setbrowser value. Valid values include iexplore, netscape, firefox, maxthon, mozilla.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Советую помимо чтения ещё и по ссылкам не лениться ходить, где становится очевидно, что в имени файла отображён именно заголовок. И в посте написано про перетаскивание адресной, вот именно что, строки, а вовсе не подстановку адреса в имя.Вахмурка писал(а):Советую перечитать первый пост темы. Там даже картинка приведена для особо внимательных. Слово "заголовок" в посте не обнаруживается. Зато русским языком написано "адресную строку".
Угу. Только мой скрипт с этим почему-то не согласен...Вахмурка писал(а):Во втором же случае задача вовсе теряет смысл
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Вахмурка
Если следовать картинке для особо внимательных и проделать ровно то, что на ней изображено, то в результате получим именно ярлык на URL с именем заголовка. Это, кстати, было первое, что я сделал, прежде чем стал разбираться дальше, решая вопрос о правильном переименовании темы.
А то, что у топик-стартера проблемы с терминологией и что он после первого поста не проявил к дальнейшему обсуждению ни малейшего интереса — это уже другая история.
Если следовать картинке для особо внимательных и проделать ровно то, что на ней изображено, то в результате получим именно ярлык на URL с именем заголовка. Это, кстати, было первое, что я сделал, прежде чем стал разбираться дальше, решая вопрос о правильном переименовании темы.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Не представит себе наши безобразия.
Flasher
Имел в виду предупреждение + InputBox, чтобы пользователь сам укоротил/выбрал имя, но в плане автоматизации не очень удобно получается и потребуется новая проверка.
В голову пришло что-нибудь вроде:
не знаю, как лучше. Сейчас проверил, если имя >MAX_PATH, то WSH.CurrentDirectory вернёт только букву диска - тоже неприятность, получается?
Имел в виду предупреждение + InputBox, чтобы пользователь сам укоротил/выбрал имя, но в плане автоматизации не очень удобно получается и потребуется новая проверка.
В голову пришло что-нибудь вроде:
Код: Выделить всё
WSH.CreateShortcut(Left(WSH.CurrentDirectory & Title, 245) & ".url")Окон многовато получится, нередко бывает запущено больше одного браузера.Вахмурка писал(а):по классу ищем окно и берем его заголовок
- Вахмурка
- Сообщения: 2587
- Зарегистрирован: Пн дек 27, 2004 14:47
- Откуда: Большая деревня Москва
- Контактная информация:
Ну так в этом случае никакая автоматизация не поможет - компьютер не телепат, мысли и желания угадывать не умеет*. Выводим список окон, выбираем нужноеSkif_off писал(а):Окон многовато получится, нередко бывает запущено больше одного браузера.
___
* пока, по крайней мере
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Skif_off
InputBox - те же яйца.
Как резать в коде - не вопрос, я спрашивал про сам подход.
Я, в принципе, знаю, как писать "длинные" бинарники, надо только сообразить, как после всех смещений убрать хвост из символов нулевого кода.
InputBox - те же яйца.
Как резать в коде - не вопрос, я спрашивал про сам подход.
Я, в принципе, знаю, как писать "длинные" бинарники, надо только сообразить, как после всех смещений убрать хвост из символов нулевого кода.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Flasher
Куча софта не умеет с ними работать, первое, что пришло в голову: TeraCopy, Double Commander, %L/%UL в ТС.
VBScript/JScript работают? Судя по .CurrentDirectory возможны сюрпризы.
ИМХО, без неожиданностей удобнее, а так - решать тебе.
Куча софта не умеет с ними работать, первое, что пришло в голову: TeraCopy, Double Commander, %L/%UL в ТС.
VBScript/JScript работают? Судя по .CurrentDirectory возможны сюрпризы.
ИМХО, без неожиданностей удобнее, а так - решать тебе.
Skif_off
Да, проблемы есть. Те же плагины urlview и urlgrank с длинными не работают. Тогда соглашусь, можно и спросить.
Я, пожалуй, в случае длинной папки ничего спрашивать не буду. Только если имя файла не вмещается. Вместо СurDir-y - %P.
[cut="Вариант с поддержкой длинного пути:"][/cut]
Да, проблемы есть. Те же плагины urlview и urlgrank с длинными не работают. Тогда соглашусь, можно и спросить.
Я, пожалуй, в случае длинной папки ничего спрашивать не буду. Только если имя файла не вмещается. Вместо СurDir-y - %P.
[cut="Вариант с поддержкой длинного пути:"]
Код: Выделить всё
'============================== VBS ===============================
' Cоздать URL-ярлык в активном каталоге со ссылкой из буфера обмена
' Параметр: "%P"
'==================================================================
If WScript.Arguments.Count = 0 Then WScript.Quit
Dim WSH : Set WSH = CreateObject("WScript.Shell")
R = "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\1407"
On Error Resume Next
A = WSH.RegRead(R): If A > 0 Or Err.Number <> 0 Then WSH.RegWrite R, 0, "REG_DWORD"
URL = Trim(CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text"))
If A > 0 Then WSH.RegWrite R, A, "REG_DWORD"
On Error Goto 0 : Test = Left(URL, 4)
If Test = "" Or (Test <> "www." And Test <> "http") Then MsgBox "Буфер " &_
"обмена не содержит гиперссылки!", 4144, " Создание URL-ярлыка" : WScript.Quit
S = Split(": ? * "" ; \ / | < >")
R = Array(-230,-225,-246,698,894,-24,-24,-24,706,707)
With WScript.CreateObject("InternetExplorer.Application", "IE_")
.Visible = 0 : .Silent = 1 : .AddressBar = 0
.MenuBar = 0 : .ToolBar = 0 : .StatusBar = 0 : .Navigate(URL)
While IsEmpty(Title) Or Left(Title, 4) = "http" WScript.Sleep 20 :Wend
.Stop : .ExecWB 45, 2 : FN = Title & ".url"
End With : Sub IE_TitleChange(T) Title = Trim(T) :End Sub
For i = 0 To 9 : FN = Replace(FN, S(i), ChrW(R(i))) :Next
Dir = WScript.Arguments(0) : FP = Dir & FN
If Len(FP) > 259 Then Pr = "\\?\" : If Len(Dir) < 260 Then _
M = MsgBox("Путь к ярлыку слишком длинный!" & vbCr & vbCr & "Да -" &_
" оставить. Нет - обрезать справа.", 4132, " Создание URL-ярлыка") :_
If M = 7 Then FP = Left(Left(FP, Len(FP) - 4), 255) & ".url"
With CreateObject("Scripting.FileSystemObject").CreateTextFile(Pr & FP, 1, 1)
.Write "[InternetShortcut]" & vbCrLf & "URL=" & URL : .Close
End With : WSH.SendKeys "^r"Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Оказалось, что FSO без проблем работает с длинными путями при подстановке префикса \\?\ (чего не скажешь про Shell). Исправил. Плюс теперь скрипт нек. запретные символы заменяет на юникодные аналоги.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Iori, попробуйте так.
[cut="Script"]
[/cut]
.
[cut="Script"]
Код: Выделить всё
' Cоздать URL-ярлык в активном каталоге со ссылкой из буфера обмена
' Автор Flasher
' Параметры: "%P" "%N"
'==================================================================
If WScript.Arguments.Count < 2 Then MsgBox "Параметры:" & vbCr & vbCr & """%P"" ""%N""" & vbCr, _
0, "Не хватает параметров." : WScript.Quit
Dim WSH : Set WSH = CreateObject("WScript.Shell")
R = "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\1407"
On Error Resume Next
A = WSH.RegRead(R): If A > 0 Or Err.Number <> 0 Then WSH.RegWrite R, 0, "REG_DWORD"
URL = Trim(CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text"))
If A > 0 Then WSH.RegWrite R, A, "REG_DWORD"
On Error Goto 0 : Test = Left(URL, 4)
If Test = "" Or (Test <> "www." And Test <> "http") Then MsgBox "Буфер " &_
"обмена не содержит гиперссылки!", 4144, "To Clip not URL" : Set WSH = Nothing : WScript.Quit
S = Split(": ? * "" ; \ / | < >") : R = Array(-230,-225,-246,698,894,-24,-24,-24,706,707)
With WScript.CreateObject("InternetExplorer.Application", "IE_")
.Visible = 0 : .Silent = 1 : .AddressBar = 0
.MenuBar = 0 : .ToolBar = 0 : .StatusBar = 0 : .Navigate(URL)
While IsEmpty(Title) Or Left(Title, 4) = "http" WScript.Sleep 20 :Wend
.Stop : .ExecWB 45, 2 : FN = WScript.Arguments(1) & ".url"
End With : Sub IE_TitleChange(T) Title = Trim(T) :End Sub
For i = 0 To 9 : FN = Replace(FN, S(i), ChrW(R(i))) :Next
Dir = WScript.Arguments(0) : FP = Dir & FN : If Len(FP) > 259 Then Pr = "\\?\" : If Len(Dir) < 260 Then _
M = MsgBox("Путь к ярлыку слишком длинный!" & vbCr & vbCr & "Да -" &_
" оставить. Нет - обрезать справа.", 4132, " Создание URL-ярлыка") :_
If M = 7 Then FP = Left(Left(FP, Len(FP) - 4), 255) & ".url"
With CreateObject("Scripting.FileSystemObject").CreateTextFile(Pr & FP, 1, 1)
.Write "[InternetShortcut]" & vbCrLf & "URL=" & URL : .Close
End With : WSH.SendKeys "^r" : Set WSH = Nothing : WScript.Quit.