1

Я создал ярлык для контекстного меню, добавив новую запись реестра с этим ключом RE_SZ: cmd.exe start /min /c echo% 1 | clip

Это позволяет мне скопировать путь к файлу, который щелкнул правой кнопкой мыши.

НО: он всегда будет открывать окно cmd на короткое время.

Как я могу скрыть это окно cmd?

1 ответ1

3

Скройте окно cmd используя метод ShellExecute. Следующая настройка реестра работает для одного файла:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\MyCopyAsPath]

[HKEY_CLASSES_ROOT\*\shell\MyCopyAsPath\command]
@="wscript D:\\VB_scripts\\SU\\1007076.vbs \"%1\""

где D:\VB_scripts\SU\1007076.vbs читается следующим образом:

option explicit
On Error GoTo 0

If WScript.Arguments.Count = 1 Then
  Dim objShell
  Set objShell = CreateObject("shell.application")
  objShell.ShellExecute "cmd.exe" _
    , "/C echo(" & WScript.Arguments(0) & "|clip", "", "open", 0
  Set objShell = nothing
Else
  MsgBox "wrong numer of parameters"
End If
Wscript.Quit

Вышеуказанный скрипт возвращает полный путь отдельного файла (или цели ярлыка файла) и добавляет CRLF (возврат каретки и перевод строки). Вы можете опустить CRLF используя трюк set /P следующим образом:

  objShell.ShellExecute "cmd.exe" _
    , "/C <NUL set /P =""" & WScript.Arguments(0) & """|clip", "", "open", 0

Следующее улучшение, чтобы окружить путь в паре " двойных кавычек»:

  objShell.ShellExecute "cmd.exe" _
    , "/C <NUL set /P =""""" & WScript.Arguments(0) & """""|clip", "", "open", 0

Кстати, вот ключ реестра, в котором хранится контекстное меню « Copy as Path :

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\CopyAsPathMenu]
"ProgrammaticAccessOnly"="Apartment"

[HKEY_CLASSES_ROOT\*\shell\CopyAsPathMenu\DropTarget]
"CLSID"="{f3d06e7c-1e45-4a26-847e-f9fcdee59be0}"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .