Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Visual Basic: новости сайтов, советы, примеры кодов. Выпуск 251.


Информационный Канал Subscribe.Ru

Visual Basic: новости сайтов, советы, примеры кодов.
Выпуск 251.


VBNet VBMania
Ссылки:

  • Улицы VB
  • Использование VB
  • Азбука VB
  • VB на русском
  • Улицы VB
  • Кирпичики VB
  • CообЧа VB
  • MDesign
  • IgorykSoft
  • DanSoft
  • Господа!!! читайте MSDN!!!

    Несколько слов от автора:

       Наисвежайший выпуск рассылки!
    Читайте!


    Содержание выпуска




    Как сделать так, чтобы моя MDI-форма была на весь экран?

    Вопрос:

    Как сделать так, чтобы моя MDI-форма была на весь экран(подчёркиваю, не простая форма, а MDI-форма)? Пробую вот так, но не выходит:

    MDIForm1.Move 0,0,screem.Width,screen.Height

    может быть это можно сделать как-нибудь через функции API?

    Ответ:

    lngTemp=SetWindowPos(hwnd, HWND_TOPMOST, 0,0, _
    screen.width/screen.TwipsPerPixelX,screen.height/screen.TwipsPerPixelY,0)

        Артем Кривокрисенко

    наверх


    Как отловить момент премещения пользователя на следующую строку грида?

    Вопрос:

    Есть прога на VB6. На форме Datagrid. Как отловить момент премещения пользователя на следующую строку грида? Какое событие при это генерируется?

    Ответ:

    Может я чего-то не понял в вопросе... Но всегда было событие RowColChange

        Сергей Л.

    наверх


    Что нужно использовать для отображения большого количества фотографий?

    Вопрос:

    Может быть кто подскажет, что мне применять в моей проге, если при каких-то либо действиях мне необходимо отображать много фоток?

    Ответ:

    Либо ListView, либо PictureBox. Желательно юзать АПИ.

        Артем Кривокрисенко

    наверх


    Какой контрол может проигрывать видеофайлы?

    Вопрос:

    У кого-нибудь есть OCX который бы проигрывал avi-файлы, WindowsMediaPlayer не предлагать?

    Ответ:

    Microsoft Multimedia Control

    У него есть свойство hWndDisplay. Там указывается hwnd окна, в котором
    будет играться файл. Это может также быть и hwnd PictureBox'а

    А пользоваться им примерно также, как и WindowsMediaPlayer

        Артем Кривокрисенко

    Группа MS Windows Common Controls - 2
    Microsoft Animation Control


        Алексей Вишневский

    наверх


    Как правильно удалять записи?

    Вопрос:

    Подскажите, где я не прав:

    With DataEnvironment1.rsCommand1
       .MoveFirst
       Do While Not .EOF
          .Delete
          .MoveNext
       Loop
       .Requery
    End With

    Выдает ошибку если одна запись или ее нет. Как грамотно написать?

    Ответ:

    AdoConn.Execute "delete from table_name",,adExecuteNoRecords

        Vladimir Petrov

    Ты не прав в от здесь: .MoveNext
    Delete удаляет строку и все записи смещаются на 1 вверх. Так что, если у тебя 1 или 2 записи, то при Delete у тебя убивается 1-я, активной становится вторая(или .EOF), а .MoveNext пытается переместить указатель дальше. А куда?

        Рязанов Андрей



    наверх


    Вопрос/Ответ

    Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы.

    Вопросы:


    Автор вопроса: Роман

    Ответ ожидается по этому адресу

       Изменил размер шрифтов на крупный (В настройках дисплея). Теперь проги отображаются неправильно. Как узнать размер шрифта? Через GetSystemMetrics я ничего не нашел.


    Автор вопроса: Андрей

    Ответ ожидается по этому адресу

       Я уже обращался яа помощью, но так ответа и не получил. Проблема в том, что прога под Turbo Pascal записывает переменные в BIN файл, структуру которого я уже разобрал и понял. Но проблемма в том, что некоторые данные типа REAL, можно ли используя только VB или библиотеки Delphi считывать и записывать данные в том же формате? :( А то всюда пишут, что REAL (6 байт) есть только в Паскале).


    Автор вопроса: C...R...a...S...H

    Ответ ожидается по этому адресу

       Как мне перебрать все возможные пары, тройки и т.д. из двух значений?
    Пример:

    A={A,B}
    B={1,2}

    Ответ:

    -
    A1
    A2
    A12
    A1B1
    A1B2
    A1B12
    A2B1
    A2B2
    A2B12
    A12B1
    A12B2
    B1
    B2
    B12

    В таком духе для n мерных массивов. Подкинте идею насчет алгоритма.


    Автор вопроса: Creator

    Ответ ожидается по этому адресу

       Как сделать наподобие, как это сделано в TreeView?
    Там если строка уходит за предел, то выскакивает ToolTipText не выше, не ниже, а на той же высоте и отображает строку по всей длине, хоть на весь экран.
    Как проделать такое над обычным лейблом или текстбоксом - ума не приложу... Обычный ToolTipText работает, только отображает ниже и не мгновенно.


    Автор вопроса: ∙Creator∙

    Ответ ожидается по этому адресу

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


    Автор вопроса: Котофей

    Ответ ожидается по этому адресу

       Имеется Richtextbox. Как можно сделать быструю подсветку тэгов html? Я выделяю весь текст и нахожу их последовательно, что довольно долго при больших страничках.


    Автор вопроса: Котофей

    Ответ ожидается по этому адресу

       Делаю html редактор. C помошью common dialog делаю выбор цвета и перевожу с помошью hex() в 16-ую систему. Но код цвета состоит почему-то ия трех, четрыех и т.д количества раярядов, а html требует обяяательно шесть раярядов. Что можно сделать, если поняли о чем речь?




    Ответы:


    Вопрос:

       Что-то я не въехал (это наверно от большого ума), всё говорят о каких-то инсталяторах, без которых ничего не работает. А что, просто экзешник нельзя создать и радоваться жизни?

    Ответ:

    Автор ответа: Anakonda

    MSVBVM60.DLL есть у большинства. В современных виндах он идёт в комплекте. Я не припомню чтобы у кого-то из знакомых моя прога не заработала... Если человек устанавливает более-менее много программ, то среди них всё равно окажутся написанные на VB, с этой библой в комплекте. К тому же она входит в комплект Microsoft Office. А уж он то мало у кого отсутствует :)

    Про Active-X: тут действительно большая проблема, так как их почти ни у кого нет (разьве что у программистов на VB). Поэтому я стараюсь их не использовать (и практически не использую), но если сильно надо, то лучше использовать инсталятор...


    Вопрос:

       Private Sub Command1_Click()
    Open "c:\1.txt" For Append As #1
    Write #1, "text"
    Close #1
    End Sub

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

    Ответ:

    Автор ответа: Anakonda

    Очень просто: ты открываешь его для дополнения в конец - "Append". Если будешь открывать для "Output", то будешь писать не в конец, а вместо. В общем учи фиглиш, пригодится :)


    Вопрос:

       Как сгенерировать случайное число, состоящее из 5 чисел, все из которых будут единицы или нули?

    Ответ:

    Автор ответа: Роман

    int(rnd+.5)



    Ответ:

    Автор ответа: Кулаков Алексей

    Можно попробовать сгенерировать обычное число, а затем преобразовывать его в двоичное.


    Вопрос:

       Как перезагрузить\выключить компьютер программно в XP?

    Ответ:

    Автор ответа: Белашин

    Разместите в модуле:

        Public Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, _ByVal dwReserved As Long) As Long

        Public Const EWX_LOGOFF = 0
        Public Const EWX_SHUTDOWN = 1
        Public Const EWX_REBOOT = 2
        Public Const EWX_FORCE = 4

    А это в коде:
        Dim s As Long

        'Так можно сделать Shut down
         s = ExitWindowsEx(EWX_SHUTDOWN, 0&)

        'Так можно сделать Log off
        s = ExitWindowsEx(EWX_LOGOFF, 0&)

        'А так Reboot
        s = ExitWindowsEx(EWX_REBOOT, 0&



    Ответ:

    Автор ответа: Bullet [PCLO]

    Да в принципе так же, как и в 98. Делаешь следующее:

    Public Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
    Public Const EWX_FORCE = 4
    Public Const EWX_LOGOFF = 0
    Public Const EWX_REBOOT = 2
    Public Const EWX_SHUTDOWN = 1

    В теле программы вызываешь так:

    iRet = ExitWindowsEx(EWX_LOGOFF, 0&)
    или
    iRet = ExitWindowsEx(EWX_SHUTDOWN, 0&)
    или
    iRet = ExitWindowsEx(EWX_REBOOT, 0&)
    ...

    По крайней мере в 2000 проверял, все работает. Должно и в ХР сработать.



    Вопрос:

       Label1.caption = "somename@somehost.ru".

    Как при клике на Label1 запустить почтовую прогу по умолчанию и писать письмо на этот e-mail?

    Ответ:

    Автор ответа: Сан Саныч

    Примерно так:

    Public Declare Function ShellExecute& Lib "shell32" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long)

    Private Sub Label1_Click()
    Call ShellExecute(0, "Open", "mailto:2San%20", vbNullString, vbNullString, 1)
    End Sub



    Ответ:

    Автор ответа: Артем Кривокрисенко

    Используй функцию ShellExecute:

    ShellExecute hwnd, "open", "mailto:BillGates@microsoft.com", 0, 0, SW_SHOWNORMAL



    Ответ:

    Автор ответа: Виталий

    Это делается командной строкой:

    ShellExecute Me.hwnd, vbNullString, "mailto:" & Label1, vbNullString, "C:\", 1

    Только сначала в форме объяви АПИ:

    Private Declare Function ShellExecute Lib "shell32.dll" Alias _
    "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal _
    lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As _
    String, ByVal nShowCmd As Long) As Long



    Ответ:

    Автор ответа: Bullet [PCLO]

    И не только на почту, но и на сайт тоже...

    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

    ' E-Mail
    Private Sub lblEmail_Click()
         Dim iret As Long
         iret = ShellExecute(Me.hwnd, vbNullString, "mailto: somename@somehost.ru", vbNullString, "c:\", 1)
    End Sub

    ' WWW
    Private Sub lblWww_Click()
         Dim iret As Long
         iret = ShellExecute(Me.hwnd, vbNullString, "http://www.somehost.ru", vbNullString, "c:\", 1)
    End Sub



    Ответ:

    Автор ответа: Виктор

    Это делается командной строкой:

    ShellExecute Me.hwnd, vbNullString, "mailto:" & Label1, vbNullString, "C:\", 1


    Вопрос:

       Подскажите, как в VB реализовать указанную функцию.

    Сделана на VC как DLL и работает.

    Хотелось бы иметь возможность делать подобные манипуляции на VB.

    // функция преобразования 4 байт в число Float
    Float Convert(charљ b1,char b2,char b3, char b4)
    {
    char Buff[4];
    float *pVal, Val;
    Buff[0]= b1;
    Buff[1]= b2;
    Buff[2]= b3;
    Buff[3]= b4;
    pVal=(float *)Buff;
    Val=*pVal;
    return (Val);
    }

    Ответ:

    Автор ответа: Арамян Арам

    Можно скомпилировать VC функцию как библилтеку (или как ActiveX), а потом подключить к Бейсику Project/Components...



    Ответ:

    Автор ответа: Neco

    Жуть!

    dim f as single ' так понимаю float?
    dim s as string
    f=CSng(s)

    Не правда ли удобней? 8)


    Вопрос:

       Есть прога (исходник), которая показывает список всех запущенных задач (типа как Ctrl+Alt+DeL => Диспетчер задач => Процессы).
    Как сделать так, чтобы отображались только запущенные приложения (типа как Ctrl+Alt+DeL => Диспетчер задач =>Приложения)?
    Кто хочет протестировать или просто интересен код - пишите, скину на личку.

    Ответ:

    Автор ответа: Сан Саныч

    Надо проверять каждый обнаруженый процесс на видимость породившего его окна вот этой АПИ ф-ией:

    Private Declare Function IsWindowVisible Lib "user32.dll" (ByVal hwnd As Long) As Long


    Вопрос:

       Срочно нужна библиотека inpout32.dll. Может кто подкинет или ссылку даст.

    Ответ:

    Автор ответа: Сан Саныч

    Задай в гугле поиск:

    http://www.google.com/search?q=inpout32.dll&sourceid=opera&num=100&ie=utf-8&oe=utf-8

    он наверняка даст ссылку на архив с этой библиотекой.



    Ответ:

    Автор ответа: Matrix

    http://www.vbnet.ru/sample/sampledownload.asp?id=17
    ftp://ftp.mathworks.com/pub/tech-support/mlibrodo/printer/inpout32.zip


    Вопрос:

       Как поместить свою программу на сайт (в смысле не для того чтобы её можно было скачать, а для того чтобы она там работала) средствами VB 6.0?

    Ответ:

    Автор ответа: Арамян Арам

    Ты имеешь ввиду, она должна работать как CGI-скрипт?



    Ответ:

    Автор ответа: Артем Меняйленко

    В зависимости от сервера, где думаешь разместить и особенностей самой проги, надо создавать DHTML Application, ActiveX Document, ActiveX или IIS Application.



    Ответ:

    Автор ответа: Her Кудрявцев

    Для того, чтоб запускать испоняемые программы на сервере нужно иметь на это разрешение администрации этого сервера. Как правило, администрация берет вашу программу на анализ (с предоставленим исходных кодов) и если дает согласие (не бесплатно в оснавном) разрешает выполнение вашей программы на сервере. Проще и удобнее писать на PHP или ASP и размещать свой сайт на сервере, который поддерживает эти технологии...


    Вопрос:

       Куда надо помещать *.dll файлы и куда *.ocx файлы при переносе проги на другой комп? Могут ли это делать компиляторы?

    Ответ:

    Автор ответа: Александр Юрьевич

    Файлы *.ocx и *.dll нужно копировать либо в системный каталог, либо в каталог с прогой.
    И еще...
    Файлы *.ocx нужно регистрировать и *.dll тоже, если они написаны на VB. Компиляторы этого делать не могут. Это могут делать установщики.



    Ответ:

    Автор ответа: C...R...a...S...H

    Помешай все в корневой каталог программы, не промахнешься.



    Ответ:

    Автор ответа: Александр Паршин

    Куда хочешь и вставь, но не забывай зарегистрировать компоненты. Например:

    regsvr32 путь_каталога\*.dll или *.ocx

    А если хочешь отрегистрировать, то regsvr32 путь_каталога\*.dll или *.ocx /u.



    Ответ:

    Автор ответа: Her Кудрявцев

    Компиляторы - нет, а инсталяторы - да. Простые проги могут работать и без переноса dll и ocx, просто перепиши прогу на другой комп и работай...



    Ответ:

    Автор ответа: Куприянов Дмитрий

    Не важно, куда помещать, главное зарегистрировать. А делать это умеют не компиляторы, а инсталяторы.


    Вопрос:

       Как сделать плагин? Как его подключать?

    Ответ:

    Автор ответа: Куприянов Дмитрий

    Плагин к чему? Если к Office'у, то в VB есть заготовка Addin. В ней же выбиреатся нужное приложение. А пдключаются плагины (к Офису) при помощи реестра.



    Ответ:

    Автор ответа: Markelov

    А плагин-то для чего?
    Если для винампа, то лезь на www.winamp.com, там есть все нужные SDK, даже с сэмплами.


    Вопрос:

       Как то в выпуске 89 был код: "Kак убрать программу из списка Ctrl+Alt+Del".
    В Win95-98 он идет а, на ХР выдает ошибку во время выполнения прграммы '453'. Не может найти DLL точку входа RegisterServiceProcess в kernel32.

    Private Declare Function RegisterServiceProcess Lib "kernel32" (ByVal ProcessID As Long, ByVal ServiceFlags As Long) As Long
    Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
    Private Sub Form_Load()
    RegisterServiceProcess GetCurrentProcessId, 1 'Hide app
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
    RegisterServiceProcess GetCurrentProcessId, 0 'Remove service flag
    End Sub

    Ответ:

    Автор ответа: Роман

    API-функция RegisterServiceProcess не поддерживается NT-системами. Способа скрыть программу из диспетчера я не знаю. Ранее кто-то кинул мысль о том, чтобы скрыть программу в потоке Explorer'a, но я никакой инфы об этом не нашел.



    Ответ:

    Автор ответа: Тоша

    И не найдет. :) В WinXP-2000 этой функции нету! Системы более "защищенные" :) Но прогу убрать можно из Диспечера Задач, и поместить ее в процессы Windows (вторая вкладка).



    Ответ:

    Автор ответа: Neco

    По RegisterService:
    Этой функции нет в kernel32.dll, прилагаемой к XP. Следовательно и воспользоваться ею не получится. 8(
    Насчёт скрытия:
    ИМХО, XP'шка показывает всё, что есть. Даже сервисы. Плюс к этому организовать сервис на XP - сплошной гимор. Я слышал теории о том, что можно подменить листбокс, который показывает диспетчер задач, но:

    1. Любой другой менеджер раскусит твою прогу.
    2. Я сам этого не делал и не видел готового кода для выполнения этого
    трюка.
    3. Такой способ может не работать незаметно (мерцание и прочая
    лажа)...

    По-моему более реально найти способ сделать свою прогу критическим процессом - стандартный менеджер её не закроет. Чтобы не мучаться, можешь назвать свою прогу csrss.exe и тогда недогадливый юзер её не найдёт, догадливый - найдёт, но не сможет закрыть (критический процесс) и, наконец, гадливый юзер найдёт, запустит какой-нибудь левый софт (может даже свой) и закроет твою прогу... Ну, в общем к чему я, - не знаю я, что делать...



    Ответ:

    Автор ответа: Anakonda

    Ниже код, который скроет приложение из вкладки "Приложения", из вкладки "Процессы" убрать прогу невозможно... Только драйвера и библиотеки там не видны.
      
    app.TaskVisible=False
      
    Так же вызывай и ту функцию, а в начале ставь On error resume next. Так ты скроешь прогу в любых Виндах. Не слишком красиво, конечно, но работает.


    Вопрос:

       Подскажите пожалуста, такая проблема.

    Call Shell ("ping 195.14.50.1 -l 1500",,)

    if A = 0 then
    Beep
    end if

    Как мне получить в переменную "А", прошли пакеты или нет? Или подскажите, как проверить, работаетли компьютер в сети, зная его IP.

    Ответ:

    Автор ответа: Пащенко А.

    Если нужен непосредственно ping - вываливай результаты пинга в файл, потом анализируй.

    Если надо просто проверить, доступен ли компьютер в сети, можно постучать в какой-нибудь порт.

    Порты:
    Windows-машины - 135, 139
    Web-серверы - 80
    Почтовые серверы - 25, 110 (как показывает практика, лучше стучать в 25 порт, со 110-м бывают глюки)

    Если на удалённой машине открыт доступ по Telnet (по умолчанию на Linux-овых тачках) - 23

    Могу показать примеры.
    Заявки принимаются по адресу a.pashenko@mail.ru



    Ответ:

    Автор ответа: Тоша

    Надо собственную ping'овалку писать. Так ты никак не получишь! Используй для этого протокол echo, порт №7.



    Ответ:

    Автор ответа: Retupa

    'В модуль
    Private Declare Function InternetCheckConnection Lib "wininet.dll" Alias "InternetCheckConnectionA" (ByVal lpszUrl As String, ByVal dwFlags As Long, ByVal dwReserved As Long) As Long
    Private Const FLAG_ICC_FORCE_CONNECTION As Long = &H1
    Public Function GetInternetConnectStatus(ByRef strTarget As String) As Boolean
       On Error Resume Next
       If InternetCheckConnection(strTarget, FLAG_ICC_FORCE_CONNECTION, 0&) = 0 Then Exit Function
       GetInternetConnectStatus = True
    End Function

    'В форму
    Private Sub Command1_Click()
        if GetInternetConnectStatus("http://vbnet.ru/") then _
        Caption="Connect OK" else Caption="Connect Error"
    End Sub



    Ответ:

    Автор ответа: C...R...a...S...H

    Это можно сделать при помощи WinSock, у каждого компа, работающего под управлением win, есть спецальный порт (номер я не помню), который открыт
    для принга, если ты можешь к ниму подключиться, то значит комп в сети. Если нет, то нет. (Если я не ошибаюсь)



    Ответ:

    Автор ответа: Neco

    По пингу:
    Довольно нехороший способ, но надо делать:

    ping 128.0.0.1 >c:\1.txt

    потом открываешь файл и смотришь, что там да как...
    Но, имхо, лучше пинговать так:

    Public Function PingIP(ByVal WhatIP As String, Optional TTL As Byte = 1) As Boolean
    Dim hFile As Long '' handle for the icmp port opened
    Dim lRet As Long '' hold return values as required
    Dim lIPAddress As Long
    Dim strMessage As String
    Dim pOptions As ip_option_information
    Dim pReturn As icmp_echo_reply
    Dim iVal As Integer
    Dim lPingRet As Long
    Dim pWsaData As tagWSAData

    strMessage = "Echo this string of data"

    iVal = WSAStartup(&H101, pWsaData)

    '' convert the IP address to a long, lIPAddress will be zero
    '' if the function failed. Normally you wouldn''t ping if the address
    '' was no good to start with but we don''t mind seeing bad return status
    '' as that is what samples are all about
    lIPAddress = ConvertIPAddressToLong(WhatIP)

    '' open up a file handle for doing the ping
    hFile = IcmpCreateFile()

    '' set the TTL from the text box, try values of 1 to 255
    'pOptions.TTL = Val(TTL)
    pOptions.TTL = TTL


    '' Call the function that actually does the ping. It is a blocking call so we
    '' don''t get control back until it completes.
    lRet = IcmpSendEcho(hFile, lIPAddress, strMessage, Len(strMessage), pOptions, pReturn, Len(pReturn), PING_TIMEOUT)

    If lRet = 0 Then
         '' the ping failed for some reason, hopefully the error is in the return buffer
    ' lbReturn.AddItem "Ping failed with error " & pReturn.Status
    ' lbReturn.ListIndex = lbReturn.ListCount - 1
         PingIP = False
    Else
         '' the ping succeeded, .Status will be 0, .RoundTripTime is the time in ms for
         '' the ping to complete, .Data is the data returned (NULL terminated), .Address
         '' is the Ip address that actually replied, .DataSize is the size of the string in
         '' .Data
         If pReturn.Status <> 0 Then
    ' lbReturn.AddItem "Error -> Ping failed to complete, code = " & pReturn.Status
    ' lbReturn.ListIndex = lbReturn.ListCount - 1
             PingIP = False
         Else
    ' lbReturn.AddItem "Success -> completion time is " & pReturn.RoundTripTime & "ms."
    ' lbReturn.ListIndex = lbReturn.ListCount - 1
             PingIP = True
         End If
    End If

    '' close the file handle that was used
    lRet = IcmpCloseHandle(hFile)

    iVal = WSACleanup()

    End Function



    Ответ:

    Автор ответа: Сан Саныч

    Читай про IPHelper.
    А вообще для пинга есть такой код:

    Const SOCKET_ERROR = 0
    Private Type WSAdata
         wVersion As Integer
         wHighVersion As Integer
         szDescription(0 To 255) As Byte
         szSystemStatus(0 To 128) As Byte
         iMaxSockets As Integer
         iMaxUdpDg As Integer
         lpVendorInfo As Long
    End Type
    Private Type Hostent
         h_name As Long
         h_aliases As Long
         h_addrtype As Integer
         h_length As Integer
         h_addr_list As Long
    End Type
    Private Type IP_OPTION_INFORMATION
         TTL As Byte
         Tos As Byte
         Flags As Byte
         OptionsSize As Long
         OptionsData As String * 128
    End Type
    Private Type IP_ECHO_REPLY
         Address(0 To 3) As Byte
         Status As Long
         RoundTripTime As Long
         DataSize As Integer
         Reserved As Integer
         data As Long
         Options As IP_OPTION_INFORMATION
    End Type
    Private Declare Function GetHostByName Lib "wsock32.dll" Alias "gethostbyname" (ByVal HostName As String) As Long
    Private Declare Function WSAStartup Lib "wsock32.dll" (ByVal wVersionRequired&, lpWSAdata As WSAdata) As Long
    Private Declare Function WSACleanup Lib "wsock32.dll" () As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
    Private Declare Function IcmpCreateFile Lib "icmp.dll" () As Long
    Private Declare Function IcmpCloseHandle Lib "icmp.dll" (ByVal HANDLE As Long) As Boolean
    Private Declare Function IcmpSendEcho Lib "ICMP" (ByVal IcmpHandle As Long, ByVal DestAddress As Long, ByVal RequestData As String, ByVal RequestSize As Integer, RequestOptns As IP_OPTION_INFORMATION, ReplyBuffer As IP_ECHO_REPLY, ByVal ReplySize As Long, ByVal TimeOut As Long) As Boolean
    Private Sub Form_Load()
         'KPD-Team 2000
         'URL: http://www.allapi.net/
         'E-Mail: KPDTeam@Allapi.net
         Const HostName = "www.allapi.net"
         Dim hFile As Long, lpWSAdata As WSAdata
         Dim hHostent As Hostent, AddrList As Long
         Dim Address As Long, rIP As String
         Dim OptInfo As IP_OPTION_INFORMATION
         Dim EchoReply As IP_ECHO_REPLY
         Call WSAStartup(&H101, lpWSAdata)
         If GetHostByName(HostName + String(64 - Len(HostName), 0)) <> SOCKET_ERROR Then
             CopyMemory hHostent.h_name, ByVal GetHostByName(HostName + String(64 - Len(HostName), 0)), Len(hHostent)
             CopyMemory AddrList, ByVal hHostent.h_addr_list, 4
             CopyMemory Address, ByVal AddrList, 4
         End If
         hFile = IcmpCreateFile()
         If hFile = 0 Then
             MsgBox "Unable to Create File Handle"
             Exit Sub
         End If
         OptInfo.TTL = 255
         If IcmpSendEcho(hFile, Address, String(32, "A"), 32, OptInfo, EchoReply, Len(EchoReply) + 8, 2000) Then
             rIP = CStr(EchoReply.Address(0)) + "." + CStr(EchoReply.Address(1)) + "." + CStr(EchoReply.Address(2)) + "." + CStr(EchoReply.Address(3))
         Else
             MsgBox "Timeout"
         End If
         If EchoReply.Status = 0 Then
             MsgBox "Reply from " + HostName + " (" + rIP + ") recieved after " + Trim$(CStr(EchoReply.RoundTripTime)) + "ms"
         Else
             MsgBox "Failure ..."
         End If
         Call IcmpCloseHandle(hFile)
         Call WSACleanup
    End Sub


    Вопрос:

       Как мне выделить несколько контролов(любым способом), а потом получить их индексы (массив контролов)?

    Ответ:

    Автор ответа: Tibor Ferencig

    А зачем? Ты им сразу индексы задай и не мучайся или динамически создавай, так даже проще.


    Вопрос:

       Хочу сделать антивирус, но вот начались проблемы с созданием антивирусных баз.
    База представляет собой следующий файл.В начале должна находится версия базы, далее после символа "VbNewLine" идет название вруса #1, а после этого символ "VbNewLine" и часть бинарного кода вируса, подом название вируса #2, и его код и.т.д. Помогите, пожалуйста, осуществить это.

    Ответ:

    Автор ответа: Роман

    Open "C:\base.dbs" For Binary As #1
          Put #1, , BaseVer + vbNewLine + "Vir#1" + vbNewLine +
          VirusSignature
    Close #1

    Думаю, не стоит начинать с таких сложных задач. Хотя, может
    это будущий конкурент лаборатории Данилова :)



    Ответ:

    Автор ответа: C...R...a...S...H

    Private Type virus
    Name As String
    Body() As Byte
    End Type
    Private Sub Command1_Click()

    Dim VirusList() As virus
    ReDim VirusList(100)
    VirusList(0).Name = "Win32.CIH"
    VirusList(0).Body() = "asdasdasdasdasdasdad"
    Open "c:\Baza.dtb" For Binary As #1
    Put #1, , CDate(Date)
    Put #1, , UBound(VirusList)
    Put #1, , VirusList
    Close #1
    Dim dateBazi As Date
    Dim aa As Long
    Open "c:\Baza.dtb" For Binary As #1
    Get #1, , dateBazi
    Get #1, , aa
    ReDim VirusList(aa)
    Get #1, , VirusList()
    Close #1
    End Sub




    Можете заполнить эту форму, либо отослать вопрос СЮДА

    Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта.
    Текст сообщения:
    Ваше имя
    E-mail для ответа

    наверх


    Выпуск подготовили:

    Сурменок Павел


    http://subscribe.ru/
    E-mail: ask@subscribe.ru
    Отписаться
    Убрать рекламу


    В избранное