View previous topic :: View next topic |
Author |
Message |
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Aug 07, 2016 15:26 Post subject: |
|
|
Skif_off
Только не предупреждение.
Либо обрезать справа, оставив нативный метод, либо подключать скрытую консоль для полного имени. Что лучше? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2585 Location: Большая деревня Москва
|
(Separately) Posted: Sun Aug 07, 2016 16:29 Post subject: |
|
|
Flasher wrote: | Адрес - это не заголовок. В поставленной задаче он не фигурировал | Советую перечитать первый пост темы. Там даже картинка приведена для особо внимательных. Слово "заголовок" в посте не обнаруживается. Зато русским языком написано "адресную строку".
Впрочем, если неймется, по классу ищем окно и берем его заголовок. Flasher wrote: | Браузеров разных может быть сколько угодно открыто или не открыто вообще | Для первого случая имеется функция: PowerPro help wrote: | 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
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон) |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Aug 07, 2016 16:38 Post subject: |
|
|
Вахмурка wrote: | Советую перечитать первый пост темы. Там даже картинка приведена для особо внимательных. Слово "заголовок" в посте не обнаруживается. Зато русским языком написано "адресную строку". | Советую помимо чтения ещё и по ссылкам не лениться ходить, где становится очевидно, что в имени файла отображён именно заголовок. И в посте написано про перетаскивание адресной, вот именно что, строки, а вовсе не подстановку адреса в имя.
Вахмурка wrote: | Во втором же случае задача вовсе теряет смысл | Угу. Только мой скрипт с этим почему-то не согласен... _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10315 Location: Россия, Саратов
|
(Separately) Posted: Sun Aug 07, 2016 16:50 Post subject: |
|
|
Вахмурка
Если следовать картинке для особо внимательных и проделать ровно то, что на ней изображено, то в результате получим именно ярлык на URL с именем заголовка. Это, кстати, было первое, что я сделал, прежде чем стал разбираться дальше, решая вопрос о правильном переименовании темы. А то, что у топик-стартера проблемы с терминологией и что он после первого поста не проявил к дальнейшему обсуждению ни малейшего интереса — это уже другая история. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
Skif_off
Joined: 28 Nov 2012 Posts: 1236
|
(Separately) Posted: Sun Aug 07, 2016 17:53 Post subject: |
|
|
Flasher
Имел в виду предупреждение + InputBox, чтобы пользователь сам укоротил/выбрал имя, но в плане автоматизации не очень удобно получается и потребуется новая проверка.
В голову пришло что-нибудь вроде:
Code: | WSH.CreateShortcut(Left(WSH.CurrentDirectory & Title, 245) & ".url") |
не знаю, как лучше. Сейчас проверил, если имя >MAX_PATH, то WSH.CurrentDirectory вернёт только букву диска - тоже неприятность, получается?
Вахмурка wrote: | по классу ищем окно и берем его заголовок |
Окон многовато получится, нередко бывает запущено больше одного браузера. |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2585 Location: Большая деревня Москва
|
(Separately) Posted: Sun Aug 07, 2016 17:57 Post subject: |
|
|
Skif_off wrote: | Окон многовато получится, нередко бывает запущено больше одного браузера. | Ну так в этом случае никакая автоматизация не поможет - компьютер не телепат, мысли и желания угадывать не умеет*. Выводим список окон, выбираем нужное
___
* пока, по крайней мере _________________ Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон) |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Aug 07, 2016 17:59 Post subject: |
|
|
Skif_off
InputBox - те же яйца.
Как резать в коде - не вопрос, я спрашивал про сам подход.
Я, в принципе, знаю, как писать "длинные" бинарники, надо только сообразить, как после всех смещений убрать хвост из символов нулевого кода. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Skif_off
Joined: 28 Nov 2012 Posts: 1236
|
(Separately) Posted: Sun Aug 07, 2016 18:19 Post subject: |
|
|
Flasher
Мне кажется, без предупреждения лезть за MAX_PATH не стоит, тогда проще резать слева (если молча). |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Aug 07, 2016 18:26 Post subject: |
|
|
Skif_off
Почему? Начиная с Висты хотя бы? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Skif_off
Joined: 28 Nov 2012 Posts: 1236
|
(Separately) Posted: Sun Aug 07, 2016 19:01 Post subject: |
|
|
Flasher
Куча софта не умеет с ними работать, первое, что пришло в голову: TeraCopy, Double Commander, %L/%UL в ТС.
VBScript/JScript работают? Судя по .CurrentDirectory возможны сюрпризы.
ИМХО, без неожиданностей удобнее, а так - решать тебе. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Aug 08, 2016 01:07 Post subject: |
|
|
Skif_off
Да, проблемы есть. Те же плагины urlview и urlgrank с длинными не работают. Тогда соглашусь, можно и спросить.
Я, пожалуй, в случае длинной папки ничего спрашивать не буду. Только если имя файла не вмещается. Вместо СurDir-y - %P.
Вариант с поддержкой длинного пути: Code: | '============================== 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) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Aug 08, 2016 22:52 Post subject: |
|
|
Оказалось, что FSO без проблем работает с длинными путями при подстановке префикса \\?\ (чего не скажешь про Shell). Исправил. Плюс теперь скрипт нек. запретные символы заменяет на юникодные аналоги. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Iori
Joined: 25 Apr 2012 Posts: 551
|
(Separately) Posted: Sun Oct 01, 2017 03:11 Post subject: |
|
|
Flasher
Не пробегал ли случайно вариант скрипта выше, который бы брал название файла от файла на котором находится курсор. |
|
Back to top |
|
|
Zmy
Joined: 06 Apr 2015 Posts: 78
|
(Separately) Posted: Sun Oct 01, 2017 11:15 Post subject: |
|
|
Iori, попробуйте так.
Script
Code: | ' 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 |
. |
|
Back to top |
|
|
Iori
Joined: 25 Apr 2012 Posts: 551
|
(Separately) Posted: Sun Oct 01, 2017 21:26 Post subject: |
|
|
Zmy
Спасибо То что надо.
Flasher, тебе отдельное спасибо за скрипт. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|