Компьютерный форум 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=353676)

denis19 07-06-2023 23:04 3010183

Запуск проги из буфере обмена
 
Всем привет. Есть скрипт, копирую полный путь к программе, или папке, блокноту, и т.д, и они запускаются при запуске скрипта. Оно хоть и срабатывает, но всплывает ошибка. Иногда бывает без ошибки, но это редко. Бывает и совсем не работает. Помогите подправить. Заранее спасибо.
Set obj = CreateObject("InternetExplorer.Application")
obj.Navigate("about:blank")
clip = obj.document.parentWindow.clipboardData.getData("text")
obj.Quit
Set WshShell = CreateObject("WScript.Shell")
RetCode = WshShell.Run(clip, 1, True)

NickM 08-06-2023 06:04 3010188

Вы уверены, что в clip всегда окажется путь до программы?

Не исключено, что закрывать указанный объект Вам следует на последнем этапе, уже после запуска программы.

На этапе отладки отслеживайте/ мониторьте/ проверяйте/ наблюдайте значение clip и возможно Вы увидите, что в переменной не всегда то, что ожидается.

Sham 08-06-2023 08:59 3010199

обычно берётся через объект htmlfile
Код:

clip = CreateObject("htmlfile").parentWindow.clipboardData.getData("Text")
MsgBox(clip)


DJ Mogarych 08-06-2023 09:43 3010204

Powershell

script.ps1
Код:

if (Test-Path (Get-Clipboard)) {start $path}
Ярлык для запуска
Код:

powershell -f "D:\temp\script.ps1"

NickM 08-06-2023 10:30 3010213

Цитата:

Цитата DJ Mogarych
Powershell »

:nono:, раздел ведь VBS/WSH/JS

denis19 08-06-2023 12:44 3010224

Цитата:

Цитата NickM
Вы уверены, что в clip всегда окажется путь до программы? »

А как же, конечно уверен.

Цитата:

Цитата Sham
clip = CreateObject("htmlfile").parentWindow.clipboardData.getData("Text")
MsgBox(clip) »

Это же просто появляется окошко с копированным путём. Если это надо куда то в мой вставить-заменить, то всяко пробовал, ошибки выдаёт. Подскажите куда ставить?

NickM 08-06-2023 13:10 3010228

Цитата:

Цитата denis19
Это же просто появляется окошко с копированным путём. »

Ну так ведь это пример для Вас!

Цитата:

Цитата denis19
Если это надо куда то в мой вставить-заменить, то всяко пробовал, ошибки выдаёт. »

Так покажите, что и куда Вы вставляли?

Цитата:

Цитата denis19
Подскажите куда ставить? »

Ну, например, так:
Код:

set fso = CreateObject("Scripting.FileSystemObject")
clip = CreateObject("htmlfile").parentWindow.clipboardData.getData("Text")
if (fso.FileExists(clip)) Then
Set WshShell = CreateObject("WScript.Shell")
RetCode = WshShell.Run(clip, 1, True)
end if

Цитата:

Цитата denis19
А как же, конечно уверен. »

Тогда этого быть не должно:
Цитата:

Цитата denis19
но всплывает ошибка. Иногда бывает без ошибки, но это редко. »


DJ Mogarych 08-06-2023 14:13 3010232

Цитата:

Цитата NickM
раздел ведь VBS/WSH/JS »

Только потому, что у автора был такой исходный скрипт. Но если это принципиально, извините.

denis19 08-06-2023 15:24 3010235

Цитата:

Цитата NickM
Ну, например, так: »

Ошибка всё равно всплывает. Надо убирать цифру в конце. Вот так запускает.
clip = CreateObject("htmlfile").parentWindow.clipboardData.getData("Text")
MsgBox(clip)
Set WshShell = CreateObject("WScript.Shell")
RetCode = WshShell.Run(clip, True)

NickM 08-06-2023 15:27 3010236

