Попытка создать свой MsgBox. Хе-хе

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Попытка создать свой MsgBox. Хе-хе

Сообщение Space » 08.11.2009 (Вс) 8:21

Понадобилось сделать свой немодальный MyMsgBox на модальной форме (API MessageBox не устраивает). Сразу столкнулся с 2 проблемаи - не могу показать MyMsgBox поверх модальной формы, и, если расскоментить строку Command2.SetFocus (установка кнопки по умолчанию) - вообще мигание окно с подвисом (модальное окно не отдаёт фокус или что?)...
Вложения
MyMsgBox.zip
(2.33 Кб) Скачиваний: 84

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

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Хакер » 08.11.2009 (Вс) 8:33

О господи, дай мне силы это перенести.

Space, у тебя какие-то проблемы с пониманием? Я не знаю, какая чушь у тебя хранится в голове в качестве расшифровки понятия "модальное окно", но эта чушь полностью противоположена действительности.

Ты абсолютно неправильно понимаешь, что такое модальность. Показ немодального окна во время работы модального -- это невозможный треугольник, это прозрачный телевизор с абсолютно непрозрачным экраном.

Это полностью противоречит здравому смыслу и к счастью это ещё и технически невозможно сделать. VB на корню пресекает такие глупые попытки, WinAPI же, как я и говорил, предоставляют тебе возможность создать себе проблемы на одно место.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Space » 08.11.2009 (Вс) 8:48

ну спасибо, помог. У меня есть ещё вариантик. По сути мне надо, чтобы после вызова моего MsgBox управление возвращалась.

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

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Хакер » 08.11.2009 (Вс) 8:52

Вот в этом и заключается модальность. Пока с окном не закончишь работать, управление не вернётся.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Space » 08.11.2009 (Вс) 9:15

я знаю. Сделал уж.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Денис » 08.11.2009 (Вс) 22:51

Space писал(а):Понадобилось сделать свой немодальный MyMsgBox

Код: Выделить всё
Form2.Show vbModeless, Me

на модальной форме

Нонсенс! Неправильная архитектура программы рождает несуразные требования.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Space » 25.11.2009 (Ср) 21:53

а я могу установить своему MsgBox класс такой же, как у реального MsgBox? Как?

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

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Хакер » 25.11.2009 (Ср) 23:23

Очередная чушь.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Денис » 26.11.2009 (Чт) 8:42

Хакер писал(а):Очередная чушь.

Это не чушь, это так называемый "butthurt" (или, иначе говоря, обида, зависть). Друзья-дельфисты говорят ему: "вот, я могу своему классу-окну любое имя присвоить, для удобства и самодокументируемости. А у вас, в этих ваших бейсиках так не получится! Ха-ха!"
И вот наш герой с трясушимися ручками лезет на форум: "А как своему окну задать имя класса??"
А зачем? Что лично тебе, Space даст имя класса #32770 вместо ThunderRT6Main? Ну ладно, где-то на форуме был код, реализующий CreateWindow. Там ты сможешь создать окно с интересующим тебя именем класса.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

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

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Хакер » 26.11.2009 (Чт) 8:49

Вопрос именно в смене. Менять класс существующего окна --- чушь.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Денис » 26.11.2009 (Чт) 9:04

Хакер писал(а):Вопрос именно в смене. Менять класс существующего окна --- чушь.

А ну это да.
Класс не меняется - он создается
Caption меняется - класс остаётся.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Space » 26.11.2009 (Чт) 12:42

чушь в смысле необоснованности смены или чушь в смысле невозможности изменить? Ладно, обосную - я хочу максимально приблизить свой MsgBox к реальным MsgBox'ам, чтобы сторонние программы при переборе окон определяли мой MsgBox как диалоговое окно реального MsgBox. CreateWindow? Мда...
Э... Уси окна косят на "ThunderFormDC"

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Antonariy » 26.11.2009 (Чт) 14:57

