![]() |
(vbs) WScript.Shell.Terminate() => 80070578 "Недопустимый дескриптор окна"
Задача: запустить и закрыть окно Lingvo x6
Код:
Set WshShell = CreateObject("WScript.Shell") 80070578 "Недопустимый дескриптор окна". P.S. Для чего это нужно. В настройках Lingvo x6 (последняя версия) отсутствует опция "Запускать при загрузке ОС" (в прошлой версии, помню, такая опция была). Так вот, для того, чтобы при запуске Windows 10 Lingvo x6 запускался автоматически, но без открытия окна (только в трее), необходимо открыть и закрыть Lingvo x6. При закрытии окна Lingvo из памяти не выгружается (остаётся значок в трее), т.к. в опциях установлена галка "Не выгружать при закрытии окна". |
CyraxZ, Вы путаете две вещи — нажатие на кнопку закрытия окна, которая может быть отработана в приложении, и принудительное снятие процесса извне.
Рекомендую использовать AutoIt или PowerShell и посылать окну сообщение о закрытии, а не снятие процесса. |
Цитата:
"процессу будет послана команда WM_CLOSE, если это не сработает, то процесс будет завершен принудительно" Временная заплатка для Lingvo (подавляем сообщение об ошибке): Код:
Set WshShell = CreateObject("WScript.Shell") |
CyraxZ, приношу Вам свои извинения, попутал с методом .Terminate() класса Win32_Process Wbem.
Я не отслеживал оконные сообщения, но, похоже, что всё происходит именно так (или почти так), как Вы указали. Цитата:
|
Цитата:
|
iglezz, спасибо. Надо теперь запомнить, что кроме MSDN и TechNet надо будет искать и по Docs.
|
Цитата:
Terminate Method (WshScriptExec) The Terminate method does not return a value. Use the Terminate method only as a last resort since some applications do not clean up properly. As a general rule, let the process run its course and end on its own. The Terminate method attempts to end a process using the WM_CLOSE message. If that does not work, it kills the process immediately without going through the normal shutdown procedure. Только вышеприведённый код (Terminate + подавление ошибки) на самом деле нерабочий. Да, окно Lingvo закрывается. Да, ошибка не выскакивает. Да, значок Lingvo появляется в трее. Но при этом сам Lingvo при выполнении Terminate выгружается из памяти, не смотря на снятую галку "Выгружать ABBY Lingvo из памяти при закрытии главного окна" в настройках Lingvo. Судя по наличию ошибки (которую в этом коде мы подавляем), WM_CLOSE по тем или иным причинам не срабатывает (генерируется ошибка 80070578 "Недопустимый дескриптор окна") и выполняется принудительная выгрузка процесса из памяти. Т.е. от варианта с Terminate отказываемся и делаем по-другому. Вот рабочий вариант скрипта: Код:
Set WshShell = CreateObject("WScript.Shell") Последовательность действий для автозагрузки Lingvo x6 при старте Windows: 1) В настройках Lingvo x6 cнять галку "Общие" - "Выгружать ABBY Lingvo из памяти при закрытии главного окна" 2) Скопировать вышеприведённый скрипт "Lingvo x6 autorun.vbs" в автозагрузку ("C:\Users\ПОЛЬЗОВАТЕЛЬ\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup") После этого при запуске OC Windows Lingvo x6 будет автоматически запускаться на уровня трея (не придётся вручную закрывать его окно). |
CyraxZ, .AppActivate() в связке с .SendKeys() такое себе… Я бы уж лучше пользовал AutoIt — там это делается надёжнее.
|
Время: 21:07. |
Время: 21:07.
© OSzone.net 2001-