Поиск окон
От: zzzeng  
Дата: 24.12.03 11:50
Оценка:
Ситуация следующая: я открываю html файлы с помощью установленного браузера, для этого использую ShellExecute. После этого в процессе работы своего приложения мне хотелось бы знать закрыл пользователь эти окна или нет? Класс проверяемого окна и его Caption я не знаю. ShellExecute возвращает hInstance , но что с ним делать и можно ли его использовать для этой цели я не знаю. Помогите советом!
Re: Поиск окон
От: maximilian Украина  
Дата: 24.12.03 12:08
Оценка:
Здравствуйте, zzzeng, Вы писали:

Z>Ситуация следующая: я открываю html файлы с помощью установленного браузера, для этого использую ShellExecute. После этого в процессе работы своего приложения мне хотелось бы знать закрыл пользователь эти окна или нет? Класс проверяемого окна и его Caption я не знаю. ShellExecute возвращает hInstance , но что с ним делать и можно ли его использовать для этой цели я не знаю. Помогите советом!


Можно воспользоваться ShellExecuteEx, получить описатель созданного процесса, закинуть его, к примеру в массив, и периодически бегать по нему, вызывая GetExitCodeProcess. Если код == STILL_ACTIVE, значит еще жив процесс
Re: Поиск окон
От: Pavel Dvorkin Россия  
Дата: 24.12.03 12:14
Оценка:
Привет!

zzzeng wrote:
>
> Ситуация следующая: я открываю html файлы с помощью установленного браузера, для этого использую ShellExecute. После этого в процессе работы своего приложения мне хотелось бы знать закрыл пользователь эти окна или нет? Класс проверяемого окна и его Caption я не знаю. ShellExecute возвращает hInstance , но что с ним делать и можно ли его использовать для этой цели я не знаю. Помогите советом!

ShellExecute возвращает не HINSTANCE, а бог знает что.

Return Value

Returns a value greater than 32 if successful, or an error value that is
less than or equal to 32 otherwise. The following table lists the error
values. The return value is cast as an HINSTANCE for backward
compatibility with 16-bit Windows applications. It is not a true
HINSTANCE, however. The only thing that can be done with the returned
HINSTANCE is to cast it to an int and compare it with the value 32 or
one of the error codes below.

Так что на этом пути ничего не выйдет.

А вот если заменить на ShellExecuteEx , то она вернет в структуре
hProcess. Теперь можно Thread32First/Next для этого процесса и
EnumThreadWindows для каждого потока. Так можно все окна перебрать.
А дальше я не знаю. Предположим, что пользователь в этом броузере закрыл
это окно, но до этого открыл другое — и что же ты хочешь узнать ? Был бы
хоть заголовок...

--
С наилучшими пожеланиями
Дворкин Павел
Posted via RSDN NNTP Server 1.7 "Bedlam"
With best regards
Pavel Dvorkin
Re[2]: Поиск окон
От: Pavel Dvorkin Россия  
Дата: 24.12.03 12:17
Оценка:
Привет!

maximilian wrote:
>
> Здравствуйте, zzzeng, Вы писали:
>
> Z>Ситуация следующая: я открываю html файлы с помощью установленного браузера, для этого использую ShellExecute. После этого в процессе работы своего приложения мне хотелось бы знать закрыл пользователь эти окна или нет? Класс проверяемого окна и его Caption я не знаю. ShellExecute возвращает hInstance , но что с ним делать и можно ли его использовать для этой цели я не знаю. Помогите советом!
>
> Можно воспользоваться ShellExecuteEx, получить описатель созданного процесса, закинуть его, к примеру в массив, и периодически бегать по нему, вызывая GetExitCodeProcess. Если код == STILL_ACTIVE, значит еще жив процесс

Так и до 100% загрузки процессора недалеко. Почему бы просто отдельный
поток- наблюдатель не запустить и WaitForSingleObject ? Но автор вопроса
ИМХО не об окончании процесса спрашивает — это просто, а о закрытии
окон.

--
С наилучшими пожеланиями
Дворкин Павел
Posted via RSDN NNTP Server 1.7 "Bedlam"
With best regards
Pavel Dvorkin
Re[3]: Поиск окон
От: maximilian Украина  
Дата: 24.12.03 12:48
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Привет!


PD>maximilian wrote:

