Войти

Показать полную графическую версию : Visual Basic 2008


Страниц : 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Admiral
02-05-2008, 21:08
Компонент называется WebBrouser, находится уже на палитре.
Для vb6 приходилось подгружать Microsoft Internet Control с файла windows\system32\shdocvm.dll
Далее для VB6го -> http://www.trap17.com/index.php/how-make-web-browser_t31604.html

В проге делаешь окно Браузера и туда страницу грузить можно, но можно и текстовое но тогда страницу необходимо будет парсить, выдирать только текстовую информацию, или даже нужные слова.

Насчёт браузера ещё один абзац, мало того проги на VB2008 полностью зависят от работоспособности .NET платформы и всех заплаток к ней, нужно теперь будет учитывать что безопасность будет зависеть и от патчей к IE, именно на её движке работает этот компонент.

Насчёт таймера не очень считается надёжным решением, лучше всё таки найти функцию срабатывания, а то выходит что прога тормиш систему и комп каждые 10 милисекунд. Нужно обязательно проверить в таск менеджере на наличие всплесков.
Хотя должен сказать, что таймер, если не знаешь когда событие должно произойти, кстати называется именно событие, а действие уже на это событие вешать можно, порой очень даже выручает (http://forum.oszone.net/showthread.php?t=29682&highlight=%F2%E0%E9%EC%E5%F0) в качестве проверки.

Средства операций с реестром в VB6м были очень ограничены, и разрешали доступ к HKEY_CURRENT_USER\Software\VB and VBA Program Settings с помощью АПИ можно было и весь реестр проработать но для этого знаний только VB6 было явно недостаточно. Выкручивались даже через shell(“Regedit /s nastroyki.reg”), пока с АПИ не были знакомы.
В VB2008м ограничения на работу с реестром ставит только рационализм кодера, всё организовано через объект
My.Computer.Registry
Например так, прикинемся старинной прогой, написанной на VB6 и сохранимся в заповедном месте My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\VB and VBA Program Settings\MyApp", "Version", "1")
По удалению My.Computer.Registry.LocalMachine. предлагает на выбор три способа по соответствующему назначению DeleteSubKey, DeleteSubKeyTree, DeleteValue

Читать можно так

Dim readValue As Object
readValue = My.Computer.Registry.GetValue _
("HKEY_CURRENT_USER\Software\MyApp", "Name", Nothing)
MsgBox("The value is " & CStr(readValue))

*со справка по Visual Basic 2008 Express

Uzvern
02-05-2008, 23:57
В проге делаешь окно Браузера и туда страницу грузить можно, но можно и текстовое но тогда страницу необходимо будет парсить, выдирать только текстовую информацию, или даже нужные слова. »

Во. это то что нужно! Скажи как это сделать плз, особенно получше про "или даже нужные слова" желательно на примере (сделать проект и залить его сюда) :happy:
Да, и что такое "парсить"? :)