Space писал(а):Ладно, обосную - я хочу максимально приблизить свой MsgBox к реальным MsgBox'ам, чтобы сторонние программы при переборе окон определяли мой MsgBox как диалоговое окно реального MsgBox.
Редкой бессмысленности задача это.

Space писал(а):Э... Уси окна косят на "ThunderFormDC"
Изменить имя класса не представляет сложности.
Лучший способ понять что-то самому — объяснить это другому.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Twister » 01.12.2009 (Вт) 12:45

Изменить имя класса не представляет сложности.

Или я не выспался, или...

1. Расскажи как это сделать не влезая в ядро.
2. Расскажи как это сделать в ядре с гарантией того, что все будет работать так, как работало.
А я все практикую лечение травами...

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Antonariy » 01.12.2009 (Вт) 14:08

Это я ошибся. Просто есть в одной программке кнопка Class to change, я ей не пользовался, но почему-то считал, что она меняет имя класса как кнопка Window to change — текст заголовка.
Лучший способ понять что-то самому — объяснить это другому.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Twister » 01.12.2009 (Вт) 14:26

Вообще, теоритически, изменить имя класса можно. В ядре. Если кому-то интересно (и этот кто-то осилит такую работу :) ), то я могу рассказать где и что поменять. Но будет ли система стабильно работать после этого гарантировать не могу.
А я все практикую лечение травами...

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

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Хакер » 01.12.2009 (Вт) 14:27

Не будет.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Twister » 01.12.2009 (Вт) 14:47

Нет-нет, так категорично я бы не заявлял. Имя класса - обычная null-terminated строка в структуре tagCLS. Я бы создал свой класс с нужным мне именем (чтобы он располагался в памяти там где надо и был виден и ядру, и юзермоду) и в подопытном классе просто изменил указатель. Повторю - тут только эксперимент может пролить свет, так как на вскидку ни каких подводных каменй не видно. Просто манипуляция структурами ядра силой своей воли и разума не всегда бывает безопасной, ошибка может вылезти там, где совсем этого не ожидаешь. Я вот, к примеру, так и не смог корректно изменить стили окна правкой байт в структуре tagWND. Но тут немного другое...
А я все практикую лечение травами...

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

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Хакер » 01.12.2009 (Вт) 14:59

Я имел в виду не только работу системы (ядра), но и стабильную работу всех прикладных программ.

Стабильность от такого трюка не может не нарушиться.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Twister » 01.12.2009 (Вт) 15:09

Хакер писал(а):Я имел в виду не только работу системы (ядра), но и стабильную работу всех прикладных программ.
Хех. Я тебе одно скажу в чем я конкретно уверен - если ядру что-то не понравится (как тогда, когда я правил стили), то оно сразу выдаст синий экран. И в этом случае говорить о корректной работе каких-то там прикладных программ уже нет смысла. :)
Стабильность от такого трюка не может не нарушиться.
А вот если мы не увидим синего экрана, тогда, я уверен, будет все окей, ибо я не вижу причин, по которым прикладные программы начали бы глючить. Ну получит прога с помощью GetClassName (да хоть прямым чтением ядерных структур!) fake-имя класса, ну и что?
А я все практикую лечение травами...

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

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Хакер » 01.12.2009 (Вт) 15:20

FindWindow-вызовы будут обламываться.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Twister » 02.12.2009 (Ср) 14:05

FindWindow-вызовы будут обламываться.
Ну конечно. Класс-то возвратится другой :) Но это уже, так сказать, не наши заботы.
А я все практикую лечение травами...

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Денис » 02.12.2009 (Ср) 14:22

Twister писал(а):Но это уже, так сказать, не наши заботы.

Если мы пишем бесплатно, то не наши, да. Но если мы наивно надеемся выручить за свой софт какую-никакую копеечку, то это как раз таки наши заботы, целиком и полностью.
Мы и глазом моргнуть не успеем, как по форумам в рунете прокатится новость, что после нашего "софта" рушится система. После чего за такой "софт" не заплатят и рубля.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Twister » 02.12.2009 (Ср) 14:26

