Войти

Показать полную графическую версию : [решено] Перевод фокуса на программу, запускаемую из планировщика (notepad++)


CyraxZ
23-06-2017, 01:19
Программы, которые необходимо часто запускать с правами администратора, а также те, которые размещаются в автозагрузке, запускаю ярлыком через планировщик.
Для некоторых программ (например, Notepad++) нужно реализовать перевод фокуса на эту программу.

Вот в этой статье (http://www.oszone.net/10594/run#430) описывается способ с командой start применительно к Windows 7:
В качестве примера приводится команда: /c start /d "C:\Windows\System32\" cmd.exe
Не понятно, что за "/с" здесь указывается перед командой start ?

Проблема 1. notepad++ невозможно нормально прописать в качестве программы по умолчанию для текстовых файлов и логов:
1) Настройки ассоциаций в параметрах самой программы никакого эффекта не приносят
2) В списке программ "Приложения по умолчанию - Задать значения по умолчанию по приложению" программы "notepad++" нет и добавить её в этот список невозможно (нет соответствующий кнопок)

3) Единственный вариант - добавлять "notepad++" для каждого расширения конкретно ("Выбор стандартных приложений для типов файлов"). Так и сделал - для .txt и .log. Но при этом имеем:
- при запуске текстового файла из Far Manager, проводника или ярлыком notepad++ нормально запускается
- но при запуске текстового файла через задачу планировщика (в качестве действия указывается путь к текстовому файлу) открывается окно "Каким образом вы хотите открыть этот файл ?" с выделенным пунктом "notepad++". А ведь запуск через планировщик как раз нужен для реализации запуска с правами администратора без подтверждения.

Проблема 2. Для того, чтобы запустить текстовый файл с помощью "notepad++" с правами администратора без подтверждения, приходится в планировщике явно указывать программу для запуска (галка "Запускать с наивысшими правами" устанавливается):
"C:\Program Files\Notepad++\notepad++.exe" "F:\...\error.log"
А для того, чтобы обеспечить перевод фокуса на "notepad++" (согласно вышеприведённой статье), в качестве действия прописывается ("start" - идёт в "Программа или сценарий", остальное - в аргументы):
start /d "C:\Program Files\Notepad++\" "notepad++.exe" "F:\...\error.log"
В этом случае при запуске задачи (через ярлык) на мгновение что-то открывается и тут же исчезает. Даже не понятно, что открывается "notepad++", какое-то сообщение, или cmd.exe. Если эту команду выполнить из Far Manager (запускается с правами администратора), то "notepad++" нормально открывается и получает фокус. Если выполнить эту команду из cmd.exe, то вылезает сообщение о неизвестной команде "start".

Итого. Нужно либо:
а) заставить Windows 10 средствами планировщика (когда в качестве действия указывается путь к текстовому файлу) сразу запускать notepad++ без окна "Каким образом вы хотите открыть этот файл ?"
б) "Научить" планировщик выполнять команду:start /d "C:\Program Files\Notepad++\" "notepad++.exe" "F:\...\error.log"

x0r
23-06-2017, 03:18
Программы, которые необходимо ... апускать с правами администратора ... которые размещаются в автозагрузке, запускаю ярлыком через планировщик. »
А почему просто не перенести ключи в реестре из
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run (или где там оно еще себя пишет. обычно тут, но есть еще парочка мест)
в
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
---
Свойства notepad.exe - Совместимость - Изменить для всех - Запускать от Админа(галочку жмакнуть) - и настроить ассоциации у него на *.log, *.txt Т.к. он будет от Админа, то будет доступ в кусты реестра для записи.
----
для запуска оконных приложений (GUI) через start указывай пустое имя_окна
start "" /d "C:\Program Files\Notepad++\" "notepad++.exe" "F:\...\error.log"
хз. десятки нету.

Iska
23-06-2017, 03:28
В качестве примера приводится команда: /c start /d "C:\Windows\System32\" cmd.exe
Не понятно, что за "/с" здесь указывается перед командой start ? »
1. Приводится приложение «cmd.exe», а то, что указали Вы — это аргументы, которые ему передаются. Именно так написано в статье, и именно так оно и есть.
2. «/c» — это параметр интерпретатора команд cmd.exe, означающий «выполнить команду, идущую за данным параметром и завершить работу приложения». Почему именно интерпретатор команд? Потому что start — внутренняя команда интерпретатора, а не внешняя утилита в виде исполняемого файла.

Проблема 1. notepad++ невозможно нормально прописать в качестве программы по умолчанию для текстовых файлов и логов:
1) Настройки ассоциаций в параметрах самой программы никакого эффекта не приносят »
Первый вариант, насколько я читал здесь, в новых ОС более не работает.

yurfed
23-06-2017, 05:01
Iska, Без конкретики, но, при запуске, получить хендл окна по заголовку и отдать ему фокус, Не?

