![]() |
Модераторы: ginnie, korob2001 |
![]() ![]() ![]() |
|
burakov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
Добрый день.
Помогите пожалуйста "убить окно" от explorer.exe Внизу код. В нем я пытался консоль (cmd.exe) убить при помощи DestroyWindow (Win32::API) (выбрал консоль для примера, потому как это окно самого верхнего уровня, к тому же у меня получилось его убить при помощи SendMessage). Но окно IE это ж куча окошек, классов. Прочитал, что DestroyWindow все убьет сама ![]() Хочу при помощи DestroyWindow разобраться с IE, но эта DestroyWindow даже консоль мою отказывается убивать.
чего не так делаю? Спасибо. |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 5 Всего: 27 |
Посылай окну WM_CLOSE
-------------------- Died at Life.pl line 21 |
|||
|
||||
burakov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
в случае с если с помощью SendMessage закрывать консоль (которую я нахожу c помощью FindWindow в примере), то
все работает, но я хочу закрыть окно IE. FindWindow мне мой IE (интернет эскплоер) находит нормально, дескриптор правильный отдает. а вот закрывать не хочет. подозреваю, что не закрывает из за того, что IE состоит из нескольких окошек (я ищу самое вернее класса CabinetWClass), причем если к найденному $result_FindWindow применить функцию SwitchToThisWindow (user32.dll), то окно успешно активизируется и выводится на передний план, но как его закрыть... может нужно послать WM_CLOSE Всем child окнам IE? НО FindWIndow дочерние окна не ищет... тогда как узнать их хендлы? Может кто уже убивал IE при помощи Win32::API... Подскажите... Спасибо. |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 5 Всего: 27 |
Не-не, посылать надо родителю всех окон IE. Возможно ты по ошибке определил одно из дочерних его окон, а не родительское. Сверь класс родительского окна с его заголовком. -------------------- Died at Life.pl line 21 |
|||
|
||||
burakov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
не знаю я как опознать родителя.
Интуитивно нахожу идентификатор (дескриптор, хендлер) самого верхнего окна IE. класс его определяю при помощи WindowSpy (здесь же на форуме кто то мне ее посоветовал), там же отражается и дескриптор окна (это для проверки моего $result_FindWindow). Т.е. навожу мышкой на самую верхнюю часть IE (синяя полоска) и оттуда списываю класс искомого окна. проверяю все на SwitchToThisWindow или $BringWindowToTop на найденном дескрипторе эти функции отрабатывают великолепно (т.е. перемещают найденное окно IE на передний план). но SendMessage окно убивать отказывается (при этом если попытаться убить при помощи SendMessage консоль, как в приведенном примере, то все срабатывает отлично). :( |
|||
|
||||
burakov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
еще вопросик
по SendMessage - не могу разобраться, почему WM_CLOSE = 0x0010 (выдернул из форума). Вот так (с цифрами) все работает $SendMessage = Win32::API -> new ('user32', 'SendMessage', 'INPL', 'N'); $result_SendMessage = $SendMessage -> Call ($result_FindWindow, 0x0010, 0, 0); а если писать вот так (вместо цифр - WM_CLOSE то не работает). $SendMessage = Win32::API -> new ('user32', 'SendMessage', 'INPL', 'N'); $result_SendMessage = $SendMessage -> Call ($result_FindWindow, WM_CLOSE, 0, 0); а мне вот нужно окну winamp послать WM_User, тогда какие цифры вместо Слова "WM_User" писать? Спасибо... |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 5 Всего: 27 |
Про 0x0010 это я писал) Точно ответить не могу честно говоря, т.к. не разбирался, но есть подозрение, что при вызове API функции Perl передаст WM_CLOSE как строку (указатель на строку, если быть точным), а не как предопределенную именованную константу. Значение нужной константы ищи в Си-шном заголовке windows.h или в заголовках, которые в него инклудятся. Точно уже не помню. -------------------- Died at Life.pl line 21 |
|||
|
||||
shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 1 Всего: 18 |
|
|||
|
||||
burakov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
Большое спасибо за ответы
вот какую страничку я нашел http://gupta.narod.ru/WindowsSDKConstants.html там и WM_USER и WM_COMMAND... хотя таки убить окно Explorer не смог. Ну да ладно пока воспользуюсь wordpad.exe (он убивается на раз). |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl: Системное программирование" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |