Заблокировать дочернее окно процессов? - PullRequest
2 голосов
/ 22 мая 2011

Я запускаю процесс в C # .NET, который по какой-то причине открывает окно сообщения при его первоначальном запуске.Что мне нужно сделать из моего приложения, так это найти способ предотвратить открытие этого окна сообщений или просто "нажать" кнопку OK на окне сообщений из моего кода.

Окно сообщения вызываетпроцесс зависает, когда мы запускаем его как службу, поэтому теперь мне нужно найти какой-нибудь способ либо запретить открытие этого окна, либо просто закрыть его (выбрать ОК) из моего кода.

Я искална некоторых примерах Win32 API, но мне никогда не приходилось использовать его раньше, и это выглядит немного странно.Любые предложения были бы хорошими!

Редактировать

Вот пакетный файл, который был предоставлен в качестве решения этой проблемы.Однако я бы предпочел иметь исполняемый файл, если это возможно.Объяснение было в том, что использование параметра -supw (для установки пароля на сервере) вызывает появление этого окна сообщения.Этот пакетный файл протестирован и работает, но требует наличия дублированного исполняемого файла (murmur2.exe), который называется гетто.

set /p VAR= < superadmin.txt
start murmur2.exe -supw %var%
ping 0.0.0.0 -n 3 > NUL
tskill murmur2
murmur.exe

1 Ответ

2 голосов
/ 22 мая 2011

PostMessage(FindWindow("#32770",*Title of the message box*),WM_CLOSE,NULL,NULL);

Поскольку может (с очень малой вероятностью) быть тем же самым окном, открытым с тем же именем класса с тем же названием в то же время, это неотказоустойчивый способ.Однако альтернативы - это просто излишество.Если вы действительно хотите сделать его защищенным от сбоев, вам нужно будет вызвать EnumWindows, чтобы перечислить все окна верхнего уровня, затем для каждого окна вызвать GetWindowThreadProcessId и сравнить идентификатор процесса окна с идентификатором запущенного процесса.Если они равны, вы можете затем вызвать GetClassName и GetWindowText, чтобы сравнить имена классов (всегда «# 32770» для общих диалогов) и заголовок окна сообщения, чтобы убедиться, что вы пытаетесь закрыть правое окно.,Как только это будет сделано, вы можете вызвать PostMessage с WM_CLOSE, используя найденный вами hWnd.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...