Войти

Показать полную графическую версию : [решено] Запуск проги из буфере обмена


denis19
07-06-2023, 23:04
Всем привет. Есть скрипт, копирую полный путь к программе, или папке, блокноту, и т.д, и они запускаются при запуске скрипта. Оно хоть и срабатывает, но всплывает ошибка. Иногда бывает без ошибки, но это редко. Бывает и совсем не работает. Помогите подправить. Заранее спасибо.
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
Вы уверены, что в clip всегда окажется путь до программы?

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

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

Sham
08-06-2023, 08:59
обычно берётся через объект htmlfile clip = CreateObject("htmlfile").parentWindow.clipboardData.getData("Text")
MsgBox(clip)

DJ Mogarych
08-06-2023, 09:43
Powershell

script.ps1

if (Test-Path (Get-Clipboard)) {start $path}


Ярлык для запуска

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

NickM
08-06-2023, 10:30
Powershell »
:nono:, раздел ведь VBS/WSH/JS

denis19
08-06-2023, 12:44
Вы уверены, что в clip всегда окажется путь до программы? »
А как же, конечно уверен.

clip = CreateObject("htmlfile").parentWindow.clipboardData.getData("Text")
MsgBox(clip) »
Это же просто появляется окошко с копированным путём. Если это надо куда то в мой вставить-заменить, то всяко пробовал, ошибки выдаёт. Подскажите куда ставить?

NickM
08-06-2023, 13:10
Это же просто появляется окошко с копированным путём. »
Ну так ведь это пример для Вас!

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

Подскажите куда ставить? »
Ну, например, так:
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

А как же, конечно уверен. »
Тогда этого быть не должно:
но всплывает ошибка. Иногда бывает без ошибки, но это редко. »

DJ Mogarych
08-06-2023, 14:13
раздел ведь VBS/WSH/JS »
Только потому, что у автора был такой исходный скрипт. Но если это принципиально, извините.

denis19
08-06-2023, 15:24
Ну, например, так: »
Ошибка всё равно всплывает. Надо убирать цифру в конце. Вот так запускает.
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
Надо убирать цифру в конце. Вот так запускает. »
Так Вы какое приложение пытаетесь запустить?

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

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

Параметры:

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


При передаче параметров в процедуру/ функцию следует соблюдать их порядок и количество.

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

denis19
08-06-2023, 15:37
Так Вы какое приложение пытаетесь запустить? »
В вопросе же есть. Блокноты, папки. Но вот сейчас мной доработанный с папками и прочими нормально, только exe не запускает.

NickM
08-06-2023, 15:41
папками »
Это не приложение.

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

только exe не запускает. »
По какому пути находится приложение?

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

denis19
08-06-2023, 16:06
По какому пути находится приложение? »
Глубоковато, там папка в папке. Но зато другое запускается. Я уже запутался, чего ему надо.
Там обычный способ копирование пути, пробелов не может быть. Всё просто, копируешь полный путь, кнопка в контекстном меню, нажимаешь скрипт и открывается программа, фото, папка, да хоть что, смотря что копировал, что в буфере в данный момент.

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

Sham
10-06-2023, 11:37
в кавычках это так примерно clip = """" & clip & """" Дублированные кавычки - это экранирование кавычки внутри строки. & - конкатенация строк.

denis19
10-06-2023, 16:38
clip = """" & clip & """" »
Вот не знаю куда вставлять или заменять. Можно готовый пример скрипта?

Sham
10-06-2023, 17:44
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 скрипт сразу выходит.




© OSzone.net 2001-2012