Admiral
03-05-2008, 00:29
Текстовое поле не сообразит, если мы его натравим на сайт. Сайт необходимо загрузить в WebBrouser и с него повытягивать нужную текстовую информацию. Этот процесс можно назвать одним словом - парсить. В Интернете у слова парсить другая слава - вытягивать с форумов, блогов, чатов и т.д. нужную инфу ботам (е-мейлы, пароли, номера кредиток и т.д.), поисковым ботам (линки из ещё не модерируемых участков) и другим.
Про браузер, правда без парсинга, есть хорошая статья в журнале Хакер "Осел на службе людей: IE для программиста" (http://www.xakep.ru/magazine/xa/061/default.asp)
К сожалению, она в он-лайн режиме недоступна, так что прийдётся смотреть её в офф-лайн PDF (http://www.xakep.ru/magazine/xa/061/xa_061.pdf)
Расписан принцип браузеро строения, компонент имеет теже свойства, так что переписать для VB2008 не составит большого труда.

А во парсинг уже дело не тривиальное.

Uzvern
03-05-2008, 00:50
Как прочту, сразу все мысли сюды выложу + надо бы с парсингом разобраться...

Admiral
03-05-2008, 01:08
Тема не новая, она уже выходит за рамки этой, озвучивалась в названиях следующих тем
Regexp java или иной библиотеки для парсинга HTML (http://forum.oszone.net/thread-103567.html)
[решено] строковой парсинг (http://forum.oszone.net/thread-102492.html)

Есть ещё темы, в которых она обсуждалась. Поиск поможет найти подходящюю тему.

Uzvern
03-05-2008, 11:59
Хм..если я правильно понял, то можно сделать так : RichTextBox1.Text = WebBrowser1.DocumentText

Вообщем вот что у меня получилось из прочитаной статьи. Осталось только поянт как сделать проверку на определенное словосочетание или слово.

Uzvern
03-05-2008, 19:22
e.KeyChar что это значит и какие ещё бывают?

Uzvern
03-05-2008, 19:43
Блин, немогу поонять как сделать проверку в тексе на какое-то определенное слово (словосочетание) + надо сделать чтобы он искал это слово сочетание + какое-то определенное кол-во симолов, например читал все до словосочетания/слова : " после этого слова ничего не читается!" или определенное количество символов.

Admiral
03-05-2008, 19:48
Нововведение VB.NET: e это структура, как я понял, объявленная где то в недрах .NET, которая в зависимости от применения к определённому объекту даёт, вернее передаёт, разные параметры.
Самое простое это после e поставить точку, среда сама предоставит разные параметры и какие доступны в текущей ситуацыи.
Посмотрим на код в 19 посту (http://forum.oszone.net/post-792742-19.html):
на VB6 было так
Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
...
End Sub »
вроди всё устраивало всех, но увидев в VB.NET структурный способ передачи (в e в данном случаю передаётся X As Single, Y As Single)


Private Sub Label1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseMove
...
End Sub »
понимаешь на сколько это упростила жизнь при работу со сложными объектами и т.д.

Самое простое организовать цикл и проверять там символ к символу, слово к слову, а то и вовсе словосочетание.

Uzvern
03-05-2008, 20:05
Самое простое организовать цикл и проверять там символ к символу, слово к слову, а то и вовсе словосочетание. »

Ну хотябы как это сделать?

Я чет вообще втыкнуь немогу. уже пробовал, но чет нифига не получается :(

Admiral
04-05-2008, 02:39
Эх... Цикл немного старый подход к сему. Я тут почитав малёк набрёл что неплохо бы задействовать свойство WebBrowser1.Document.

Кстати в апрельском номере хакера, в интерннете ещё нету, в статье "Щелкаю за бабло!" рассмотрим принцип автоматического клика C# через объект WebBrowser.

В конце статьи написано что неплохо бы написать html парсер, так что розрулив его и написав можно смело ставать автором в следующем выпуске, отправив им свою статью и прогу.

В статье приводится ссылка, может быть полезной. WebBrowserControl Автор: Олег Михайлик (http://rsdn.ru/article/files/dotnet/WebBrowser.xml)
По C# но тем не менее, способ работы с WebBrowser1 идентичен.

Uzvern
04-05-2008, 11:02
Так, с поиском мне помогли :
Dim q1 = RichTextBox1.Find("<a")
Dim q2 = RichTextBox1.Find("</a>")
Dim qq = q2 - q1
MsgBox(q1 & Chr(13) & q2 & Chr(13) & qq)

ТОесьт он вычисялет с какого символа начинаеться тег ("<a"), потом вычисляет с какого начинается ("</a>"), вычитает их и получается число символов между ними. дак вот мне нужно сделать чтобы он эти символы выводил.

Uzvern
04-05-2008, 17:07
Либо можно использовать InStr и InStrRev (поиск группы символов )с начала и с конца строки, только непонятно как он работает, хотя нет. Похоже что он работает так же как и Find

Uzvern
04-05-2008, 19:58
Возможно тут какраз подойдет построчное чтение + чтение с определенного байта по определенный байт, только как это организовать?

Uzvern
04-05-2008, 20:43
Понял. можно при помощи функции Mid сделать чтение, ток вот щас пробую это как-то организовать....

Admiral
04-05-2008, 20:48
Я бы копал в сторону WebBrowser1.Document.GetElementsByTagName("a").
Код читает документ и находит все теги на а. Например <a> </a>.

P.S.
Не нужно подряд писать: пост за постом от себя. Отредактировать посты так, что б инфа была в одном, а то могут наказать.

Uzvern
04-05-2008, 20:57
Admiral, понял, будем копать.

P.S.
Не нужно подряд писать: пост за постом от себя. Отредактировать посты так, что б инфа была в одном, а то могут наказать. »
Учтем

Кстати, как-то можно отправлять данные на сервер и получать ответ?
просто надо сделать 2 текстовых поля, 1 кнопку. Вводишь логин, пароль, жмешь кнопарь и он отправляет запрос на сервер , а м ы в свою очередь получаем ответ от сервера. Я так демаю если в текстовое поле ввобдишь текст, то в WebBrower он тоже должен меняться, т.е. как я понял нужно происывать это в код страницы. Это все реально сделать, только поянть немогу как сделать чтобы он отправлял значения на сервер при нажатии на кнопку?!

Вообщем обычная функция авторизации, только не на самой странице, а в программе, которая в свою очередь отправляет запрос.

Admiral
04-05-2008, 21:14
Всё реально сделать, но это ещё более широкая тема. Тут уже надо знать и уметь работать с POST и GET методами. WebBrowser это клиентская утилита, код можно изменять, но это будет локальные изменения. Как примерно работать можно узнать из статьи про взаимодействие Delphi и PHP LiveUpdate в X-стиле (http://www.xakep.ru/magazine/xa/071/106/1.asp)
Для начала нужно у себя поднять сервер того типа, который требуется для авторизации. Это можно сделать на рабочей машине или виртуалку специально для этого подогнать, так сказать для тренировок.
Кстати, с Бейсиком 2008 Експресс, идёт 2005й SQL сервер Експресс.

Uzvern
05-05-2008, 16:02
вообщем необходимо организовать проверку в ComboBox, т.е. в нем например 10 значений (цифры от 10 до 100). Если в вводят текст, то он автоматически ищет существует ли данное значение в ComboBox, если существует, то он выводит похожие результаты, вообщем обычная система атозаполнения.

Admiral
05-05-2008, 18:27
Идея следующая
Dim AllText As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For i As Integer = 10 To 100 Step 10
ComboBox1.Items.Add(i)
Next i
End Sub

Private Sub ComboBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ComboBox1.KeyPress
AllText = AllText & e.KeyChar
Dim i As Integer = 0
While i < ComboBox1.Items.Count
If AllText = ComboBox1.Items.Item(i) Then
MsgBox("Present")
End If
i = i + 1
End While
ComboBox1.Text = AllText
End Sub
это имено идея, а не реализация так как код слишком чуствителен к клавишам. Пару БекСпейсов и приложение в ауте.




© OSzone.net 2001-2012