|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Янв 1, 2004 16:35:49 Здравствуйте! Все пржде всего с праздником! Желаю всего самого лучшего в наступившем году! У меня небольшой вопрос. Я знаю имя программы (calc.exe, к примеру скажем), но не заголовка окна приложения. При этом я хочу отправить окну (тут субвопрос: какому - главноему или дочернему?) сообщение, например, сделать окно прозрачным или свернуть. Я знаю, что можно это осуществить поиском FindWindow, получить в eax handle при условии,если я знаю заголовок. Вопрос: КАКИМ ОБРАЗОМ МОЖНО ПОЛУЧИТЬ ХАНДЛЕ ОКНА, ЗНАЯ ТОЛЬКО ИМЯ ПРОЦЕССА? Если возможно, приведите, пожалуйста, работающий кусок кода или ссылку. Заранее спасибо! 1990. |
|
|
Дата: Янв 1, 2004 20:29:37 Никак. Т..к нет понятия "главное окно" для процесса. Есть понятие главное окно для группы окон. Дело в том, что ты можешь создать окна в разных потоках, и все они будут не чайлды. Т.е. у процесса тогда будет несколько "главных" окон. Ты можешь сделать EnumWindows и там у каждого окна поспрошать PID процесса. |
|
|
Дата: Янв 1, 2004 21:02:54 rst Спасибо. Пойду по этому пути. А если я буду сам создавать процесс - также нужно будет использовать EnumWindows или может быть возможно сделать как-то окно прозрачным при запуске? |
|
|
Дата: Янв 1, 2004 21:09:09 Зачем? Ты хочешь чтоб окно левого процесса небыло видно при запуске? тогда смотри параметры CreateProcess - там можно это указать. |
|
|
Дата: Янв 1, 2004 22:56:25 rst Нет. Просто есть специфическая задачка, чтобы склеить две программы и запустить из одной другую и сделать запущенное окно прозрачным. А вот как? ;-) (Нужно для Flash). |
|
|
Дата: Янв 1, 2004 23:40:09 1990 Сейчас нет MSDN под рукой. Кажись, оно называлось EnumThreadWindows |
|
|
Дата: Янв 2, 2004 18:16:04 · Поправил: 1990 так и не придумал, как бы это проще сделать. Войны Дзён, предложите что-нибудь простое и доступное ;-) Или совсем радикальное. |
|
|
Дата: Янв 2, 2004 18:56:39 1990 Тебе все равно энумерацию придется делать. Поэтому чтобы сузить круг поиска, используй EnumThreadWindows вместо EnumWindows. И еще главное окно программ обычно(но не всегда) имеет флаг ex-стиля WS_EX_APPWINDOW. |
|
|
Дата: Янв 2, 2004 21:36:29 Toxic Спасибо. Учту. Не разу не пробовал EnumThreadWindows - сейчас займусь. |
|
|
Дата: Янв 2, 2004 21:36:59 А примеров EnumThreadWindows нет случайно? |
|
|
Дата: Янв 2, 2004 21:40:16
Handling Logoff Events
Service applications that interact with the user should be prepared to handle logoff events. When a logoff event occurs, the service application must close all handles to the user's window station and desktop.
This sample demonstrates how the message box in the interaction example code should be dismissed at logoff. The ConsoleCtrlHandler function in this example is a HandlerRoutine that was specified by a call to the SetConsoleCtrlHandler function.
BOOL CALLBACK EnumProc(
HWND hwnd,
LPARAM lParam)
{
// Send a WM_CLOSE to destroy the window, because DestroyWindow
// does not work across threads.
SendMessage(hwnd, WM_CLOSE, 0, 0);
return TRUE;
}
BOOL ConsoleCtrlHandler(
DWORD dwCtrlType)
{
if (dwCtrlType == CTRL_LOGOFF_EVENT && dwGuiThreadId != 0)
{
SetThreadDesktop(GetThreadDesktop(dwGuiThreadId));
EnumThreadWindows(dwGuiThreadId, EnumProc, 0);
}
return FALSE;
}
Кто-нибудь, когда-нибудь будет MSDN читать? Для чего доки пишут? Для того, чтобы их читали! |
|
|
Дата: Янв 2, 2004 21:42:27 1990 Или совсем радикальное Можно захостить флешивый ActiveX у себя. И делать со своим окном всё, что угодно. |
|
|
Дата: Янв 2, 2004 22:25:39 volodya Спасибо. Читал ;) bsl_zcs А это что такое? Расскажи попдробнее пожалуйста. Если оффтопик - дай майл. Или сам напиши: gerg_grown@bk.ru |
|
|
Дата: Янв 3, 2004 14:02:27 1990 Он имеет в виду "пересадку органов" - нужного окна на твое окно. |
|
|
Дата: Янв 4, 2004 00:53:57 · Поправил: bsl_zcs 1990 Плагин, который показывает флеш в internet explorer-е - ActiveX компонент. Его можно использовать самостоятельно. Для этого надо написать ActiveX container и разместить компонент в нём. Писать его на чём-либо низкоуровневом - занятие весьма геморройное и совершенно бессмысленное. Зато можно взять какой-нибудь готовый. Судя по всему, проще всего для этого использовать ATL. Простейший случай вообще не требует знания COM и OLE. Правда, при этом флешка цепляется вместе с браузером, ;) но кого это волнует в наше суровое время. ;) В добавок, до ручек, которыми всем этим можно управлять, ты так тоже не доберёшься. Но тебя, вроде бы, устраивал вообще запущеный отдельно проектор, так что, это, наверное, тоже не проблема. ;) Поищи в MSDN-е AtlAxWin. Вещь забавная. Единственный минус: в старых виндах atl.dll может не быть. С другой стороны, я не думаю, чтобы распространённость atl была ниже, чем у флешивого плагина... ;) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.102 |