MessageBox на внепроцессном COM-сервере

Когда у вас есть консольный клиент и COM-сервер, можете ли вы вызвать ::MessageBox(...) с COM-сервера и ожидать, что он сработает?


person Tony The Lion    schedule 28.06.2010    source источник


Ответы (2)


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

person sharptooth    schedule 28.06.2010
comment
Вы можете убедиться, что право собственности на окно сообщений указано правильно, установив родительский параметр на HWND консоли вместо NULL (HWND рабочего стола). См. http://support.microsoft.com/kb/124103 - person Ryan Ginstrom; 28.06.2010

Вы можете использовать функцию WTSSendMessage (см. http://msdn.microsoft.com/en-us/library/aa383842.aspx и http://msdn.microsoft.com/en-us/library/ms683502.aspx) вместо MessageBox.

Чтобы получить идентификатор сеанса SessionId, вы можете использовать WTS_CURRENT_SESSION или WTSEnumerateSessions или WTSGetActiveConsoleSessionId или GetTokenInformation с TokenSessionId и токеном клиента, полученным во время олицетворения клиента. Все зависит от сценариев, которые у вас есть.

person Oleg    schedule 28.06.2010