Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Запуск команд ms-settings (http://forum.oszone.net/showthread.php?t=345608)

BKPB 21-06-2020 20:14 2925830

Запуск команд ms-settings
 
Нужно запустить команду ms-settings:lockscreen с помощью VBS.

Iska 21-06-2020 23:06 2925846

BKPB, а как её запустить без «помощи VBS»? И под какой ОС?

BKPB 22-06-2020 09:36 2925857

Iska, Вот так, с помощью батника:
Код:

@echo off
start ms-settings:lockscreen

Система Windows 10.
Просто так не нравится, потому что сначала запускается окно .cmd, а только потом срабатывает команда.

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

птичка0001 22-06-2020 16:32 2925901

1. Используйте поиск для доступа к параметрам.
2. Создайте ярлык.

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

BKPB 22-06-2020 18:19 2925914

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

YuS_2 22-06-2020 18:40 2925917

Цитата:

Цитата BKPB
Просто так не нравится, потому что сначала запускается окно .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 2925923

YuS_2, Второй вариант, вполне устраивает.

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

птичка0001 22-06-2020 22:10 2925940

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

Iska 22-06-2020 23:29 2925945

YuS_2, так тогда проще — не нужен пакетный файл (не проверялось):
Код:

WScript.CreateObject("WScript.Shell").Run "ms-settings:lockscreen", 0, False

YuS_2 23-06-2020 08:55 2925962

Цитата:

Цитата Iska
так тогда проще — не нужен пакетный файл (не проверялось) »

Да, или так... кстати, во втором, моем варианте, пакетник тоже не нужен...
Но я и не пробовал даже, именно так... попробовал из консоли:
Код:

ms-settings:lockscreen
а в ответ:
Цитата:

Синтаксическая ошибка в имени файла, имени папки или метке тома.
поэтому сразу и start прилепил... :)
Вообще, какие-то достаточно странные команды... со start работают, а без него - ошибка (в консоли powershell аналогично), а прямой запуск из wsh - пожалуйста. Какое-то ретроградство от микрософт проявилось... :)
...
Хмм, как оказалось, это не команды вовсе, это всего-навсего URI (Uniform Resource Identifier)
и такая команда должна работать даже в адресной строке браузера... что, собственно и происходит при запуске через start.
Как говорится, век живи, век учись, всё равно... и т.д. :)
Только одно непонятно: почему напрямую в консоли, без start не работает, при этом из "Выполнить" (Win+R) - вполне себе... чудят, видимо, индусы...

птичка0001 23-06-2020 09:40 2925969

>>>Выполнить" (Win+R) - вполне себе..

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

YuS_2 23-06-2020 12:42 2925986

Цитата:

Цитата птичка0001
Потому что распознаёт URI »

вот и вопрос, почему консоль не научили? Ведь, файлы по ассоциациям открывает же...

птичка0001 23-06-2020 17:16 2926018

>>>не научили
Я такого не говорила :)

Ну а как Вы, например, тот же калькулятор, простите, открываете? 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 2926047

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

YuS_2 23-06-2020 21:38 2926060

Цитата:

Цитата птичка0001
Ну а как Вы, например, тот же калькулятор, простите, открываете? »

так:
Код:

win32calc.exe
или по алиасу:
Код:

calc.exe
и это работает везде...

Цитата:

Цитата птичка0001
Также см. на следующие простые примеры (c#) »

А какая тут связь с нашим вопросом?

Цитата:

Цитата Iska
Про консоли и Win-R — аналогично, та же разница. »

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

птичка0001 23-06-2020 22:24 2926072

>>>Почему не работают URI

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

YuS_2 23-06-2020 22:28 2926073

Цитата:

Цитата птичка0001
Боги... Работают же... Есть же start... »

Цитата:

Цитата YuS_2
Только одно непонятно: почему напрямую в консоли, без start не работает »


птичка0001 23-06-2020 23:24 2926079

К слову, System.Diagnostics.Process.Start похож на ShellExecute.

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

Iska 24-06-2020 00:33 2926087

Цитата:

Цитата YuS_2
Ведь, 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().

Цитата:

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

Да.

Цитата:

Цитата птичка0001
Есть же start... »

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


Время: 05:07.

Время: 05:07.
© OSzone.net 2001-