VBS Запустить выполнение файла из буфера

Паразит

Пользователь
Сообщения
61
Реакции
2
Баллы
18
Появляется окно с полным путём до файла
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,013
Реакции
5,817
Баллы
648
А... так вам нужно запустить файл, путь к которому прописан в буфере обмена?

rdata подставляете в ShellExecute:

VB.NET:
Set objShellApp = CreateObject("Shell.Application")
objShellApp.ShellExecute rdata, "", "", "", 1
 

Паразит

Пользователь
Сообщения
61
Реакции
2
Баллы
18
Ну да. Мне надо выполнить файл, полный путь до которого находится в буфере.
Напишите, плиз, полный скрипт, а то я тут совсем запутался.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,013
Реакции
5,817
Баллы
648
VB.NET:
Option Explicit

Dim oFSO, sFile, objShellApp
set oFSO       = CreateObject("Scripting.FileSystemObject")

sFile = GetFromClipBoard()

if Len(sFile) <> 0 then
    if oFSO.FileExists(sFile) then
        Set objShellApp = CreateObject("Shell.Application")
        objShellApp.ShellExecute sFile, "", "", "", 1
    else
        msgbox "Файл не существует: " & sFile
    end if
else
    msgbox "Буфер обмена пуст!"
end if

Function GetFromClipBoard()
    Dim rData, oFSO, oShell, AppPath, oTS
    On Error Resume Next
    rData = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text")
    On Error Goto 0
   
    if Len(rData) = 0 then
        'попытка получить буфер через ConClip
        set oFSO       = CreateObject("Scripting.FileSystemObject")
        set oShell     = CreateObject("WScript.Shell")
       
        ' GetClip.exe должен находиться в папке со скриптом, иначе укажите полный путь в этой переменной
        AppPath = oFSO.GetParentFolderName(WScript.ScriptFullName)
       
        if not oFSO.FileExists(AppPath & "\GetClip.exe") then
            msgbox "Программа GetClip не найдена!" & vbcrlf & "Буфер обмена пуст!"
            WScript.Quit
        end if
        oShell.Run "cmd.exe /c """"" & AppPath & "\GetClip.exe"" /text > """ & AppPath & "\Clip.txt" & """""", 6, true
        if oFSO.FileExists(AppPath & "\Clip.txt") then
            set oTS = oFSO.OpenTextFile(AppPath & "\Clip.txt", 1, false)
            if not (oTS.AtEndOfStream) then
                rData = oTS.ReadAll
            end if
            oTS.Close
        end if
    end if
    GetFromClipBoard = rData
End Function
С учётом, что резервный способ - файл GetClip.exe должен находиться в папке со скриптом.
 

Паразит

Пользователь
Сообщения
61
Реакции
2
Баллы
18
Dragokas, огромное. спасибо. Сам бы такое, я никогда бы не сделал.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,013
Реакции
5,817
Баллы
648
Да там по сути весь скрипт можно заменить одой строкой:
VB.NET:
CreateObject("Shell.Application").ShellExecute CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text"), "", "", "", 1
Всё остальное просто для подстраховки и контроля ошибок.
 
Сверху Снизу