Денис, еще раз.

Если наша система вызывает падение ОС, то в топку такую систему, ни кто ее на рынок выпускать не будет. А если наша система, писанная на VB, создает свое окошко и корректно меняет ему класс, то что в этом страшного? Вопрос в другом: а надо ли это вообще? (С) Соседний топик :)
А я все практикую лечение травами...

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Денис » 02.12.2009 (Ср) 14:48

Twister писал(а):Денис, еще раз.

Если наша система вызывает падение ОС, то в топку такую систему, ни кто ее на рынок выпускать не будет. А если наша система, писанная на VB, создает свое окошко и корректно меняет ему класс, то что в этом страшного? Вопрос в другом: а надо ли это вообще? (С) Соседний топик :)


Тут надобно у Хакера уточнить, что он имел ввиду. Похоже что мы его поняли по-разному. Я понял так, что при замене имени класса для одного из загруженных образов процессов, начнут обламываться вызовы API-функции типа FindWindow, какое приложение бы ее не вызвало(!), понимаешь? Это натуральная нестабильность системы, когда начинают обламываться вызовы API. Вот как мне кажется что имел ввиду Хакер, сказав:
Хакер писал(а):FindWindow-вызовы будут обламываться.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Twister » 02.12.2009 (Ср) 15:00

Я понял так, что при замене имени класса для одного из загруженных образов процессов, начнут обламываться вызовы API-функции типа FindWindow, какое приложение бы ее не вызвало(!), понимаешь?
Я тебя удивлю: область памяти, в которой располагаются гуёвые структуры общая для всех процессов, только спроецирована по разным адресам. Но не в этом дело. Дело в том, что мы меням класс НАШЕМУ ОКНУ. Какого же черта кто-то там вдуг обломится на FindWindow? Какая сторонняя утилита будет искать НАШИ окна и опираться в своей работе на их класс? Понимаешь о чем я говорю?
А я все практикую лечение травами...

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Денис » 02.12.2009 (Ср) 15:08

Twister писал(а):Какая сторонняя утилита будет искать НАШИ окна и опираться в своей работе на их класс?

Какая? Ну, например, мой qSelector. Он по таймеру перебирает все зарегистрированные окна, читает их параметры. Допустим вылетит вместе с нашим приложением только он, это еще ничего. А если следом повылетают какие-нибудь удаленно-управлялки или еще что-то специфичное? Сам видел в соседнем топике — чего только на местах не придумают: чтобы нужный софт работал, надо системное время на машине переводить (полагаю на 10 лет назад в девяностые).
Так что все это очень неоднозначно.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

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

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Хакер » 02.12.2009 (Ср) 15:23

Я имел в виду общий случай, в котором смена класса приведёт к тому, что кто-то перестанет находить фикснутое окно. Но в конкретном данном случае, хоть это и маловероятно, нельзя исключать, что msvbvm не ищет свои окно по классу.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Попытка создать свой MsgBox. Хе-хе

Сообщение Twister » 02.12.2009 (Ср) 19:07

нельзя исключать, что msvbvm не ищет свои окно по классу
Вооот... Наконец первая здравая мысль по поводу возможных конфликтов. Остальное, написанное выше, ни как не повлияет на работоспособность каких-либо утилит (еще раз: не найдет кто-то наше окно и ладно, ни одна здравая программа не вылетит с ошибкой из-за ненайденного окна). Короче, как я уже говорил, ясность внесет только эксперимент. Еще пару месяцев назад я бы с легкостью, только ради спортивного интереса, сам бы его провел. Но после кражи старого ноутбука я не ставил на новую машину ни WDK, ни WinDBG, ни, тем более, VB. И в ближайшее время не намерен. Так что... :)
А я все практикую лечение травами...


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: SemrushBot и гости: 1

    TopList