Привет, у меня такая проблема, написал Java апплет, после чего юзер качает последнюю версию с сайта то он должен закрыть все браузеры чтобы новая версия заработала (а не старая - которая запущена и находится в памяти компа пока браузер не закроится, так уж работает Java!), так вот, мне нужно в ручную закрыть все браузера, а как сделать пока не знаю! нашел только функию FindWindow чтобы получить хэндл окна а потом послать этому приложению WM_DESTROY, но она находит окна по заголовкам - а у Internet Explorer-a он каждый раз разный в зависимости от странички которую показывает, то есть как закрыть мне этот браузер не зная его точный заголовок? Если не трудно напишите маленький примерчик пожалуйста, очень надо!
imho, лучше показать юзеру сообщение, о том, что изменения вступят в силу после перезапуска браузера. Он сам решит когда и что ему позакрывать.
к сожалению большинство наших *клиентов* во первых на столько глупы что не знают (и НЕ хотят знать, это тоже нужно учитывать!) что такое браузер, а во вторых я это оформлю приемлемым образом, короче, я уже думал об этом и простой алерт *закройте браузер потому что бла-бла* не поможет, а если дать еще и пояснения то им покажется слишком трудно, я не зря обратился к Вам за помощью, если кто знает или догадывается как закрыть окно браузера пожадуйста ответьте!
FindWindow ищет не только по заголовку, но и по классу окна (IEFrame). -- Код (Text): HWND hwnd = NULL; while(hwnd = FindWindow("IEFrame", NULL)) { SendMessage(hwnd, WM_DESTROY, 0, 0l); }
уау!!! класс rmn! век не забуду я помню что по классу тоже, но как узнать какой класс использует то или уное приложение даже не знал/ю где искать, иду тестировать ps: про перезапуск JVM из консоли не пробовал но из самого апплета/программы это врядли можно сделать а если и можно то как JVM будет знать какой апплет ей загружать после перезагрузки.. по любому спасибо и за это предложение, это в принципе тоже может быть хорошим вариантом
xlinuks А как Вы собираетесь запускать из апплета код rmn? Как раз команду послать в консоль JVN, скорее всего, можно из апплета. Когда-то делал пример на JavaScript даже, но только для какой-то конкретной версии JRE (1.3, кажется). Дальше не копал, т.к. потерял интерес к апплетам. Проще всего с помощью Spy32 for Windows 9x/NT by Kobi. В OllyDbg тоже можно, но возни чуть больше. В SoftIce, естественно, тоже можно подсмотреть класс, но ещё сложнее чем в OllyDbg.
но как узнать какой класс использует то или уное приложение Кто пользуется TotalCommander 6.03a (скорее всего, и раньше подойдёт), может загрузить плагин, показывающий процессы и по щелчку на них - все их окна с возможностью скрыть, включить, поместить OnTop и т.д. Плагин - "TaskManager", у меня входил в пользовательский комплект TotalCommanderXP, однако после исследования удалось вытащить ещё кое-какие настройки.
"А как Вы собираетесь запускать из апплета код 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 и моя ассемблерская программа которая пытается (в лупе) его закрыть. Даже не представляю в чем дело.. может експлореру просто послать сообщение не достаточно.. ч_ерт его знает..
xlinuks я помню что по классу тоже, но как узнать какой класс использует то или уное приложение даже не знал/ю где искать [С нехорошей улыбкой]InqSoft Window Scanner Лежит здесь: http://inqsoft.xss.ru/iws.html когда он запускается просто зависает Explorer и моя ассемблерская программа которая пытается (в лупе) его закрыть. Даже не представляю в чем дело.. может експлореру просто послать сообщение не достаточно.. Достаточно, просто сообщение должно быть правильное: WM_SYSCOMMAND с параметром SC_CLOSE валит его без проблем, можешь сам помсмотреть в том же IWS, нужно просто нажимать синий крестик вмето красного.
xlinuks У тебя в коде цикл прерывается, когда окно не найдено (eax = 0), потом отправляешь wm_destroy окну с хендлом 0.
Да, CyberManiac, ты прав, дело в сообщении, я поэкспериментировал, например для Notepad-а (NotePad) достаточно WM_DESTROY, а WordPad-у (WordPadClass) и Internet Explorer-у этого мало. Прога IWS очень классная и удобная У них там неправильный линк на .zip файл проги, может потом они откорректируют, они поставили обратный слэш вместо прямого, отчего некоторые могут не догадатася в чем дело. У меня единстрвенный вопрос, как посылать WM_SYSCOMMAND? Я пробовал Код (Text): invoke SendMessage, ieHwnd, WM_SYSCOMMAND, SC_CLOSE, SC_CLOSE но ничего не получилось..