Как закрыть приложение через vbs
since80 » 16.05.2008 (Пт) 0:28
Всем привет! Вот незадача - в win нет сочетания клавиш, чтобы одним нажатием закрыть все окна, а мне эта функция в данный момент оч. нужна.Немного поразмыслив, решил что это можно реализовать на VBScript, но пока я в этом ни бум-бум . Прошу помочь.
Так примерно это представляю: запускаем файл, он начинает закрывать все окна (т.е. завершает работу программ); работает по порядку, чтобы не подвесить комп - закрыл одно окно (причем закрывает все - и свернутые и развернутые), переходит к следующему, так до тех пор пока на панели задач не будет ни одного окна.
Планирую поместить ярлык в быстрый запуск, чтобы закрывать по одному клику.
Денис » 16.05.2008 (Пт) 7:29
[X] Сделай ярлык для команды "Свернуть все окна" и повесь на него сочетание крлавиш. VBS - не нужен. Ку! Последний раз редактировалось Денис 16.05.2008 (Пт) 9:40, всего редактировалось 1 раз. Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.since80 » 16.05.2008 (Пт) 8:53
Денис » 16.05.2008 (Пт) 9:36
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.Antonariy » 16.05.2008 (Пт) 9:50
since80
Тебе нужно станное. Окно<>приложение. Допустим имеются ввиду окна верхнего уровня. А у меня вот висит драйвер клавиатуры, который работает через видимое окно с отрицательными координатами. При таком подходе оно тоже будет закрыто и доп. кнопки на клаве умрут.
По-хорошему нужно составить список процессов, характерный для состояния "нет запущенных программ" как ты его понимаешь, и прибивать именно процессы, а не окна. Или окна, но проверяя, какому процессу они пренадлежат. Однако на vbs этого не сделаешь.
Лучший способ понять что-то самому — объяснить это другому.since80 » 16.05.2008 (Пт) 11:01
и прибивать именно процессы, а не окна. Или окна, но проверяя, какому процессу они пренадлежат. Однако на vbs этого не сделаешьМне надо, чтобы после выполнения скрипта завершились все программы, которые отображаются на панели задач, те же программы которые работают фоново (т.е. допустим их значки находятся в System tray - файлволл, антивир и т.д.) завершать не надо. Если это не сделать на VBScript, тогда на чем можно сделать такую функцию? Просто пока в программинге я нуб.
Всем привет!
Хочу дописать скрит vbs - котрый будет выполнять следующие действия:
По ходу просмотра будет вопрос:
2 Ответ от Rom5 2013-01-22 19:31:04 (изменено: Rom5, 2013-01-22 19:35:12)
Там есть пример запуска (например, Вашего батника) с ожиданием завершения работы и выводом возвращаемого кода.
Устанавливать на выходе из скрипта свой код возврата - Объект WScript - 3.2. Quit
3 Ответ от Dr.Hofmann 2013-01-23 10:03:16
Выполняется но ничего не делает, вопрос к знатокам где ошибка?
4 Ответ от Rom5 2013-01-23 11:00:02
FSO-методы .Copy и .Move по моему не поддерживают символы подстановки (*, ?), т.е. это только для явно указанного файла.
Для работы с маской можете вызывать внешний cmd.exe с командой копирования (или вызов батник, принимающий параметры - что и куда копировать):
5 Ответ от Dr.Hofmann 2013-01-23 15:21:57 (изменено: Dr.Hofmann, 2013-01-23 15:22:55)
Объект WshShell - Метод 3.4. Run
Там есть пример запуска (например, Вашего батника) с ожиданием завершения работы и выводом возвращаемого кода.
а также - 4.2.1. ExitCode
Устанавливать на выходе из скрипта свой код возврата - Объект WScript - 3.2. Quit
Возникает вопрос а зачем его запускать если в каталоге нет файлов?
С помощъю чего можно реализовать проверку наличия каких либо файлов в каталоге? - на первом этапе а потом уже производить копирование или перемещение.
6 Ответ от alexii 2013-01-23 16:51:21
FSO-методы .Copy и .Move по моему не поддерживают символы подстановки (*, ?), т.е. это только для явно указанного файла.
В отличие от «.FileExists()». Посему здесь:
С помощъю чего можно реализовать проверку наличия каких либо файлов в каталоге?
7 Ответ от Rom5 2013-01-23 16:56:33 (изменено: Rom5, 2013-01-23 17:00:03)
Возникает вопрос а зачем его запускать если в каталоге нет файлов?
С помощъю чего можно реализовать проверку наличия каких либо файлов в каталоге? - на первом этапе а потом уже производить копирование или перемещение.
Если известно имя конкретного файла, то там же на "Главной", где про объекты WScript, есть и про объект "FileSystemObject" и там есть про метод "FileExists".
8 Ответ от Dr.Hofmann 2013-01-23 19:15:27
Если известно имя конкретного файла, то там же на "Главной", где про объекты WScript, есть и про объект "FileSystemObject" и там есть про метод "FileExists".
Я же написал каких-либо файлов - имя его неизвестно.
VBS проверка существования файла по маске
полезными оказались две строчки
9 Ответ от alexii 2013-01-23 20:20:11
Dr.Hofmann, для проверки наличия файлов достаточно Folder.Files.Count > 0 безо всяких подписок.
10 Ответ от Dr.Hofmann 2013-01-24 13:46:02
Dr.Hofmann, для проверки наличия файлов достаточно Folder.Files.Count > 0 безо всяких подписок.
run_copy.vbs
copy_move.vbs
netsend.bat
11 Ответ от alexii 2013-01-24 16:29:13
Всё можно объединить в один скрипт.
12 Ответ от Dr.Hofmann 2013-01-24 16:51:35
Всё можно объединить в один скрипт.
Комрад, напиши название метода раз сказал))
13 Ответ от Rom5 2013-01-24 17:18:58
Если не планируется еще из другого скрипта вызывать "copy_move.vbs", то просто включите его текст (кроме дублирующегося объявления "Set objFSO") в "стартовый" скрипт вместо вызова
14 Ответ от Rom5 2013-01-24 17:37:04
Запуск "net send" тоже можете попробовать оформить вызовом в строке с cmd.exe ("%comspec%) вместо вызова своего батника. Вот для примера строки запуска команды с паузой:
15 Ответ от Rom5 2013-01-24 17:38:48 (изменено: Rom5, 2013-01-24 19:21:29)
16 Ответ от Dr.Hofmann 2013-01-25 09:25:06
Непонятно <WaitOnReturn> - True / vbTrue метода Run вы убрали его для тех строк которые принадлежат copy_move.vbs - Нужно же понимать что произойдет если по какой либо причине эти строки кода не отработают.
17 Ответ от Rom5 2013-01-25 12:23:20
Непонятно <WaitOnReturn> - True / vbTrue метода Run вы убрали его для тех строк которые принадлежат copy_move.vbs - Нужно же понимать что произойдет если по какой либо причине эти строки кода не отработают.
Операции копирования запускаются уже не отдельным вызовом внешнего скрипта, а внутри основного, т.е. пока они не отработают - далее скрипт не продолжится.
Если не отработают операции копирования из-за ошибок - то получите ошибку и скрипт прервется.
Каким образом можно закрыть /закрыть программы из командной строки, аналогично нажатию кнопки закрытия «X» в углу окна?
Im пытается закрыть хром под 3 различными версиями окон: win7 ultimate, win7 home, winXP
В Ultimate и XP: TSKILL chrome
В разделе Home: TASKKILL /IM chrome.exe
(Он закрывает хром, нет ошибок cmd,
но chrome error восстановить при повторном запуске)
TASKKILL /IM chrome.exe :
(Он закрывает хром, нет ошибок хрома при его перезагрузке,
но ошибки в cmd: «невозможно завершить дочерние процессы (около 4-5), только силой с помощью /F ")
Должен ли я игнорировать дочерние ошибки cmd, если на перезапуске хром показать мне ошибки?
Используйте параметр /F , если вы хотите принудительно завершить процесс.
Другие варианты включают отправку ключей Alt + F4 с использованием PowerShell или сторонних приложений.
Обновить обновленный вопрос
Чтобы скрыть ошибки, запишите вывод
Резюме: TASKKILL - это правильный путь через командную строку для закрытия приложений в своей реализации WM_CLOSE и Microsoft KB, с которым я связан .
Он имеет команду «closeprocess», которая предназначена для изящного закрытия процессов. В соответствии с его документом он не завершает приложения, а отправляет WM_CLOSE во все окна верхнего уровня целевого процесса.
Если это не работает, я уверен, ваше приложение имеет необычную процедуру очистки. Я хотел бы видеть, что происходит внутри, поэтому, пожалуйста, дайте мне знать, каково ваше целевое приложение.
Ответ на этот вопрос можно найти here ( Ссылка Microsoft ).
Инструмент, который делает это правильно, @Kill . Посмотрите также SendMsg .
Я не знаю, как это сделать в пакетном режиме, но вы можете использовать vbscript для этого. Имитация клавиш Alt + F4 (приравнивается к сигналу WM_CLOSE ).
Запустите и посмотрите на поведение этого скрипта ниже.
Here - это имена ключей списка для SendKeys.
Когда вы запускаете сценарий, открыт блокнот , некоторые слова записываются, а затем передается сигнал для закрытия программы, см. рисунок ниже.
Дополнительные вопросы
Могу ли я запустить программу с минимальными значениями или фон с помощью vbscript?
Да. Используйте следующий код:
Для получения дополнительной информации проверьте Run Method
Может ли хром перейти к некоторому URL-адресу в vbscript?
Если хром по умолчанию, используйте:
Есть ли способ привлечь внимание к конкретному приложению ( chrome.exe )?
Следующий код работает на Windows 8 .
Утилита командной строки, которая поставляется в виде встроенной команды в TCC программного обеспечения JP , командный интерпретатор и командный скриптовый процессор для Windows, называется TASKEND
Хорошо, Не собираюсь лгать. Я видел это в stackoverflow и думал, что это сложный вопрос. Soooo Я просто провел последние 2 часа, написав код. И вот оно .
После выполнения следующих шагов вы можете ввести «TaskClose notepad.exe» после нажатия «Пуск» и автоматически сохранить все недокументированные файлы блокнота на рабочий стол. Он автоматически закроет chrome.exe и сохранит настройки восстановления.
Вы можете добавлять и удалять дополнительные настройки для других приложений в условиях if. Например:
Файлы vbs и пакетных файлов выполняют следующие процедуры:
- Собирает исполняемый файл.
- Запрашивает имена исполняемых приложений списка задач.
- Выполняет процедуру «Alt + TAB (x)» до тех пор, пока подтверждено, что окно открыто.
- Затем выполняет команды качения, будь то «Alt + F4» или даже в крайних случаях
- Alt + F4
- Активировать сохранение
- Имя файла автоинкремента
- Выход из приложения.
ReturnAppList.bat: установите в "C: \ windows \ system32 \"
TaskClose.bat: установить в "C: \ windows \ system32 \" и "C: \ Users \ YourUserName \"
TaskClose.vbs: установите в "C: \ windows \ system32 \"
Это было очень забавно писать, и я больше рад завершить его, чем фактически показать ответ. Проведите отличную неделю!
Imports System
Imports System.Diagnostics
Imports System.Threading
Это нужно просто для удобства использования компонентов, относящихся к данным пространствам имен.
Получите данные процесса, который необходимо закрыть. Используйте объект класса System.Diagnostics.Process. Объявите переменную данного класса:
Dim oProc As Process
Затем используйте какой-либо метод для нахождения необходимого процесса.
Если программа, которую в дальнейшем необходимо будет закрывать, запускается разрабатываемым приложением, то просто сохраните объект, возвращаемый методом Start при запуске:
Если необходимо закрыть процесс с известным идентификатором, используйте статический метод GetProcessById класса Process для получения соответствующего объекта:
Здесь nID – числовой идентификатор процесса.
Если известны только некоторые характеристики целевого процесса, произведите его поиск. Получите список процессов, запущенных на локальной машине, в виде массива объектов класса Process. Используйте методы GetProcesses (возвращает все процессы) или GetProcessesByName (только процессы с заданным именем):
Dim aoAllProcesses As Process() = Process.GetProcesses()
Dim aoProcsByName As Process() = Process.GetProcessesByName("app.exe")
Перечислите объекты массива при помощи цикла:
Dim oProc As Process
For Each oProc In aoAllProcesses
' действия над oProc
Next
В цикле анализируйте свойства MainModule, MainWindowTitle, ProcessName, и т.д. для нахождения нужного объекта.
При необходимости гарантированного завершения программы после вызова CloseMainWindow осуществите ожидание в течение небольшого промежутка времени. Используйте метод Sleep класса Thread. Затем проверьте состояние процесса, проанализировав свойство HasExited и, если он не завершен, вызовите метод Kill:
Thread.Sleep(6000)
oProc.Refresh()
If not oProc.HasExited Then
oProc.Kill()
End If
При желании можно осуществлять опрос состояния процесса в цикле, выдавая периодические запросы пользователю о необходимости завершения приложения без сохранения данных. И только в случае согласия вызвать Kill.
Освободите системные ресурсы после завершения программы при помощи метода Close:
Читайте также: