Что это за окна? Без процедур и стилей...

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Что это за окна? Без процедур и стилей...

Сообщение ANDLL » 03.01.2007 (Ср) 15:17

У меня стоит windows xp со стилем, присущем этой ОС.
Некоторые окна, обладают рядом интересных особенностей. Во-первых, они почему-то отображаются в старом, классическом стиле, даже заголовки, что обычным окна отнюдь не свойственно. Во-вторых, Spy++ в графе Window Proc у таких окон показывает (Unaviable)(Unicode)
Хотелось бы знать, как это окно, без окнной процедуры работает?
Такие окна например, у косноли(cmd) и (что более интересно) у некоторых других программ.
Например, в J# метод MessageBox.Show с параметром ServiceMessage(как-то так) показывает именно такое окно.
Или, например, если при обращении к дискете ее вынуть, появляется окно с Abort\Ignore\Retry обладающее, такими же свойствами. Класс этого окна "#32770 (Dialog)".
Вопросы
Что это за окна?
Как создать такое окно?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 03.01.2007 (Ср) 19:40

Ага, ANDLL, тоже заинтересовался :)
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.01.2007 (Ср) 20:19

Что значит "без процедур"?
А вы GetWindowLong на этом окне вызовите. 0 получите.
А потом err.lastdllerror посмотрите, увидьте там 5 aka access denied.
Из этого факта единственный вывод, который приходит мне в голову, состоит в том, что это окна, принадлежащие службам, которым разрешено взаимодействовать с рабочим столом...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 03.01.2007 (Ср) 21:19

Это окна, которым винда не рисует стиль. При сворачивании нормального окна (пока окно летит вниз в таскбар) оно тоже ставноится таким. И при зависании программы её окно тоже иногда ставноится таким.

Это так, к слову...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 04.01.2007 (Чт) 17:00

GSerg писал(а):Что значит "без процедур"?
А вы GetWindowLong на этом окне вызовите. 0 получите.
А потом err.lastdllerror посмотрите, увидьте там 5 aka access denied.
GSerg, ты наверное так и не прочитал, каким образом был сделан вывод об отстутсвии процедуры? Чтож, повторю, Spy++ для всех окон процедуры видит, а для этих нет. Вопрос - почему? Ошибка 5 вообщето возникает для люых окон не этого процесса.
Из этого факта единственный вывод, который приходит мне в голову, состоит в том, что это окна, принадлежащие службам, которым разрешено взаимодействовать с рабочим столом...
Как одно связано с другим?
И при зависании программы её окно тоже иногда ставноится таким.
Не становится. По крайней мере в общем случае.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.01.2007 (Чт) 17:47

ANDLL писал(а):
Из этого факта единственный вывод, который приходит мне в голову, состоит в том, что это окна, принадлежащие службам, которым разрешено взаимодействовать с рабочим столом...
Как одно связано с другим?

Ну например, можно угадать, что spyxx ставит хук, который действует внутри одного сеанса. Раз этот хук до тех окон не доходит, значит они в другом сеансе.
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 04.01.2007 (Чт) 18:02

Иными словами, cmd.exe запускается из одного сеанса а потом вдруг оказывается в другом?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.01.2007 (Чт) 18:07

Угу. Ты запусти Блокнот через at -- он тоже будет без процедуры ;-)
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 04.01.2007 (Чт) 18:12

tyomitch
А если я показываю с помощью j# messagebox то моя программа переносится в другой сеанс а потом возвращается обратно?
И почему это вдруг консольные программы переносятся в другую станцию?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 04.01.2007 (Чт) 18:17

И наконец, на этой картинке часть программы на бейсике находится в одной станции, а часть - в другой?
http://danasoft.ws/etc/pic1.jpg
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.01.2007 (Чт) 18:44

ANDLL писал(а):И наконец, на этой картинке часть программы на бейсике находится в одной станции, а часть - в другой?

Консольные окна (все без исключения) отрисовываются сервисом csrss, а не родительским процессом.
Удивительно не знать такие вещи :-?
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 04.01.2007 (Чт) 20:10

Правда удивительно?
Консольное окно приписано к процессу VB6, как получается, что его обслыживает другой процесс?
Как можно создать окно, которое будет принадлежать одному процессу, но окнная процедура будет в другом?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.01.2007 (Чт) 20:28

Когда я на форму кладу OLE-контрол, а в нём экселевская книга, и его обслуживает отдельный процесс excel.exe, тебя это не удиваляет? :roll:

Когда ты выбираешь скринсейвер, и в апплете рисуется его привьюшка отдельным процессом, тебя это не удивляет? :roll:
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 04.01.2007 (Чт) 20:39

Когда ты выбираешь скринсейвер, и в апплете рисуется его привьюшка отдельным процессом, тебя это не удивляет?
Окно, в котором ресует скирсейвер принадлжет скринсйверу.
Когда я на форму кладу OLE-контрол, а в нём экселевская книга, и его обслуживает отдельный процесс excel.exe, тебя это не удиваляет?
OLE-контрол это не окно.
Ничего общего с нашим случаем я не вижу

Вопрос, как windows определяет, что оконная процедура вот этого окна в том же процессе, что и само окно, а вот другого окна - в процессе csrss, хотя само окно пренадлежит вовсе не csrss.
И что более интересно, как такое окно создать?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.01.2007 (Чт) 20:54

ANDLL писал(а):
Когда я на форму кладу OLE-контрол, а в нём экселевская книга, и его обслуживает отдельный процесс excel.exe, тебя это не удиваляет?
OLE-контрол это не окно.

А что тогда? :shock:
Вложения
olectl.png
olectl.png (24.74 Кб) Просмотров: 1699
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 04.01.2007 (Чт) 20:56

tyomitch писал(а):
ANDLL писал(а):
Когда я на форму кладу OLE-контрол, а в нём экселевская книга, и его обслуживает отдельный процесс excel.exe, тебя это не удиваляет?
OLE-контрол это не окно.

А что тогда? :shock:
Это уже активированныйй вариант, неактивированный это не окно.
Активированный вариант в свою очередь это окно, пренадлежащее опять же другому процессу.
Что ты пытаешься мне показать?
Последний раз редактировалось ANDLL 04.01.2007 (Чт) 20:59, всего редактировалось 1 раз.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.01.2007 (Чт) 20:58

Ну активированный -- это экселевское окно в процессе VB6, или как?
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 04.01.2007 (Чт) 21:01

Я не вижу ничего странного в том, что окно одного процесса лежит на другом. В конце концов, все окна лежат на десктопе который принадлежит csrss.
Еще раз озвучиваю вопрос, который я писал уже дважды, как оконная процедура может быть в другом процессе, нежели само окно?
А ты мне пытаешься показать, что можно разметить окно одного прецесса в окне другого? Или что?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.01.2007 (Чт) 21:04

ANDLL писал(а):Вопрос, как windows определяет, что оконная процедура вот этого окна в том же процессе, что и само окно, а вот другого окна - в процессе csrss, хотя само окно пренадлежит вовсе не csrss.

Тебя ждёт обалденный сюрприз :lol:
см. win2k\private\ntos\w32\ntuser\kernel\ntstubs.c, строки 9654--9677
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 04.01.2007 (Чт) 21:18

Чудесно. Еще раз спасибо за этот замечательный источник знаний.
А к чему были смайлы и намеки про OLE и прочие радости?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.01.2007 (Чт) 21:34

Я сначала решил, что тебя удивляет именно то, что "можно разместить окно одного процесса на окне другого".
Изображение


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 70

    TopList  
cron