как получить хендл msmbox- а ?

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

как получить хендл msmbox- а ?

Сообщение dklmn » 26.05.2005 (Чт) 15:59

Мне нужно убить окошко мессаджбокса (MsgBox) про которое мы знаем только его заголовок и что он вызывается из некой dll-ки. Соответсвенно мне надо найте его хендл. Поначалу я хотел сделать это помощи фунции обратного вызова enumWindows -чтобы узнать все хендлы окошек верхнего уровня, от них хендлы child окошек , для всех них ищем название окошка пока оно не совпадет с искомым.
НО, Проблема в том что мне нужно сделать это на платформе Windows CE и в качесве среды программирования мною была неудачно выбран
Embedded Visual Basic, в котором нет оператора AdressOf и сотвно мы не можем использовать ф-ии обратного вызова.
Другой подход
использовать фунцию FindWindow и FindWindowEx. Так да?
Направьте мысли в нужную сторону.
Допустим если этот MsgBox вызывается из dll-ки - он считается окошком верхнего уровня? Если да то findWindow его найдет по названию , да?
А если нет то что будет для него Parent Window?
а какой для MsgBox-а класс окна?
Или он здесь не нужен - можно просто передать vbNullString?
Или это вообще все как то иначе делается?

Я в виндовых системных делах не силен, поэтому могу задавать глупые вопросы -простите великодушно если что...
Спасибо

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

Сообщение BV » 26.05.2005 (Чт) 16:15

GetClassName?

Но можно и vbNullString.
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;

dklmn
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 23.03.2004 (Вт) 12:21

А если использовать getWindow?

Сообщение dklmn » 26.05.2005 (Чт) 17:45

Да мне надо не процессы убивать, а именно окошко
- я использую в проге на Pocket pc компоненту cesocket.dll- аналог винсок контрола, а она каждый раз при инициализации выдает окошко - мол , незарегистрированная версия.
я вот ту попробовал использовать
hndl = FindWindow(vbNullString, Trim(Text1.Text))
- выдает ноль, какое бы название окошка я не вводил...
А если использовать getWindow?
но для этого мне надо знать handle окна самого верхнего уровня?
А как его узнать?

dklmn
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 23.03.2004 (Вт) 12:21

Сообщение dklmn » 26.05.2005 (Чт) 18:09

GetDesktopWindow Function
- не предлагать, ее увы нет в windows ce api

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

Сообщение BV » 26.05.2005 (Чт) 18:56

GetClassName ты можешь использовать для выяснения класса окна, а потом с FindWindow его (окно) искать по классу.

И ничего больше изобретать не надо. :)
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;

dklmn
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 23.03.2004 (Вт) 12:21

кажется нашел то что искал..

Сообщение dklmn » 27.05.2005 (Пт) 10:13

кажется нашел то что искал.. Как всегда когда надежда почти потерена выручил Google
FindWindow("DesktopExplorerWindow", "Desktop")
- мы получаем хендл окна самог верхнего уровня и от него можно пробоват плясать дальше

dklmn
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 23.03.2004 (Вт) 12:21

кажется нашел то что искал..

Сообщение dklmn » 27.05.2005 (Пт) 10:15

кажется нашел то что искал.. Как всегда когда надежда почти потерена выручил Google
Код: Выделить всё
FindWindow("DesktopExplorerWindow", "Desktop")

- мы получаем хендл окна самог верхнего уровня и от него можно пробоват плясать дальше

dklmn
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 23.03.2004 (Вт) 12:21

кажется нашел то что искал..

Сообщение dklmn » 27.05.2005 (Пт) 10:18

кажется нашел то что искал.. Как всегда когда надежда почти потерена выручил Google
Код: Выделить всё
FindWindow("DesktopExplorerWindow", "Desktop")

- мы получаем хендл окна верхнего уровня и от него можно пробовать плясать дальше

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

Сообщение BV » 30.05.2005 (Пн) 12:42

Мог бы просто нажать кнопку "правка". :wink:
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;

dklmn
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 23.03.2004 (Вт) 12:21

могу поделиться примером кода

Сообщение dklmn » 30.05.2005 (Пн) 15:07

если кому надо знать как можно убивать окошки в условно бесплатных компонентах под windows Ce - могу поделиться кодом.
Написано правда на evb,
но те же api - фунции можно испльзовать и для Dot Net
- а если задекларировать их по другом то просто на VB.
Вложения
MsgBoxKiller.rar
(16.3 Кб) Скачиваний: 44


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

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

Сейчас этот форум просматривают: Google-бот и гости: 40

    TopList  
cron