Vadikan
23-06-2017, 10:23
2) В списке программ "Приложения по умолчанию - Задать значения по умолчанию по приложению" программы "notepad++" нет и добавить её в этот список невозможно (нет соответствующий кнопок) »
Видимо, портативная. Используйте установщик, и будет вам счастье
https://i.imgur.com/fjcvlyW.png

CyraxZ
23-06-2017, 12:21
1. Приводится приложение «cmd.exe», а то, что указали Вы — это аргументы, которые ему передаются.
Под "Приводится приложение «cmd.exe»" вы и автор статьи имеете ввиду "Пример запуска командной строки "cmd.exe" с передачей фокуса окну cmd.exe" ?

Почему именно интерпретатор команд? Потому что start — внутренняя команда интерпретатора, а не внешняя утилита в виде исполняемого файла.
Т.е. вызывается cmd.exe, который выполняет внутреннюю команду start, которая, в свою очередь, запускает целевое приложение (в качестве примера которого выступает этот же самый cmd.exe) ?
cmd.exe /c start /d "C:\Windows\System32\" cmd.exe
?

CyraxZ
23-06-2017, 12:51
Видимо, портативная. Используйте установщик, и будет вам счастье
Как раз использую установщик. Скачивается отсюда (https://notepad-plus-plus.org/download/v7.4.2.html):
npp.7.4.2.Installer.x64.exe

В начале установки там имеется галка, отвечающая за портативную версию - она снята. После установки имеем:
1) В "Пуск - Недавно установленные программы" отсутствует
2) В "Параметры - Приложения и возможности" в списке установленных приложений присутствует (Notepad++ 64-bit x64 7.4.2)
3) В "Приложения по умолчанию - Задать значения по умолчанию по приложению" в списке программ программы "notepad++" нет

Ещё раз переустановил (удалил и установил). Поведение абсолютно то же самое:
1) при запуске текстового файла из Far Manager, проводника или ярлыком notepad++ нормально запускается
2) при запуске текстового файла через задачу планировщика (в качестве действия указывается путь к текстовому файлу) открывается окно "Каким образом вы хотите открыть этот файл ?" с выделенным пунктом "notepad++"

CyraxZ
23-06-2017, 13:13
Т.е. вызывается cmd.exe, который выполняет внутреннюю команду start, которая, в свою очередь, запускает целевое приложение (в качестве примера которого выступает этот же самый cmd.exe) ?
Код: Выделить весь код
cmd.exe /c start /d "C:\Windows\System32\" cmd.exe
? »
Да, всё так и есть. Следующая команда нормально запускает "notepad++" и передаёт фокус окну редактора.
Правда, моргает окно cmd.exe. Но зато запускаемая программа фокус нормально получает.
cmd.exe /c start "" /d "C:\Program Files\Notepad++\" "notepad++.exe" "F:\...\error.log"

Ещё раз переустановил (удалил и установил). Поведение абсолютно то же самое:
1) при запуске текстового файла из Far Manager, проводника или ярлыком notepad++ нормально запускается
2) при запуске текстового файла через задачу планировщика (в качестве действия указывается путь к текстовому файлу) открывается окно "Каким образом вы хотите открыть этот файл ?" с выделенным пунктом "notepad++"
А если открывать текстовый файл через планировщик, но при этом не непосредственно, а через "cmd.exe start ...", то окно "Каким образом вы хотите открыть этот файл ?" не открывается. notepad++ запускается сразу:
cmd.exe /c start "" /d "F:\..." "error.log"
При запуске через планировщик без "cmd.exe start ..." окно "Каким образом вы хотите открыть этот файл ?" открывается).

Но в конечной команде всё равно оставил явный вызов notepad++.exe на всякий случай. Раз уж он такой капризный...
cmd.exe /c start "" /d "C:\Program Files\Notepad++\" "notepad++.exe" "F:\...\error.log"

Iska
23-06-2017, 14:38
CyraxZ, я не уверен, что:
/d "C:\Program Files\Notepad++\" »
есть правильный подход. Поскольку в этом случае текущим каталогом должен быть каталог не приложения, а каталог редактируемого файла. Проверьте, будет ли работать при:
cmd.exe /c start "" "C:\Program Files\Notepad++\notepad++.exe" "F:\...\error.log"

CyraxZ
23-06-2017, 23:26
Поскольку в этом случае текущим каталогом должен быть каталог не приложения, а каталог редактируемого файла. Проверьте, будет ли работать при:
Код: Выделить весь код
cmd.exe /c start "" "C:\Program Files\Notepad++\notepad++.exe" "F:\...\error.log" »
Так тоже работает. Только в обоих вариантах текущим (по отношению к редактору, а не cmd.exe) является каталог файла.

Iska
24-06-2017, 00:08
Только в обоих вариантах текущим (по отношению к редактору, а не cmd.exe) является каталог файла. »
Да ну. Я, кстати, ошибся — в обоих случаях для Notepad++ текущим каталогом окажется каталог приложения, уж не знаю, с чем это связано, возможно, таково поведение самого приложения Notepad++. А вот для обычного Блокнота — поведение такое, как я и описал выше.




© OSzone.net 2001-2012