как закрыть Internet Exporer

Тема в разделе "WASM.WIN32", создана пользователем xlinuks, 26 май 2006.

Статус темы:
Закрыта.
  1. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181
    Привет, у меня такая проблема, написал Java апплет, после чего юзер качает последнюю версию с сайта то он должен закрыть все браузеры чтобы новая версия заработала (а не старая - которая запущена и находится в памяти компа пока браузер не закроится, так уж работает Java!), так вот, мне нужно в ручную закрыть все браузера, а как сделать пока не знаю! нашел только функию FindWindow чтобы получить хэндл окна а потом послать этому приложению WM_DESTROY, но она находит окна по заголовкам - а у Internet Explorer-a он каждый раз разный в зависимости от странички которую показывает, то есть как закрыть мне этот браузер не зная его точный заголовок? Если не трудно напишите маленький примерчик пожалуйста, очень надо!
     
  2. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348




    imho, лучше показать юзеру сообщение, о том, что изменения вступят в силу после перезапуска браузера. Он сам решит когда и что ему позакрывать.
     
  3. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181
    к сожалению большинство наших *клиентов* во первых на столько глупы что не знают (и НЕ хотят знать, это тоже нужно учитывать!) что такое браузер, а во вторых я это оформлю приемлемым образом, короче, я уже думал об этом и простой алерт *закройте браузер потому что бла-бла* не поможет, а если дать еще и пояснения то им покажется слишком трудно, я не зря обратился к Вам за помощью, если кто знает или догадывается как закрыть окно браузера пожадуйста ответьте!
     
  4. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    FindWindow ищет не только по заголовку, но и по классу окна (IEFrame).



    --
    Код (Text):
    1. HWND hwnd = NULL;
    2. while(hwnd = FindWindow("IEFrame", NULL))
    3. {
    4.    SendMessage(hwnd, WM_DESTROY, 0, 0l);
    5. }
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    xlinuks

    JVM можно перезапустить через консоль управления (иконка в трее). Не пробовали?
     
  6. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181
    уау!!! класс rmn! век не забуду :)

    я помню что по классу тоже, но как узнать какой класс использует то или уное приложение даже не знал/ю где искать, иду тестировать :)



    ps: про перезапуск JVM из консоли не пробовал но из самого апплета/программы это врядли можно сделать а если и можно то как JVM будет знать какой апплет ей загружать после перезагрузки.. по любому спасибо и за это предложение, это в принципе тоже может быть хорошим вариантом :)
     
  7. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    xlinuks



    А как Вы собираетесь запускать из апплета код rmn? Как раз команду послать в консоль JVN, скорее всего, можно из апплета. Когда-то делал пример на JavaScript даже, но только для какой-то конкретной версии JRE (1.3, кажется). Дальше не копал, т.к. потерял интерес к апплетам.





    Проще всего с помощью Spy32 for Windows 9x/NT by Kobi. В OllyDbg тоже можно, но возни чуть больше. В SoftIce, естественно, тоже можно подсмотреть класс, но ещё сложнее чем в OllyDbg.
     
  8. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    но как узнать какой класс использует то или уное приложение

    Кто пользуется TotalCommander 6.03a (скорее всего, и раньше подойдёт), может загрузить плагин, показывающий процессы и по щелчку на них - все их окна с возможностью скрыть, включить, поместить OnTop и т.д. Плагин - "TaskManager", у меня входил в пользовательский комплект TotalCommanderXP, однако после исследования удалось вытащить ещё кое-какие настройки.
     
  9. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181
    "А как Вы собираетесь запускать из апплета код rmn?"

    - Из кода я запущу экзешку которую включу в .jar файл и запущу из Java, значит будет работать пока под уиндоус но заботится о других платформах пока нет необходимости.



    спасибо за все советы.



    но всетаки мой код почемуто не закрывает окно:

    ...

    sIEClassName db "IEFrame", 0

    ...

    ieHwnd HWND ?

    ...

    .WHILE TRUE

    invoke FindWindow, addr sIEClassName, NULL

    .BREAK .IF( !eax )

    mov ieHwnd, eax

    invoke SendMessage, ieHwnd, WM_DESTROY, 0, 0

    ;invoke DestroyWindow, ieHwnd - тоже не закрывает

    .ENDW



    когда он запускается просто зависает Explorer и моя ассемблерская программа которая пытается (в лупе) его закрыть. Даже не представляю в чем дело.. может експлореру просто послать сообщение не достаточно.. ч_ерт его знает..
     
  10. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    xlinuks, попробуй PostMessage вместо SendMessage
     
  11. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    xlinuks

    я помню что по классу тоже, но как узнать какой класс использует то или уное приложение даже не знал/ю где искать



    [С нехорошей улыбкой]InqSoft Window Scanner :derisive: Лежит здесь: http://inqsoft.xss.ru/iws.html



    когда он запускается просто зависает Explorer и моя ассемблерская программа которая пытается (в лупе) его закрыть. Даже не представляю в чем дело.. может експлореру просто послать сообщение не достаточно..

    Достаточно, просто сообщение должно быть правильное: WM_SYSCOMMAND с параметром SC_CLOSE валит его без проблем, можешь сам помсмотреть в том же IWS, нужно просто нажимать синий крестик вмето красного.
     
  12. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    xlinuks

    У тебя в коде цикл прерывается, когда окно не найдено (eax = 0), потом отправляешь wm_destroy окну с хендлом 0.
     
  13. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181
    Да, CyberManiac, ты прав, дело в сообщении, я поэкспериментировал, например для Notepad-а (NotePad) достаточно WM_DESTROY, а WordPad-у (WordPadClass) и Internet Explorer-у этого мало. Прога IWS очень классная и удобная :)

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



    У меня единстрвенный вопрос, как посылать WM_SYSCOMMAND? Я пробовал
    Код (Text):
    1. invoke SendMessage, ieHwnd, WM_SYSCOMMAND, SC_CLOSE, SC_CLOSE
    но ничего не получилось..
     
  14. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181
    Опа, я просто забыл поменять имя класса в программе! WM_SYSCOMMAND работает отлично!! Всем спасибо! :)
     
Статус темы:
Закрыта.