EgorS
1- Clip уже встроен во все версии win10 , не проверял как там у w11. Сам clip предназначен для командной строки ДОС-а. О чём и поведала ссылка на Микрософт (см выше пост).
2- HTA это тоже встроенная такая же внешняя прога, как и clip. Отличие только одно. Она объектно ориентированная и так же как и Clip встроена во все версии w10 и w11.
...
3- Все ЭТИ внешние проги, это отдельный запуск их в среде VBS. Это так же как запуск паинбруша в VBS и "проигрывание" в ней командами по нажатию клавиш. Но конечно HTA более удобней чем DDL интерфейс. А с вызовом например MSWord-а конечно проще. Кстати в винах тоже встроен WordPad, в котором тоже есть работа как и в MSWord-е работа с буфером обмена.
4- Вы так и не среагировали на моё предложение рассмотреть работу вместо буфера обмена по передачи данных в VBS через встроенные "проводник" и рабочий стол".
.. Возможно вы так и не поняли задумку ТОЙ темы.
Короче.
Все известные способы по передачи данных ориентированы на использование буфера обмена.
Если вы писали проги на VB5 VB6, то должны были заметить один нюанс, в свойствах объектах как форма или кнопка, есть такие параметры которые можно задать и програмно менять как титлы, каптион или другие установки. Которые имеют тип строковых данных. Я например через них передавал данные переменных , между другими формами или прогами.
Так вот. У микрософта т.к. все объекты так же имеют объектно ориентированный интерфейс тоже имеют такие свойства. Поэтому если если посмотрите в реестре по ссылке
\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\
то обнаружите множество таких объектов.
+ в VBS встроена функция объявления объектов не только через "класс.имякласса", но и через CLSID.
Например WinWord.
В VBS это будет выглядеть так.
Set wordApp = CreateObject("Word.Application")
.
Но можно и так
По ссылке
Компьютер\HKEY_CLASSES_ROOT\Word.Application\CLSID
можно увидеть этот CLSID.
{000209FF-0000-0000-C000-000000000046}
И если вы в свой код вставите этот CLSID то это будет тоже самое что и
Set wordApp = CreateObject("New:{000209FF-0000-0000-C000-000000000046}")
.
И можете после этого так же управлять этим Вордом как и в стандартном объявлении по имени класса. Ремарка. Проверил этот пример- он не пашет вот так с наскока...
Поэтому исходя из этого были найдены некоторые объекты вина с их CLSID, такие как например
"Проводник" и "Рабочий стол", которые можно также как и винворд объявлять в VBS через CLSID. И у которых так же как и в VB6 есть некоторые методы и свойства внутри этих объектов, через которые можно так же передавать как и через буфер обмена данные.
При этом Через эти свойства передаются не только стандартные типы данных, но такие как ОБЪЕКТЫ целиком.
Вот например я в том примере -->
https://forum.script-coding.com/viewtop … 34#p162734
Применял для передачи через "рабочий стол" объект FSO, у которого есть функция "показ пути". Эта функция показывает путь из которого была запущен VBS с вызовом этого объекта.
Если например в коде запустите
Set FSO = CreateObject("Scripting.FileSystemObject")
То функция показа пути вам выдаст путь откуда был запущен этот VBS код.
А т.к. через такие объекты как "проводник, рабочий стол"
передаётся ПОЛНОСТЬЮ объект, а не данные, то другой скрип VBS получает его как объект, запущенный в другом скрипте..
Короче.
Я запустил вызов fso в одном скрипте. потом не закрывая этот скрит, запустил другой скрипт который был расположен совершенно на другом физ. диске и в другой папке.
И которые получил через проводник полностью путь того первого запущенного VBS скрипта который первый объявил этот FSO.
Первый скрипт был запущен с диска "D:\temp1". Второй скрипт был запущен с диска "Е:\temp3"
Второй скрипт получил объект FSO от первого скрипта и он показал путь "D:\temp1", хотя сам этот fso во втором скрипте находился на пути "Е:\temp3".
Понятно объяснил?
Ещё пример.
Объявляете в первой скрипте массив данных. заполняете его там в скрипте. и передаёте через "проводник или рабочий стол" его целиком (переменную этого массива).
Тут слово "передаёте" надо трактовать как посылаете в свойства "проводник, рабочий стол" SetProperty эту всю переменную массива (имя её).
А другой скрип VBS через "проводник или рабочий стол" получает этот массив полностью со всеми данными и работает с ними через функцию GetProperty имя переменной массива .
И так можно передавать целые объекты между любыми прогами в которых есть встроенный VBS.
...
Это удобнее чем использовать буфер обмена.
Чем ещё полезна эта фича? А тем что второй скрипт будет выполняться и "переговариваться" между первым скриптом не зависимо , выполнена ли следующая функция в скрипте или нет...
Т.е. это своеобразная многопоточность.
Лучше конечно передавать через "рабочий стол". Он будет хранить объекты (данные), даже если VBS скрипт будет закрыт. И потеряет эти данные только после закрытия вина целиком.
Хотя я может и не прав. потому что скорее всего рабоч стол хранит в себе адрес памяти переменной. И после закрытия кода, этот адрес освобождается.