Dialog #32770 Зависание

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Dialog #32770 Зависание

Сообщение JohnK » 25.07.2009 (Сб) 10:15

Есть необходимость в управлении сторонней программой.
Главное окно программы - диалог (#32770), запуск из exe не составляет труда. На диалоге есть клавиша, нажать ее тоже не проблема.
По нажатии клавишы выскакивает еще один диалог. Проблема в том что при выполненни кода:
Код: Выделить всё
ret = FindWindow("#32770", "Ввод данных")

Моя программа подвисает до тех пор пока я закрою этот диалог. В чем здесь кроется тайна?
Пробывал и так:
Код: Выделить всё
ret = FindWindowEx(CTL.main, 0, pClass, pName)

CTL.main - это хендл родительского диалога, таже самая проблема.
Причем если нажать клавишу не программно, а как пологается. Дочерний диалог находится и подвисаний нет.

Нажатие клавишы делаю так:
Код: Выделить всё
SetActiveWindow CTL.main
Call SendMessage(CTL.Button_add, BM_CLICK, 0&, 0&)
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Dialog #32770 Зависание

Сообщение JohnK » 25.07.2009 (Сб) 13:18

Нажать можно и так, но боюсь что это приведет к нестабильной работе из-за потери фокуса.
Код: Выделить всё
SetForegroundWindow ret
SendKeys (Chr(13))


И все же, почему при посылке сообщения кнопке диалог выскакивает, но при поиске диалога по заголовку (для контроля открытия нужного окна) мое приложение подвисает?
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

arvitaly
Постоялец
Постоялец
 
Сообщения: 485
Зарегистрирован: 12.04.2009 (Вс) 0:30
Откуда: Казань

Re: Dialog #32770 Зависание

Сообщение arvitaly » 25.07.2009 (Сб) 14:39

Главное окно программы - диалог (#32770), запуск из exe не составляет труда.


Как именно?

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Dialog #32770 Зависание

Сообщение JohnK » 25.07.2009 (Сб) 14:54

Вопрос не ясный... Но попробую ответить. :)
Код: Выделить всё
n = ShellExecute(0, vbNullString, sspPath, vbNullString, Left$(CurDir$, 1), 1)


Себя в качестве родителя не указываю...
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

arvitaly
Постоялец
Постоялец
 
Сообщения: 485
Зарегистрирован: 12.04.2009 (Вс) 0:30
Откуда: Казань

Re: Dialog #32770 Зависание

Сообщение arvitaly » 25.07.2009 (Сб) 15:02

Себя в качестве родителя не указываю...

Ну про это я и спрашивал, тогда не знаю

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Dialog #32770 Зависание

Сообщение JohnK » 25.07.2009 (Сб) 15:25

В том то и дело, что моя программа никоем образом не должна быть зависима от этого диалога. Причем в процедуре оставил только одну функцию FindWindow для чистоты эксперимента.
Есть мысль управлять через
Код: Выделить всё
SendDlgItemMessage

Соответственно доставая ID элементов функцией
Код: Выделить всё
GetDlgCtrlID

Попробывать смогу только завтра. А сейчас жду ваших идей.
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Dialog #32770 Зависание

Сообщение JohnK » 27.07.2009 (Пн) 1:26

Таже самая ерунда!!!!

Хакер, я знаю, ты здесь! :)
Ты можешь объяснить что происходит?
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

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

Re: Dialog #32770 Зависание

Сообщение Денис » 27.07.2009 (Пн) 7:48

А если попробовать PostMessage вместо SendMessage?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Dialog #32770 Зависание

Сообщение JohnK » 27.07.2009 (Пн) 17:54

Не пробывал, я решил задачу так:
Код: Выделить всё
        ret_tmp = FindWindowEx(ret, 0&, "Button", "OK")
        SetActiveWindow ret_tmp
        PostMessage ret_tmp, WM_LBUTTONDOWN, MK_LBUTTON, 0
        PostMessage ret_tmp, WM_LBUTTONUP, MK_LBUTTON, 0
        WaitFor (200)


Но все же вопрос остается открытым.
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

arvitaly
Постоялец
Постоялец
 
Сообщения: 485
Зарегистрирован: 12.04.2009 (Вс) 0:30
Откуда: Казань

Re: Dialog #32770 Зависание

Сообщение arvitaly » 27.07.2009 (Пн) 17:58

Ты же говорил у тя здесь подвисает
ret = FindWindow("#32770", "Ввод данных")


Естественно SendMessage ждет конца выполнения задания, в данном случае так как по нажатию открывается диалоговое окно - закрытие диалогового окна

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Dialog #32770 Зависание

Сообщение JohnK » 27.07.2009 (Пн) 22:16

Просто я думал, что подвисает при поиске окна. Оказывается подвисает из-за первой команды нажатия кнопки.
Получается что PostMessage не ждет ответа. Из-за этого различия я и промучился... Раньше на это не обращал внимания. И главное что меня ввело в заблуждение, так это то, что при нажатии на кнопку, которая закрывает диалог все работает ок. А вот если нажать на кнопку, которая открывает новое окно, такое происходит. Век живи, век учись.

На данный момент нажатие делаю так:
Код: Выделить всё
Call SetActiveWindow(ret)
Call PostMessage(ret, WM_COMMAND, CLng(ButtonOK + &HF5 * 65536), 0&)


Спасибо всем за помощь.
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty


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

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

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 28

    TopList