Обновить окно IE. Очень срочно нужна помощь. Вилы...

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

Обновить окно IE. Очень срочно нужна помощь. Вилы...

Сообщение Kepmann » 18.06.2005 (Сб) 14:44

Сабж.
Надо обновить окно ИнтернетИспортила. Хендл я знаю. По сути, надо отправить ему нажатие F5. Но как сделать не пойму.

Помогите пожалуйста...

Видимо надо заюзать sendmessage, но как не знаю.
К тому же нужно сделать это не в активном окне, чтоб обновленное, желательно не становилось активным.
Главное, чтобы обновлять окно IE, не делая его перед этим активным.

Надо срочно сделать прогу, а я давно не программил и книг под рукой нет.


Клянусь, как сделаю, нткогда больше не буду забивать на родной VB. :oops:

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

Сообщение GSerg » 18.06.2005 (Сб) 15:08

Ищи...
Ищи пример под названием IE Spy...
Когда найдёшь, там всё понятно...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 18.06.2005 (Сб) 15:36

Трабл в том, что я уже двое суток (не дней а именно суток) ищу эту инфу - начинаю по-тихоньку сходить с ума...

В принципе, фиолетово совершенно, что это окно именно IE, важен сам принцип обновления окна. Там по хендлу надо отправить sendmessage WM_REFRESH... или нажатие F5.

Пожалуйста, дайте одну строчку кода - а то заплачу... хнык-хнык

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

Сообщение ANDLL » 18.06.2005 (Сб) 16:27

SendMessage(hwnd,WM_KEYDOWN,vbKeyF5,0)...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 18.06.2005 (Сб) 16:34

Не помогает... 8(
Или может такое можно только активному окну посылать?

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 18.06.2005 (Сб) 16:42

Хотя и с активным окном не работает... 8(

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 18.06.2005 (Сб) 17:08

Получить окно IE можно без поиска окон, не по hwnd...подключаешь MSHTML к проекту, и там есть класс, точно не помню, что-то вроде WindowsList. В нём все открытые окна IE и обычного эксплорера. Сверяешь хэндел, потом получаешь из этого окна документ, и делаешь refresh..=)

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 18.06.2005 (Сб) 17:14

Блин, я раньше делал так, как и сейчас хочу, но блин, не получается... Давно не занимался!

2Крост
Проще с бубном потанцевать - такие извращения не выход...


sendmessage прекрасно должен справляться.

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 18.06.2005 (Сб) 17:17

иди танцуй с бубном. Это не извращения, а самый простой вариант.

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 18.06.2005 (Сб) 17:20

SendMessage(hwnd,WM_KEYDOWN,vbKeyF5,0)...

Вот это - нормальный вариант, вот только не работает почему-то.
Может надо значение константы прописывать?

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

Сообщение ANDLL » 18.06.2005 (Сб) 17:24

В смысле? Напиши в начале своей формы Option Explicit.
И еще: ты надеюсь не hWnd писал в своей программе? Вместо hWnd надо указать hWnd именно окна IE(его омжно найти с помощью FincWindow или EnumWindows)
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 18.06.2005 (Сб) 17:31

:lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:
:lol: :lol: :lol:

Да я не тупой... Я в проге штук десять апишек юзаю, естественно sendmessage описал, конечно подставляю хендл нужного окна... :wink:

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

Сообщение ANDLL » 18.06.2005 (Сб) 17:43

Попробуй
а) Заменить на KEYUP
б) Поставить lParam=1
в) В объявлении API-функции должно быть ByVal lParam as Long и никак иначе.
Что ты имел ввиду, говоря "Может надо значение константы прописывать"
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 18.06.2005 (Сб) 17:49


Const WM_SYSCOMMAND = &H112
Const SC_SCREENSAVE = &HF140&

SendMessage hwnd, WM_SYSCOMMAND, SC_SCREENSAVE, ByVal 0&

Это пример из АПИгид... Вот сдесь заранее прописываются значения констант.

Сейчас буду пробовать твои советы

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

Сообщение ANDLL » 18.06.2005 (Сб) 18:15

Приведи-ка свой код...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 18.06.2005 (Сб) 18:46

Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As Any) As Long

retval = SendMessage(FindWindow(vbNullString, "Имя страницы - Microsoft Internet Explorer"), WM_KEYDOWN, vbKeyF5,0)


Вот как-то так...

Попробовал твои рекомендации - не помогло... 8(

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

Сообщение ANDLL » 18.06.2005 (Сб) 20:00

И Option Explicit написал?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 18.06.2005 (Сб) 20:23

Написал... все равно не рефрешится :?

vbKeyF5
Это точно так?

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 18.06.2005 (Сб) 20:34

ANDLL
Извини но каким образом включение режима проверки объявленности всех переменных может помочь :shock: :shock: :shock:
Если всё делать своими ручками, они скоро отвалятся !

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 18.06.2005 (Сб) 20:50

ANDLL
Извини но каким образом включение режима проверки объявленности всех переменных может помочь


Это помогло, только в другом месте проги, в котором забыл обьявить... 8)
Но в нужном месте не помогло...

А вообще совет был хороший. Ведь при юзаньи АПИ VB не ругается на переменные необьявленные, а апишки не пашут...

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

Сообщение ANDLL » 18.06.2005 (Сб) 21:09

2Kovu: Помогает, если забываешь объявить какую-то константу. Если Option Explicit нету, то вызов API-функции не приведет к ошибке, но и не приведет к нужному результату. Вообще, список чудес, которые могут быть вызваны использованием необъявленых переменных широк и весьма занимателен :) .
Просто, в приведеннном Kepmann'ом коде не объявлена константа WM_KEYDOWN. У меня было подозрение, что она вообще нигде не объявлена.
2Kepmann: Посмотри, что возвращает SendMessage и FindWindow.
Первое должно возвращать 0, второе - не ноль.
В общем, завтра постараюсь разобраться.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 18.06.2005 (Сб) 21:10

Да просто я не все копировал, забыл ее сюда сунуть, та то она есть (WM_KEYDOWN)

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 18.06.2005 (Сб) 22:02

Посмотри, что возвращает SendMessage и FindWindow.
Первое должно возвращать 0, второе - не ноль.


Так и есть.

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

Сообщение ANDLL » 19.06.2005 (Вс) 11:10

Код: Выделить всё
Dim hExplorerWnd As Long
hExplorerWnd = 'Сам находишь нужное тебе окно
Dim hChildSHDocVw As Long
hChildSHDocVw = FindWindowEx(hExplorerWnd, 0, "Shell DocObject View", vbNullString)
PostMessage hChildSHDocVw, WM_KEYDOWN, vbKeyF5, 0

SendMessage не работает... Интересно, почему...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 19.06.2005 (Вс) 12:58

Вот и мне интересно... Вчера друг насмсил тоо же самое про sendmessage (а у него опыт VB приличный)...

Не работает и все!

C postmessage - все ок!!!
Огромное спасибо!!!!
:wink:

Но хочется с sendmessagem разобраться... 8(
Ну пока пост поюзаю - и то гуд...

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 19.06.2005 (Вс) 13:03

2 Kepmann: Извиняюсь, что не по теме. А может пересмотреть задачу ? Обязательно обновлять именно окно IE ? Может написать свой код обращения к странице.

http://bbs.vbstreets.ru/viewtopic.php?t ... ht=alx2002

В конце поста простой пример на одних API.

Тогда вообще никаких окон не понадобится.

P.S Поделись траблом - почему именно IE мучать нужно ? :wink: :D

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

Сообщение ANDLL » 19.06.2005 (Вс) 15:13

2Kepmann:SendMessage и PostMessage работают по разным принципам(если интересно, можешь почитать в MSDN). так что если SendMessage не работает, то нечего с ним и разбираться...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 19.06.2005 (Вс) 15:54

почитать в MSDN

дык читал уже, поэтому и хотел заюзать именно sendmessage

Да еще когда искал инфу, нашел семпл из Дельфей, в котором sendmessage используется для обновления именно таким образом как хотел, но в VB как-то не пашет.

В МСДН, насколько я помню, сказано, что использование postmessage менее надежно, чем sendmessage...

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

Сообщение ANDLL » 19.06.2005 (Вс) 16:51

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

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 20.06.2005 (Пн) 12:26

The PostMessage function places (posts) a message in the message queue associated with the thread that created the specified window and then returns without waiting for the thread to process the message. Messages in a message queue are retrieved by calls to the GetMessage or PeekMessage function.
Ты подразумеваешь под надёжностью возврат результата ?
If you send a message in the range below WM_USER to the asynchronous message functions (PostMessage, SendNotifyMessage, and SendMessageCallback), its message parameters can not include pointers. Otherwise, the operation will fail. The functions will return before the receiving thread has had a chance to process the message and the sender will free the memory before it is used.
или это ? :shock:
Если всё делать своими ручками, они скоро отвалятся !

След.

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

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

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

    TopList