Как закрыть окно чужого процесса?
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Как закрыть окно чужого процесса? Expand / Collapse
Автор
Сообщение
05.06.2007 15:56
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 06.07.2008 10:37
Сообщ.: 236, Visits: 1 734
Добрый день.
Объясните пожалуйста, почему по 
     OutWnd->PostMessage( WM_CLOSE, 0, 0 );
не хочет закрываться окно?
Ситуация следующая:
1) В Spy++ у двух окон один и тот - же PROCESS ID, один и тот же THREAD ID.
2) Хэндл нужного окна известен, найден через FindWindow()
Проблема в том, что оно ни каким способом не хочет закрываться.

В чем может быть причина?
Спасибо.

Сообщ. #913832
06.06.2007 10:04
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Попробуй через функцию WinAPI это сделать: SendMessage(hwnd, WM_CLOSE, 0, 0);
Сообщ. #913840
06.06.2007 14:51
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 06.07.2008 10:37
Сообщ.: 236, Visits: 1 734
Пробовал, но дело вот в чем: (Забыл написать, проект MFC, VS 2005.)
У меня функция, закрывающая окно описана в классе главного окна.
Поэтому если вызвать SendMessage в контексте этой функции, то SendMessage не имеет одного первого параметра - hWnd.
( Видимо предпологая, что она вызывается для объекта текущего класса. )
И поэтому я делаю следующим образом:

CWnd *MyWnd;
MyWnd = FindWindow(...);
MyWnd->PostMessage(...); ( или  MyWnd->SendMessage(...); )

И это не срабатывает.
Не могу понять почему, т.к. другие окна закрываются.


 

Сообщ. #913855
06.06.2007 15:29
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Чтобы вызвать API функцию добавь перед ее именем двойное двоеточие, чтобы указать что эта функция из глобальной области видимости.

::SendMessage(hwnd, .... );

Сообщ. #913858
06.06.2007 16:32
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 06.07.2008 10:37
Сообщ.: 236, Visits: 1 734
Спасибо, уже кое что.
Только теперь закрывается не только нужное окошко другого приложения, но и и само приложение.
Уф, а если сделать сообщение именно этому окну Alt+F4, может так сработает?
Спасибо еще раз, буду ковырять дальше.
Сообщ. #913861
08.06.2007 12:12


Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 30.06.2007 8:03
Сообщ.: 28, Visits: 42
ну так если это окошко - главное окно приложения, то оно (приложение) и должно завершиться по его закрытию. попробуй скрывать его, тогда и на экране его не будет и приложение не завершится
Сообщ. #913918
28.06.2007 14:19
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 06.07.2008 10:37
Сообщ.: 236, Visits: 1 734
По идее оно не является главным окном приложения.
Как я уже писал главное окно приложения и окно которое нужно закрыть имеют разные hWnd, но одинаковый processID судя по Spy++.

Так что пока решение не нашлось.

Сообщ. #914418
30.06.2007 8:04


Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 30.06.2007 8:03
Сообщ.: 28, Visits: 42
еще раз... скрывать не получается? в чем проблема скрыть нужное окно?
Сообщ. #914447
11.07.2007 12:15
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 06.07.2008 10:37
Сообщ.: 236, Visits: 1 734
Скрыть то его без проблем, только нужно именно закрыть.
Т.к. суть приложения - мониторить эти окошки, соответственно они будут появляться снова и копить их не приемлемо.
Сообщ. #914648
« пред. тема |