1

Тема: VBS определить нажатую кнопку в окне

Доброго времени суток.

Помогите решить следующую задачу.

Мой скрипт в процессе выполнения запускает исполняемый файл от имени другой учётной записи в результате чего появляется стандартное окно Windows, предлагающее ввести альтернативные логин/пароль. Мне необходимо удостовериться, что в этом окне не была нажата кнопка отмена, либо, если она всё-таки была нажата, то скрипт должен завершиться. Каким образом можно определить какую из кнопок нажал пользователь в shellьном окне?

2

Re: VBS определить нажатую кнопку в окне

в результате чего появляется стандартное окно Windows,

Приведите Ваш код.

3

Re: VBS определить нажатую кнопку в окне

Elusive87 пишет:

...
запускает исполняемый файл от имени другой учётной записи в результате чего появляется стандартное окно Windows, предлагающее ввести альтернативные логин/пароль. Мне необходимо удостовериться, что в этом окне не была нажата кнопка отмена, либо, если она всё-таки была нажата, то скрипт должен завершиться
...

Я правильно понимаю, что :
1) на момент ввода регистрационных данных исполняемый файл по сути еще не стартовал?
2) пользователь может отказаться вводить регистрацию и, тот исполняемый файл запустится от пользовательской у/з, а Вам надо обязательно это недопустить?
3) скрипт каким-то образом взаимодействует с запускаемым приложением или ожидает завершения его выполнения чтобы чем-то там воспользоваться, например, неким результатом, без которого дальнейшая работа бессмыслена?


ps. если знаете - как "выглядит" процесс запускаемого приложения, то можете через WMI-запрос получить данные процесса и узнать его имя владельца.

WBR. Roman

4

Re: VBS определить нажатую кнопку в окне

Вот пример кода:

With CreateObject("Shell.Application")
    .ShellExecute "cmd", "/c ping mail.ru", "", "runas", 1
End With

В данном примере я запускаю экземпляр командного шела и передаю ему параметр - исполнять пинговку узла mail.ru, причём, я хочу чтобы он запустился от имени другой учётной записи, поэтому я передаю методу ShellExecute параметр "runas". На ХР это приведёт к тому, что появится окно где предлагается выбрать другую локлаьную учётку и ввести пароль, на 7 - предлагается запустить от имени Админа.

Вот эти окна - и есть суть моего вопроса. Меня интересует возможность отследить когда пользователь нажмёт в таком окне "Нет", ведь тогда скрипту продолжать работу нет смысла.

1) на момент ввода регистрационных данных исполняемый файл по сути еще не стартовал?

Верно, его запустит ОСь, если польозватель введёт корректные учётные данные.

2) пользователь может отказаться вводить регистрацию и, тот исполняемый файл запустится от пользовательской у/з, а Вам надо обязательно это недопустить?

Смысл процедуры, которую я задумал - дать возможность запутисть процессы (в которых может возникнуть необходимость) от имени учётки с админ. правами в случае, если приложение будет запущено под ограниченной учётной записью. Смысла запускать исполняемые файлы под ограниченной учёткой нет.

3) скрипт каким-то образом взаимодействует с запускаемым приложением или ожидает завершения его выполнения чтобы чем-то там воспользоваться, например, неким результатом, без которого дальнейшая работа бессмыслена?

Да, скрипт должен будет ждать пока процесс, для которого вводились учётные данные, завершится. Но это не имеет отношения к моему вопросу.

5

Re: VBS определить нажатую кнопку в окне

Предлагаю - скриптом перед стартом этого runas-пинга создать асинхронный обработчик "ожидающий" на машине события создания процессов с именем cmd.exe (поищите в коллекции примеры, лично мне такое делать не приходилось, но по-моему обсуждалось, и не раз). В обработчике контролируйте командные строки появляющихся процессов, чтобы достоверно отсеять свой cmd.exe от возможных других. 

Когда "дождетесь" появления именно своего процесса, проконтролируйте его создателя: если хозяин процесса не отличается от имени текущего (для скрипта) пользователя, значит регистрацию другой у/з не выполняли - можете процесс пинга убить и завершить работу скрипта.

WBR. Roman

6

Re: VBS определить нажатую кнопку в окне

Я думал над таким вариантом, но он мне не подходит.

Если пользователь нажмёт кнопку "Отмена", то cmd не запустится и мы будем вечно ожидать появления процесса.

7

Re: VBS определить нажатую кнопку в окне

Возможно такой вариант подойдёт ? На XP проверить нет возможности.

Post's attachments

runas.vbs 1.66 kb, 10 downloads since 2013-03-14 

You don't have the permssions to download the attachments of this post.
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !