![]() |
Как убить внешний процесс из Excell? Ппожалуйста подскажите, очень нужно убить внешний процесс минуя реестр (остановить лекгую програмку) из Excell при нулевом значении ячейки. В VBA - я не особо, заранее спасибо (контакт [email]asda23@mail.ru[/email]). |
77 - Excel не имеет работать с процессами сам. Лучший инструмент для "прибития" процессов - это скрипт VBS, Shell или Python, который можно вызвать из Excel по событию, отслеживаемому по VBA: [code] Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("СТОПЭ!!").Address Then Set WshShell = WScript.CreateObject("WScript.Shell") CheckRun = "Запускаемая программа" Set WshExec = WshShell.Exec(CheckRun) WScript.Sleep 5000 WshExec.Terminate Set WshShell = Nothing Set WshExec = Nothing End If End sub [/code] |
Для отслеживания 0 изложить так 2-ю строку: If Target.Address = Range("СТОПЭ!!").Address And Target.Value = 0 Then |
За это кстати теоретикам Офиса нужно руки оторвать. |
[quote=economist;38382761]Excel не имеет работать с процессами сам[/quote] Его можно научить это делать. В Эксель через Declare Function легко подключать внешние dll, в том числе api windows, и с их помощью делать почти все, в том числе убивать внешние процессы. |
Немного реабилитирую VBA: если процесс ЗАПУСКАТЬ самим VBA - то и "прибить" его изнутри (силами VBA) почти всегда можно, путем закрытия объекта. Офис с VBA итак сильно опасный в плане вандализма, макросы исполняются с повышенными привилегиями, файлы удалятся не в корзину, и если еще разрешить ему убивать процессы - то получится идеальная среда для написания вирусни... |
все получилось с подключением библиотек dll для эксперимента в XP/32 и XP/64, на Win8/64 - не работает. |
6-77 > Ну дык, сообразили наконец чуваки, что тут что-то не так. :) |
Интересно |
Текущее время: 13:51. Часовой пояс GMT +3. |