Поиск окон
От: Аноним  
Дата: 08.04.05 12:53
Оценка:
Привет всем...
Думаю вопрос достаточно тревиальный, тем не менее иногда вызывает некоторое недоумение...
Итак, проблема в том, что, используя функцию FindWindow, я не получаю нужного мне Handle...
Делаю так:

    if(!IsWindow(m_hWndDest))
    {
        if(m_hProcessDest != NULL) CloseHandle(m_hProcessDest);
        m_hWndDest = ::FindWindow(NULL, szMonitorWndTitle);
        if(m_hWndDest)
        {
            DWORD dwProcessId;
            GetWindowThreadProcessId(m_hWndDest, &dwProcessId);
            m_hProcessDest = OpenProcess(PROCESS_DUP_HANDLE, FALSE, dwProcessId);
        }
        else OutputDebugString("Warning... The Monitor Aplication wasn't loaded...");
    }

Подскажите, в чем проблема ?
Re: Поиск окон
От: King of a Stellar War Украина  
Дата: 08.04.05 13:07
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Привет всем...

А>Думаю вопрос достаточно тревиальный, тем не менее иногда вызывает некоторое недоумение...
А>Итак, проблема в том, что, используя функцию FindWindow, я не получаю нужного мне Handle...
А>Делаю так:

А>
А>    if(!IsWindow(m_hWndDest))
А>    {
А>        if(m_hProcessDest != NULL) CloseHandle(m_hProcessDest);
А>        m_hWndDest = ::FindWindow(NULL, szMonitorWndTitle);
А>        if(m_hWndDest)
А>        {
А>            DWORD dwProcessId;
А>            GetWindowThreadProcessId(m_hWndDest, &dwProcessId);
А>            m_hProcessDest = OpenProcess(PROCESS_DUP_HANDLE, FALSE, dwProcessId);
А>        }
А>        else OutputDebugString("Warning... The Monitor Aplication wasn't loaded...");
А>    }
А>

А>Подскажите, в чем проблема ?


szMonitorWndTitle точно содержит тайтл именно TopLevel окна?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[2]: Поиск окон
От: HaVEn7  
Дата: 08.04.05 13:15
Оценка:
Здравствуйте, King of a Stellar War, Вы писали:

KOA>Здравствуйте, Аноним, Вы писали:


А>>Привет всем...

А>>Думаю вопрос достаточно тревиальный, тем не менее иногда вызывает некоторое недоумение...
А>>Итак, проблема в том, что, используя функцию FindWindow, я не получаю нужного мне Handle...
А>>Делаю так:

А>>
А>>    if(!IsWindow(m_hWndDest))
А>>    {
А>>        if(m_hProcessDest != NULL) CloseHandle(m_hProcessDest);
А>>        m_hWndDest = ::FindWindow(NULL, szMonitorWndTitle);
А>>        if(m_hWndDest)
А>>        {
А>>            DWORD dwProcessId;
А>>            GetWindowThreadProcessId(m_hWndDest, &dwProcessId);
А>>            m_hProcessDest = OpenProcess(PROCESS_DUP_HANDLE, FALSE, dwProcessId);
А>>        }
А>>        else OutputDebugString("Warning... The Monitor Aplication wasn't loaded...");
А>>    }
А>>

А>>Подскажите, в чем проблема ?


KOA>szMonitorWndTitle точно содержит тайтл именно TopLevel окна?


Да, точно... Прошу прощения, я не уточнил, что данный процесс происходит внитри DLL...
"В древности люди учились для того, чтобы совершенствовать себя. Нынче учатся для того, чтобы удивить других." (с) Конфуций
Re[3]: Поиск окон
От: HaVEn7  
Дата: 08.04.05 13:32
Оценка:
Да, и еще одно... DLL эта — ISAPI-фильтр... хотя не думаю, что это принципиально...
Дело в том, что этот код в обычном Windows Application превосходно работает...
Ведь должно и в DLL работать (я так думаю)
"В древности люди учились для того, чтобы совершенствовать себя. Нынче учатся для того, чтобы удивить других." (с) Конфуций
Re[4]: Поиск окон
От: Danchik Украина  
Дата: 08.04.05 13:55
Оценка:
Здравствуйте, HaVEn7, Вы писали:

HVE>Да, и еще одно... DLL эта — ISAPI-фильтр... хотя не думаю, что это принципиально...

HVE>Дело в том, что этот код в обычном Windows Application превосходно работает...
HVE>Ведь должно и в DLL работать (я так думаю)

Ну ты и уточняеш
Ты забываеш одну махонькую штучку ISAPI-фильтр запускается если я не ошибаюсь под сервайсом. Так вот у сервайса совсем другой Desktop (если имеется конешно). А FindFindow ищет окно только в текущем Desktope.
Рыть дальше тебе
Re[5]: Поиск окон
От: HaVEn7  
Дата: 08.04.05 14:04
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Здравствуйте, HaVEn7, Вы писали:


HVE>>Да, и еще одно... DLL эта — ISAPI-фильтр... хотя не думаю, что это принципиально...

HVE>>Дело в том, что этот код в обычном Windows Application превосходно работает...
HVE>>Ведь должно и в DLL работать (я так думаю)

D>Ну ты и уточняеш

D>Ты забываеш одну махонькую штучку ISAPI-фильтр запускается если я не ошибаюсь под сервайсом. Так вот у сервайса совсем другой Desktop (если имеется конешно). А FindFindow ищет окно только в текущем Desktope.
D>Рыть дальше тебе

Спасибо... Честно говоря, такого я не знал...
"В древности люди учились для того, чтобы совершенствовать себя. Нынче учатся для того, чтобы удивить других." (с) Конфуций
Re[6]: Поиск окон
От: Danchik Украина  
Дата: 08.04.05 14:10
Оценка:
Здравствуйте, HaVEn7, Вы писали:

HVE>Здравствуйте, Danchik, Вы писали:


D>>Здравствуйте, HaVEn7, Вы писали:


HVE>>>Да, и еще одно... DLL эта — ISAPI-фильтр... хотя не думаю, что это принципиально...

HVE>>>Дело в том, что этот код в обычном Windows Application превосходно работает...
HVE>>>Ведь должно и в DLL работать (я так думаю)

D>>Ну ты и уточняеш

D>>Ты забываеш одну махонькую штучку ISAPI-фильтр запускается если я не ошибаюсь под сервайсом. Так вот у сервайса совсем другой Desktop (если имеется конешно). А FindFindow ищет окно только в текущем Desktope.
D>>Рыть дальше тебе

HVE>Спасибо... Честно говоря, такого я не знал...

Все мы учимся

Смотри MSDN: Window Stations and Desktops

Тебе нужно дойти до SetThreadDesktop где параметром будет нужный дектоп.
У меня просто нету времени, разберешся код запостать !

Удачи !
Re[5]: Поиск окон
От: Vadim B  
Дата: 08.04.05 20:52
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Ты забываеш одну махонькую штучку ISAPI-фильтр запускается если я не ошибаюсь под сервайсом.


Офф-топик: а "сервайс" — это по-каковски?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.