>>
>> Здравствуйте, zzzeng, Вы писали:
>>
>> Z>Ситуация следующая: я открываю html файлы с помощью установленного браузера, для этого использую ShellExecute. После этого в процессе работы своего приложения мне хотелось бы знать закрыл пользователь эти окна или нет? Класс проверяемого окна и его Caption я не знаю. ShellExecute возвращает hInstance , но что с ним делать и можно ли его использовать для этой цели я не знаю. Помогите советом!
>>
>> Можно воспользоваться ShellExecuteEx, получить описатель созданного процесса, закинуть его, к примеру в массив, и периодически бегать по нему, вызывая GetExitCodeProcess. Если код == STILL_ACTIVE, значит еще жив процесс

PD>Так и до 100% загрузки процессора недалеко. Почему бы просто отдельный

PD>поток- наблюдатель не запустить и WaitForSingleObject ? Но автор вопроса
PD>ИМХО не об окончании процесса спрашивает — это просто, а о закрытии
PD>окон.

проверку выполнять можно в обработчике таймера, например.

сорри, подход не рабочий, в hProcess возвращается NULL. Связано, видимо, с тем, что страница открывается в существующем окне.

PD>--

PD>С наилучшими пожеланиями
PD> Дворкин Павел
Re[4]: Поиск окон
От: Pavel Dvorkin Россия  
Дата: 24.12.03 12:53
Оценка:
Привет!

maximilian wrote:

> проверку выполнять можно в обработчике таймера, например.


Ну либо таймер, либо поток — это уж дело вкуса.
>
> сорри, подход не рабочий, в hProcess возвращается NULL. Связано, видимо, с тем, что страница открывается в существующем окне.

Вполне возможно и все же проверь fMask.

hProcess

Handle to the newly started application. This member is set on return
and is always NULL unless fMask is set to SEE_MASK_NOCLOSEPROCESS. Even
if fMask is set to SEE_MASK_NOCLOSEPROCESS, hProcess will be NULL if no
process was launched. For example, if a document to be launched is a URL
and an instance of Microsoft Internet Explorer is already running, it
will display the document. No new process is launched, and hProcess will
be NULL.

Note ShellExecuteEx does not always return an hProcess, even if a
process is launched as the result of the call. For example, an hProcess
does not return when you use SEE_MASK_INVOKEIDLIST to invoke
IContextMenu.


Впрочем, как я уже писал, сама задача некорректно поставлена.

--
С наилучшими пожеланиями
Дворкин Павел
Posted via RSDN NNTP Server 1.7 "Bedlam"
With best regards
Pavel Dvorkin
Re: Поиск окон
От: Блудов Павел Россия  
Дата: 25.12.03 04:40
Оценка:
Здравствуйте, zzzeng, Вы писали:

Z>Ситуация следующая: я открываю html файлы с помощью установленного браузера, для этого использую ShellExecute.


Еще можно использовать OLE Automation для объекта InternetExplorer. Тут все в Ваших руках.
Re[2]: Поиск окон
От: Mandigal  
Дата: 25.12.03 09:03
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

БП>Здравствуйте, zzzeng, Вы писали:


Z>>Ситуация следующая: я открываю html файлы с помощью установленного браузера, для этого использую ShellExecute.


БП>Еще можно использовать OLE Automation для объекта InternetExplorer. Тут все в Ваших руках




А еще ты можешь узнать класс окна через Spy (в стандартной поставке Visual Studio) а заголовок окна ты береши з самого файла хтмл который ты в своей программе открываешь (просто открываешь файл и ишешь <title>)
.
Re[3]: Поиск окон
От: Slava Antonov Россия http://deadbeef.narod.ru
Дата: 26.12.03 10:45
Оценка:
H e l l o, Mandigal!

БП>> Еще можно использовать OLE Automation для объекта

БП>> InternetExplorer. Тут все в Ваших руках
M> А еще ты можешь узнать класс окна через Spy (в стандартной
M> поставке Visual Studio) а заголовок окна ты береши з самого файла
M> хтмл который ты в своей программе открываешь (просто открываешь
M> файл и ишешь <title>) .

А почему вы считаете что "установленный браузер" это именно IE?

--
Всего хорошего, Слава. (http://slava.users.otts.ru)
-= Большой круг — круг, содержащий диаметр. =-
Posted via RSDN NNTP Server 1.8 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.