Цитата:

Цитата denis19
Надо убирать цифру в конце. Вот так запускает. »

Так Вы какое приложение пытаетесь запустить?

Цитата:

3.4. Run
Синтаксис:

Run(<Command>,<WindowStyle>,<WaitOnReturn>)
Назначение: создаёт новый независимый процесс, который запускает заданное приложение.

Параметры:

<Command> - строка, командная строка запуска приложения.
<WindowStyle> - необязательный, число. Определяет вид окна запускаемого приложения. Некоторые возможные значения:
0 - Не отображает окно.
1 - Активизирует и отображает окно.
2 - Активизирует окно и отображает его в свёрнутом виде.
3 - Активизирует окно и отображает его в максимизированном виде.
<WaitOnReturn> - необязательный, булево (число). True - сценарий возобновит работу только после завершения вызванного процесса. False (по умолчанию) - управление передаётся сразу обратно в сценарий.
Описание: если параметр "WaitOnReturn" установлен в True, метод возвращает код выхода вызванного приложения. Иначе метод всегда возвращает ноль.
При передаче параметров в процедуру/ функцию следует соблюдать их порядок и количество.

Т.е. Вы ошибочно предполагаете, что опустили второй параметр.

denis19 08-06-2023 15:37 3010237

Цитата:

Цитата NickM
Так Вы какое приложение пытаетесь запустить? »

В вопросе же есть. Блокноты, папки. Но вот сейчас мной доработанный с папками и прочими нормально, только exe не запускает.

NickM 08-06-2023 15:41 3010238

Цитата:

Цитата denis19
папками »

Это не приложение.

Вам следует различать сущности;

Цитата:

Цитата denis19
только exe не запускает. »

По какому пути находится приложение?

Не забывайте о возможных пробелах в пути и обрамляйте кавычками.

denis19 08-06-2023 16:06 3010239

Цитата:

Цитата NickM
По какому пути находится приложение? »

Глубоковато, там папка в папке. Но зато другое запускается. Я уже запутался, чего ему надо.
Там обычный способ копирование пути, пробелов не может быть. Всё просто, копируешь полный путь, кнопка в контекстном меню, нажимаешь скрипт и открывается программа, фото, папка, да хоть что, смотря что копировал, что в буфере в данный момент.

denis19 10-06-2023 08:59 3010337

Цитата:

Цитата NickM
Не забывайте о возможных пробелах в пути и обрамляйте кавычками. »

Я понял. Чтоб запускалось абсолютно всё, и как бы глубоко не находился файл в подпапках, то надо чтоб путь был в кавычках. Есть ли такой вариант чтоб запускалось без кавычек в пути?
clip = CreateObject("htmlfile").parentWindow.clipboardData.getData("Text")
Set WshShell = CreateObject("WScript.Shell")
RetCode = WshShell.Run(clip)

Sham 10-06-2023 11:37 3010341

в кавычках это так примерно
Код:

clip = """" & clip & """"
Дублированные кавычки - это экранирование кавычки внутри строки. & - конкатенация строк.

denis19 10-06-2023 16:38 3010348

Цитата:

Цитата Sham
clip = """" & clip & """" »

Вот не знаю куда вставлять или заменять. Можно готовый пример скрипта?

Sham 10-06-2023 17:44 3010350

Код:

dim clip, fso
clip = CreateObject("htmlfile").parentWindow.clipboardData.getData("Text")
set fso = CreateObject("Scripting.FileSystemObject")
if not fso.FileExists(clip) then call WSH.Echo("not a path:", clip) : WSH.Quit(1)
if InStr(clip, " ") then clip = """" & clip & """"
call CreateObject("WScript.Shell").Run(clip, 1, false)

если run с true, то скрипт не завершается сразу и ждёт закрытия дочернего процесса. false скрипт сразу выходит.


Время: 21:25.

Время: 21:25.
© OSzone.net 2001-