Войти

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


BKPB
21-06-2020, 20:14
Нужно запустить команду ms-settings:lockscreen с помощью VBS.

Iska
21-06-2020, 23:06
BKPB, а как её запустить без «помощи VBS»? И под какой ОС?

BKPB
22-06-2020, 09:36
Iska, Вот так, с помощью батника:
@echo off
start ms-settings:lockscreen
Система Windows 10.
Просто так не нравится, потому что сначала запускается окно .cmd, а только потом срабатывает команда.

Команды ms-settings
https://wd-x.ru/tablica-komand-dlya-vyzova-parametrov-windows-10/

птичка0001
22-06-2020, 16:32
1. Используйте поиск для доступа к параметрам.
2. Создайте ярлык.

P.S. Лучше, конечно, поиск :)

BKPB
22-06-2020, 18:19
птичка0001, мне нужно не просто открывать Параметры, а чтобы они открывались после выполнения определённого задания в скрипте.
Если будет ответ, что с помощью VBS это сделать невозможно, тогда вопрос будет закрыт.
А пока, подожду.

YuS_2
22-06-2020, 18:40
Просто так не нравится, потому что сначала запускается окно .cmd, а только потом срабатывает команда. »
Можно передать пакетник cmd в качестве параметра такому скрипту:
Set oTmp = CreateObject("WScript.Shell")
oTmp.Run """" & WScript.Arguments(0) & """", 0, False

ну или напрямую:
Set oTmp = CreateObject ("WScript.shell")
oTmp.run "cmd /c start ms-settings:lockscreen", 0, False

BKPB
22-06-2020, 19:38
YuS_2, Второй вариант, вполне устраивает.

Спасибо за помощь.

птичка0001
22-06-2020, 22:10
BKPB, из контекста Ваше «дополнение» не следовало, поэтому были предложены такие варианты. Тогда используйте современные инструменты для достижения всех Ваших целей, а не .bat, cmd и иже с ними. Будет проще.

Iska
22-06-2020, 23:29
YuS_2, так тогда проще — не нужен пакетный файл (не проверялось):
WScript.CreateObject("WScript.Shell").Run "ms-settings:lockscreen", 0, False

YuS_2
23-06-2020, 08:55
так тогда проще — не нужен пакетный файл (не проверялось) »
Да, или так... кстати, во втором, моем варианте, пакетник тоже не нужен...
Но я и не пробовал даже, именно так... попробовал из консоли:
ms-settings:lockscreen
а в ответ:
Синтаксическая ошибка в имени файла, имени папки или метке тома.
поэтому сразу и start прилепил... :)
Вообще, какие-то достаточно странные команды... со start работают, а без него - ошибка (в консоли powershell аналогично), а прямой запуск из wsh - пожалуйста. Какое-то ретроградство от микрософт проявилось... :)
...
Хмм, как оказалось, это не команды вовсе, это всего-навсего URI (Uniform Resource Identifier) (https://docs.microsoft.com/en-us/windows/uwp/launch-resume/launch-default-app)
и такая команда должна работать даже в адресной строке браузера... что, собственно и происходит при запуске через start.
Как говорится, век живи, век учись, всё равно... и т.д. :)
Только одно непонятно: почему напрямую в консоли, без start не работает, при этом из "Выполнить" (Win+R) - вполне себе... чудят, видимо, индусы...

птичка0001
23-06-2020, 09:40
>>>Выполнить" (Win+R) - вполне себе..

Потому что распознаёт URI

YuS_2
23-06-2020, 12:42
Потому что распознаёт URI »
вот и вопрос, почему консоль не научили? Ведь, файлы по ассоциациям открывает же...

птичка0001
23-06-2020, 17:16
>>>не научили
Я такого не говорила :)

Ну а как Вы, например, тот же калькулятор, простите, открываете? Win+R и в консоли?
Также см. на следующие простые примеры (c#):

System.Diagnostics.Process.Start("ms-settings:lockscreen");


System.Diagnostics.Process.Start("app:");


System.Diagnostics.Process.Start("app:http://www.google.com");

Iska
23-06-2020, 20:41
YuS_2, WshShell.Run() — это не прямой запуск, не CreateProcess(), это аналог ShellExecute() — посему там отрабатывают простые shell-команды и пути AppPaths. Про консоли и Win-R — аналогично, та же разница.

YuS_2
23-06-2020, 21:38
Ну а как Вы, например, тот же калькулятор, простите, открываете? »
так:
win32calc.exe
или по алиасу:
calc.exe
и это работает везде...

Также см. на следующие простые примеры (c#) »
А какая тут связь с нашим вопросом?

Про консоли и Win-R — аналогично, та же разница. »
так в том и вопрос... в чем разница-то?
Ведь, shell-команды отрабатывают в консоли? Почему не работают URI?
Ну, да ладно, всё равно, ничего не изменим... вопросы больше риторические...

птичка0001
23-06-2020, 22:24
>>>Почему не работают URI

Боги... Работают же... Есть же start...

YuS_2
23-06-2020, 22:28
Боги... Работают же... Есть же start... »
Только одно непонятно: почему напрямую в консоли, без start не работает »

птичка0001
23-06-2020, 23:24
К слову, System.Diagnostics.Process.Start похож на ShellExecute.

Используйте ShellExecute...

Iska
24-06-2020, 00:33
Ведь, shell-команды отрабатывают в консоли? »
Нет, не отрабатывают.

Можете сравнить:
Option Explicit

Const WshRunning = 0
Const WshFinished = 1
Const WshFailed = 2

Const strShellName = "shell:AppData"


With WScript.CreateObject("WScript.Shell")
.Run """" & strShellName & """", 1, False

WScript.Sleep 2000

With .Exec("""" & strShellName & """")
If .Status <> WshFailed Then
Do Until .Status = WshRunning
WScript.Sleep 100
Loop

Do
WScript.Sleep 100
Loop Until .Status = WshFinished

WScript.Echo "Execute [" & strShellName & "] successfully."
Else
WScript.Echo "Can't execute [" & strShellName & "]."
WScript.Quit 1
End If
End With
End With

WScript.Quit 0

WshShell.Run() — это ShellExecute(), WshShell.Exec() — «чистый» CreateProcess().

Ведь, файлы по ассоциациям открывает же... »
Да.

Есть же start... »
start — это и есть ShellExecute() из-под консоли.




© OSzone.net 2001-2012