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


VBNet VBMania
Голосование:

Ваш голос отсылается по E-mail владельцу сайта, после чего голоса анализируются и на отдельной странице выводятся результаты.

Нет тем.

Рассылки Subscribe.Ru
Мир программирования на Visual BASIC 5.0 и HTML.
Новости сайта IgorykSoft и советы по программированию


Рассылки Subscribe.Ru
Старые игры

Доска почёта:

Sergey Y. Tkachev
Кононенко Роман
Kirill

Ссылки:

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

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

       Опять пятница!
    Читайте!


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




    Книги

    Переход на VB .NET. Стратегии, концепции, код (цена ~ 158 руб.)

    Эта книга была задумана как одна из первых книг о.NET, которая ознакомит читателя с основными идеями новой архитектуры и подготовит его к знакомству с более детальной литературой, например документацией Microsoft и ее толкованиями, которая неизбежно появится на рынке. Она поможет вам взглянуть на эту технологию с позиций ваших собственных рабочих планов и быстро освоить те концепции, которые покажутся необычными для большинства прогр...

    Автор(ы): Дан Эпплман, Издательство: Питер, 2002 г.


    Программирование на VB.NET. Учебный курс (цена ~ 119 руб.)

    Эта книга является вводным курсом по изучению языка программирования Visual Basic .NET. Даны основные принципы объектно-ориентированного программирования в контексте языка VB .NET, поскольку без хорошей подготовки в этой области невозможно в полной мере пользоваться всеми преимуществами VB .NET.
    Изложены азы всех аспектов языка, которыми должен владеть любой профессиональный разработчик VB .NET

    Автор(ы): Г. Корнелл, Дж. Моррисон, Издательство: Питер, 2002 г.


    VB.NET для разработчиков (цена ~ 125 руб.)

    Основная задача книги - быстро ознакомить разработчиков Visual Basic с изменениями в .NET Framework. Программисты, использующие Java, C++, Delphi или другие инструменты разработки приложений и интересующиеся Visual Basic или технологией .NET Framework, также найдут эту книгу полезной. Хотя книга посвящена Visual Basic.NET, ее основная цель - продемонстрировать взаимодействие Visual Basic и ...

    Автор(ы): Кит Франклин, Издательство: Вильямс, 2002 г.




    Остальные книги о VB можно найти
    здесь.

    наверх


    Получение URL из адресной строки Microsoft Internet Explorer

    Примечание: не всегда у меня данный код срабатывал. Закройте все окна Internet Explorer, запустите программу, откройте любую htm-страницу, нажмите на кнопку в вашей программе.

    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

    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
    Private Declare Function SendMessageLong& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long)
    Private Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
    Const WM_USER = &H400

    Const EM_LIMITTEXT = WM_USER + 21
    Private Const WM_GETTEXT = &HD
    Private Const WM_GETTEXTLENGTH = &HE
    Private Const EM_GETLINECOUNT = &HBA
    Private Const EM_LINEINDEX = &HBB
    Private Const EM_LINELENGTH = &HC1

    Private Sub Command1_Click()
    On Error GoTo CallErrorA
    Dim iPos As Integer
    Dim sClassName As String
    Dim GetAddressText As String
    Dim lhwnd As Long
    Dim WindowHandle As Long
    lhwnd = 0
    sClassName = ("IEFrame")
    lhwnd = FindWindowEx(lhwnd, 0, sClassName, vbNullString)
    sClassName = ("WorkerA")
    lhwnd = FindWindowEx(lhwnd, 0, sClassName, vbNullString)
    sClassName = ("ReBarWindow32")
    lhwnd = FindWindowEx(lhwnd, 0, sClassName, vbNullString)
    sClassName = ("ComboBoxEx32")
    lhwnd = FindWindowEx(lhwnd, 0, sClassName, vbNullString)
    sClassName = ("ComboBox")
    lhwnd = FindWindowEx(lhwnd, 0, sClassName, vbNullString)
    sClassName = ("Edit")
    lhwnd = FindWindowEx(lhwnd, 0, sClassName, vbNullString)
    WindowHandle& = lhwnd
    Dim buffer As String, TextLength As Long
    TextLength& = SendMessage(WindowHandle&, WM_GETTEXTLENGTH, 0&, 0&)
    buffer$ = String(TextLength&, 0&)
    Call SendMessageByString(WindowHandle&, WM_GETTEXT, TextLength& + 1, buffer$)
    MsgBox buffer$
    Exit Sub
    CallErrorA:
    MsgBox Err.Description
    Err.Clear
    End Sub

    наверх


    Автозавершение набора URL

    Этот пример для счастливых обладателей броузера ИнтернетЭксплорер версии от 5.0 и выше.
    Помните про возможность автозавершения набора адреса? Нет? Не беда! Установите на форме компонент Label, компонент TextBox и CommandButton. И вы сразу почувствуете прелесть этого примера. Идеальный пример для работы с компонентом WebBrowser

    Option Explicit
    Private Const SHACF_AUTOSUGGEST_FORCE_ON As Long = &H10000000
    Private Const SHACF_AUTOSUGGEST_FORCE_OFF As Long = &H20000000
    Private Const SHACF_AUTOAPPEND_FORCE_ON As Long = &H40000000
    Private Const SHACF_AUTOAPPEND_FORCE_OFF As Long = &H80000000
    Private Const SHACF_DEFAULT As Long = &H0
    Private Const SHACF_FILESYSTEM As Long = &H1
    Private Const SHACF_URLHISTORY As Long = &H2
    Private Const SHACF_URLMRU As Long = &H4
    Private Const SHACF_URLALL As Long = (SHACF_URLHISTORY Or SHACF_URLMRU)

    Private Const DLLVER_PLATFORM_WINDOWS As Long = &H1 'Windows 95
    Private Const DLLVER_PLATFORM_NT As Long = &H2 'Windows NT

    Private Type DllVersionInfo
    cbSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformID As Long
    End Type

    Private Declare Function SHAutoComplete Lib "Shlwapi.dll" (ByVal hwndEdit As Long, ByVal dwFlags As Long) As Long
    Private Declare Function DllGetVersion Lib "Shlwapi.dll" (dwVersion As DllVersionInfo) As Long

    Private Function GetIEVersion(DVI As DllVersionInfo) As Long
    DVI.cbSize = Len(DVI)
    Call DllGetVersion(DVI)
    GetIEVersion = DVI.dwMajorVersion
    End Function

    Private Function GetIEVersionString() As String
    Dim DVI As DllVersionInfo
    DVI.cbSize = Len(DVI)
    Call DllGetVersion(DVI)
    GetIEVersionString = "Internet Explorer " & DVI.dwMajorVersion & "." & DVI.dwMinorVersion & "." & DVI.dwBuildNumber
    End Function

    Private Sub Command1_Click()
    Dim DVI As DllVersionInfo
    If GetIEVersion(DVI) >= 5 Then
    Call SHAutoComplete(Text1.hWnd, SHACF_DEFAULT)
    Command1.Caption = "Автозавершение включено"
    Command1.Enabled = False
    Text1.SetFocus
    Text1.SelStart = Len(Text1.Text)
    Else
    MsgBox "Простите, но у вас не установлен IE5", vbExclamation
    End If
    End Sub

    Private Sub Form_Load()
    Dim DVI As DllVersionInfo
    Label1 = "Использование Shlwapi.dll для " & GetIEVersionString
    Command1.Enabled = GetIEVersion(DVI) >= 5
    Command1.Caption = "Автозавершение выключено"
    End Sub

    наверх


    Запрещение запуска дополнительных окон IE

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

    Что делает пример: 1) программа при запуске определяет количество запущенных окон InternetExplorer'а. 2) во время работы программа проводит мониторинг запущенных процессов, 3) и если запущено очередное окно Internet Explorer'а программа его закроет.

    Ну а кнопка вам понадобится, если вы захотите отключить/снова включить процесс мониторинга.

    Пример подробно описан, но... на английском языке.

    Установите на форме компонент Label, компонент Timer и CommandButton. Также в этом примере вам понадобится дополнительный модуль.

    'КОД МОДУЛЯ:
    Public Type WI
    TitleBarText As String
    TitleBarLen As Integer
    hWnd As Long
    End Type
    Public Declare Function GetWindowTextLength Lib "user32.dll" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long
    Public Declare Function EnumWindows Lib "user32.dll" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
    Public Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long
    Public WinNum As Integer 'holds the number of windows examined
    Public CurrentWindows(299) As WI 'holds information about all of the currently open windows

    Public Function EnumWindowsProc(ByVal hWnd As Long, ByVal lParam As Long) As Long
    Dim WinInfo As WI 'holds information about the window currently being examined
    Dim retval As Long 'holds the return value
    Dim X As Integer

    WinInfo.TitleBarLen = GetWindowTextLength(hWnd) + 1 'find the length of the title bar text of the window currently being examined
    If WinInfo.TitleBarLen > 0 And Len(hWnd) > 1 Then 'if the title bar text of the window currently being examined is at least one character long AND the window's handle is > 1
    WinInfo.TitleBarText = Space(WinInfo.TitleBarLen) 'initialize the variable that will hold the title bar text
    retval = GetWindowText(hWnd, WinInfo.TitleBarText, WinInfo.TitleBarLen) 'retreive the title bar text of the window currently being examined
    WinInfo.hWnd = hWnd 'holds the value of this window's handle
    CurrentWindows(WinNum).hWnd = WinInfo.hWnd 'store this window's handle in the current windows array
    CurrentWindows(WinNum).TitleBarText = WinInfo.TitleBarText 'store this window's title bar text in the current windows array
    WinNum = WinNum + 1 'increment the window counter
    End If
    EnumWindowsProc = 1 'continue enumeration of windows
    End Function


    'КОД ФОРМЫ
    Option Explicit
    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Const WM_CLOSE = &H10
    Dim ExistingIEWindows(49) As Long 'holds the handles of all of the currently existing IE windows (50 max)
    Dim Flash As Integer 'holds the value that determines if the status text should flash

    Private Sub Command1_Click()
    If Command1.Caption = "Отключить мониторинг" Then
    Timer1.Enabled = False
    Command1.Caption = "Включить мониторинг"
    Else
    Timer1.Enabled = True
    End If
    End Sub

    Private Sub Form_Load()
    Timer1.Interval = 100
    Command1.Caption = "Отключить мониторинг"
    Dim X As Integer 'loop variable
    Label1.Caption = "Initializing..."
    Flash = 0
    For X = 0 To 49 'reset/initialize the existing IE windows array
    ExistingIEWindows(X) = 0
    Next
    Call GetExistingIEWindows
    End Sub

    Private Sub GetExistingIEWindows() 'this sub checks to see if any IE windows are currently open, and "remembers" them if so.
    Dim retval As Long 'holds the return value
    Dim X As Integer, Y As Integer 'loop variables
    Label1.Caption = "Examining currently active system windows..."
    WinNum = 0 'initialize number of windows to zero
    For X = 0 To 199 'reset/initialize the current windows array
    CurrentWindows(X).hWnd = 0
    CurrentWindows(X).TitleBarLen = 0
    CurrentWindows(X).TitleBarText = ""
    Next
    retval = EnumWindows(AddressOf EnumWindowsProc, 0) 'enumerate all open windows
    Y = 0
    For X = 0 To WinNum - 1 'for each window that is currently open
    If InStr(1, CurrentWindows(X).TitleBarText, "Microsoft Internet Explorer", vbTextCompare) > 0 Then 'if this window is an IE window...
    Label1.Caption = "Storing IE window handle..."
    ExistingIEWindows(Y) = CurrentWindows(X).hWnd 'add this window to the list of existing IE windows
    Y = Y + 1
    End If
    Next
    If Y > 0 Then 'if any of the existing system windows are IE windows
    Label1.Caption = "Enabling popup monitoring..."
    Timer1.Enabled = True 'enable the timer that checks for any new IE windows
    Label1.Caption = "Monitoring for new IE windows..."
    Else 'if none of the existing system windows are IE windows
    Label1.Caption = "No IE windows found!"
    MsgBox "There are currently no IE windows open!" & vbLf & vbLf & "Please start Internet Explorer before running this program.", vbExclamation + vbOKOnly, "Error" 'if no IE windows are found, display an error message
    End 'exit this program
    End If
    End Sub

    Private Sub Timer1_Timer()
    Dim retval As Long 'holds the return value
    Dim X As Integer, Y As Integer 'loop variables
    Dim KillCount As Integer 'holds the value that determines if the current window should be killed
    WinNum = 0 'initialize number of windows to zero
    For X = 0 To 199 'reset/initialize the current windows array
    CurrentWindows(X).hWnd = 0
    CurrentWindows(X).TitleBarLen = 0
    CurrentWindows(X).TitleBarText = ""
    Next
    retval = EnumWindows(AddressOf EnumWindowsProc, 0) 'enumerate all open windows
    For X = 0 To WinNum - 1 'for each window that is currently open
    If InStr(1, CurrentWindows(X).TitleBarText, "Microsoft Internet Explorer", vbTextCompare) > 0 Then 'if this window is an IE window...
    KillCount = 0
    For Y = 0 To 49
    If ExistingIEWindows(Y) <> 0 Then 'if array value holds a valid handle
    If ExistingIEWindows(Y) = CurrentWindows(X).hWnd Then 'if the window currently being examined matches any of the existing IE windows
    KillCount = KillCount + 1 'increment
    End If
    End If
    Next
    If KillCount = 0 Then 'if an IE window that did not previously exist was found
    retval = PostMessage(CurrentWindows(X).hWnd, WM_CLOSE, ByVal CLng(0), ByVal CLng(0)) 'post the window close message to the newly created IE window's message queue
    End If
    End If
    Next
    Flash = Flash + 1 'increment the flash value
    If Flash = 5 Then 'make the status label flash every 0.5 seconds
    Flash = 0
    If Label1.Visible = True Then
    Label1.Visible = False
    Else
    Label1.Visible = True
    End If
    End If
    End Sub

    наверх


    Определение имени текущего домена и имени пользователя

    Вам понадобится элемент CommandButton

    Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
    Private Declare Function LookupAccountName Lib "advapi32.dll" Alias "LookupAccountNameA" (lpSystemName As String, ByVal lpAccountName As String, sid As Any, cbSid As Long, ByVal ReferencedDomainName As String, cbReferencedDomainName As Long, peUse As Long) As Long
    Public Function GetLogonDomainuser() As String
    Dim lResult As Long
    Dim I As Integer
    Dim bUserSid(255) As Byte
    Dim sUserName As String
    Dim sDomainName As String * 255
    Dim lDomainNameLength As Long
    Dim lSIDType As Long
    sUserName = GetLogonUser
    lResult = LookupAccountName(vbNullString, sUserName, bUserSid(0), 255, sDomainName, lDomainNameLength, lSIDType)
    sDomainName = Space(lDomainNameLength)
    lResult = LookupAccountName(vbNullString, sUserName, bUserSid(0), 255, sDomainName, lDomainNameLength, lSIDType)
    If (lResult = 0) Then
    MsgBox "Ошибка: невозможно найти имя домена для юзера: " & sUserName
    Exit Function
    End If
    sDomainName = Left$(sDomainName, InStr(sDomainName, Chr$(0)) - 1)
    GetLogonDomainuser = Trim(sDomainName)
    End Function
    Private Function GetLogonUser() As String
    Dim strTemp As String, strUserName As String
    strTemp = String(100, Chr$(0))
    strTemp = Left$(strTemp, InStr(strTemp, Chr$(0)) - 1)
    strUserName = String(100, Chr$(0))
    GetUserName strUserName, 100
    strUserName = Left$(strUserName, InStr(strUserName, Chr$(0)) - 1)
    GetLogonUser = strUserName
    End Function

    Public Function UserName() As String
    Dim cn As String
    Dim ls As Long
    Dim res As Long
    cn = String(1024, 0)
    ls = 1024
    res = GetUserName(cn, ls)
    If res <> 0 Then
    UserName = Mid(cn, 1, InStr(cn, Chr(0)) - 1)
    Else
    UserName = ""
    End If
    End Function

    Private Sub Command1_Click()
    MsgBox GetLogonDomainuser
    MsgBox GetLogonUser 'или MsgBox UserName
    End Sub

    наверх


    Подключение/отключение сетевого диска

    Прежде всего, добавьте дополнительный модуль, а также 2 элемента CommandButton.

    'КОД ФОРМЫ

    Private Sub Command1_Click()
    Call Module1.Connect("Oksana\c$", "K:", "defaultsharename", "garik")
    If (Module1.rc <> 0) And (Module1.rc <> 85) Then
    MsgBox Module1.ErrorMsg
    End If
    End Sub

    Private Sub Command2_Click()
    Call Module1.DisConnect("K:", True)
    If (Module1.rc <> 0) And (Module1.rc <> 85) Then
    MsgBox Module1.ErrorMsg
    End If
    End Sub

    'КОД МОДУЛЯ


    Option Explicit
    Public Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" (lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUsername As String, ByVal dwFlags As Long) As Long
    Public Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias "WNetCancelConnection2A" (ByVal lpName As String, ByVal dwFlags As Long, ByVal fForce As Long) As Long

    Public ErrorNum As Long
    Public ErrorMsg As String
    Public rc As Long
    Public RemoteName As String

    Public Const ERROR_BAD_DEV_TYPE = 66&
    Public Const ERROR_ALREADY_ASSIGNED = 85&
    Public Const ERROR_ACCESS_DENIED = 5&
    Public Const ERROR_BAD_NET_NAME = 67&
    Public Const ERROR_BAD_PROFILE = 1206&
    Public Const ERROR_BAD_PROVIDER = 1204&
    Public Const ERROR_BUSY = 170&
    Public Const ERROR_CANCEL_VIOLATION = 173&
    Public Const ERROR_CANNOT_OPEN_PROFILE = 1205&
    Public Const ERROR_DEVICE_ALREADY_REMEMBERED = 1202&
    Public Const ERROR_EXTENDED_ERROR = 1208&
    Public Const ERROR_INVALID_PASSWORD = 86&
    Public Const ERROR_NO_NET_OR_BAD_PATH = 1203&
    Public Const ERROR_NO_NETWORK = 1222&
    Public Const ERROR_NO_CONNECTION = 8
    Public Const ERROR_NO_DISCONNECT = 9
    Public Const ERROR_DEVICE_IN_USE = 2404&
    Public Const ERROR_NOT_CONNECTED = 2250&
    Public Const ERROR_OPEN_FILES = 2401&
    Public Const ERROR_MORE_DATA = 234

    Public Const CONNECT_UPDATE_PROFILE = &H1
    Public Const RESOURCETYPE_DISK = &H1

    Public Type NETRESOURCE
    dwScope As Long
    dwType As Long
    dwDisplayType As Long
    dwUsage As Long
    lpLocalName As String
    lpRemoteName As String
    lpComment As String
    lpProvider As String
    End Type

    Public lpNetResourse As NETRESOURCE

    Public Sub Connect(ByVal HostName As String, ByVal RemoteName As String, ByVal Username As String, ByVal Password As String)
    Dim lpUsername As String
    Dim lpPassword As String
    On Error GoTo Err_Connect
    ErrorNum = 0
    ErrorMsg = ""
    lpNetResourse.dwType = RESOURCETYPE_DISK
    lpNetResourse.lpLocalName = RemoteName & Chr(0)
    'Drive Letter to use
    lpNetResourse.lpRemoteName = "\\" & HostName & Chr(0)
    'Network Path to share
    lpNetResourse.lpProvider = Chr(0)
    lpPassword = Password & Chr(0)
    'password on share pass "" if none
    lpUsername = Username & Chr(0)
    'username to connect as if applicable
    rc = WNetAddConnection2(lpNetResourse, lpPassword, lpUsername, CONNECT_UPDATE_PROFILE)
    If rc <> 0 Then GoTo Err_Connect
    Exit Sub
    Err_Connect:
    ErrorNum = rc
    ErrorMsg = WnetError(rc)
    End Sub

    Public Sub DisConnect(ByVal Name As String, ByVal ForceOff As Boolean)
    On Error GoTo Err_DisConnect
    ErrorNum = 0
    ErrorMsg = ""
    rc = WNetCancelConnection2(Name & Chr(0), CONNECT_UPDATE_PROFILE, ForceOff)
    If rc <> 0 Then GoTo Err_DisConnect
    Exit Sub
    Err_DisConnect:
    ErrorNum = rc
    ErrorMsg = WnetError(rc)
    End Sub

    Private Function WnetError(Errcode As Long) As String
    Select Case Errcode
    Case ERROR_BAD_DEV_TYPE
    WnetError = "Bad device."
    Case ERROR_ALREADY_ASSIGNED
    WnetError = "Already Assigned."
    Case ERROR_ACCESS_DENIED
    WnetError = "Access Denied."
    Case ERROR_BAD_NET_NAME
    WnetError = "Bad net name"
    Case ERROR_BAD_PROFILE
    WnetError = "Bad Profile"
    Case ERROR_BAD_PROVIDER
    WnetError = "Bad Provider"
    Case ERROR_BUSY
    WnetError = "Busy"
    Case ERROR_CANCEL_VIOLATION
    WnetError = "Cancel Violation"
    Case ERROR_CANNOT_OPEN_PROFILE
    WnetError = "Cannot Open Profile"
    Case ERROR_DEVICE_ALREADY_REMEMBERED
    WnetError = "Device already remembered"
    Case ERROR_EXTENDED_ERROR
    WnetError = "Device already remembered"
    Case ERROR_INVALID_PASSWORD
    WnetError = "Invalid Password"
    Case ERROR_NO_NET_OR_BAD_PATH
    WnetError = "Could not find the specified device"
    Case ERROR_NO_NETWORK
    WnetError = "No Network Present"
    Case ERROR_DEVICE_IN_USE
    WnetError = "Connection Currently in use "
    Case ERROR_NOT_CONNECTED
    WnetError = "No Connection Present"
    Case ERROR_OPEN_FILES
    WnetError = "Files open and the force parameter is false"
    Case ERROR_MORE_DATA
    WnetError = "Buffer to small to hold network name, make lpnLength bigger"
    Case Else:
    WnetError = "Unrecognized Error " + Str(Errcode) + "."
    End Select
    End Function

    наверх


    Определение имени или IP-адреса удаленного компьютера в сети

    Прежде всего, добавьте дополнительный модуль, а также 1 элемента CommandButton.

    'КОД ФОРМЫ

    Private Sub Command1_Click()
    'Вначале вы должны инициализировать winsock
    WinsockInit
    'Определение имени машины, зная ее IP-адрес
    MsgBox HostByAddress("192.168.1.1")
    MsgBox HostByAddress("192.168.1.2")
    'Определение IP-адреса машины, зная ее имя
    MsgBox HostByName("GARIK")
    MsgBox HostByName("OKSANA")
    'В конце работы вы должны использовать функцию WSACleanUp
    WSACleanUp
    End Sub

    'КОД МОДУЛЯ

    Option Explicit
    Public Const SOCKET_ERROR = -1
    Public Const AF_INET = 2
    Public Const PF_INET = AF_INET
    Public Const MAXGETHOSTSTRUCT = 1024
    Public Const SOCK_STREAM = 1
    Public Const MSG_PEEK = 2
    Private Type SockAddr
    sin_family As Integer
    sin_port As Integer
    sin_addr As String * 4
    sin_zero As String * 8
    End Type
    Private Type T_WSA
    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
    Dim WSAData As T_WSA
    Type Inet_Address
    Byte4 As String * 1
    Byte3 As String * 1
    Byte2 As String * 1
    Byte1 As String * 1
    End Type
    Public IPStruct As Inet_Address
    Public Type T_Host
    h_name As Long
    h_aliases As Long
    h_addrtype As Integer
    h_length As Integer
    h_addr_list As Long
    End Type

    Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Dest As Any, Src As Any, ByVal cb&)
    Declare Function gethostbyaddr Lib "wsock32.dll" (addr As Long, ByVal addr_len As Long, ByVal addr_type As Long) As Long
    Declare Function inet_addr Lib "wsock32.dll" (ByVal addr As String) As Long
    Declare Function GetHostByName Lib "wsock32.dll" Alias "gethostbyname" (ByVal HostName As String) As Long
    Declare Function GetHostName Lib "wsock32.dll" Alias "gethostname" (ByVal HostName As String, HostLen As Long) As Long
    Declare Function WSAStartup Lib "wsock32.dll" (ByVal a As Long, b As T_WSA) As Long
    Declare Function WSACleanUp Lib "wsock32.dll" Alias "WSACleanup" () As Integer

    Function HostByName(sHost As String) As String
    Dim s As String
    Dim p As Long
    Dim Host As T_Host
    Dim ListAddress As Long
    Dim ListAddr As Long
    Dim Address As Long
    s = String(64, 0)
    sHost = sHost + Right(s, 64 - Len(sHost))
    p = GetHostByName(sHost)
    If p = SOCKET_ERROR Then
    Exit Function
    Else
    If p <> 0 Then
    CopyMemory Host.h_name, ByVal p, Len(Host)
    ListAddress = Host.h_addr_list
    CopyMemory ListAddr, ByVal ListAddress, 4
    CopyMemory Address, ByVal ListAddr, 4
    HostByName = InetAddrLongToString(Address)
    Else
    HostByName = "No DNS Entry"
    End If
    End If
    End Function

    Private Function InetAddrLongToString(Address As Long) As String
    CopyMemory IPStruct, Address, 4
    InetAddrLongToString = CStr(Asc(IPStruct.Byte4)) + "." + CStr(Asc(IPStruct.Byte3)) + "." + CStr(Asc(IPStruct.Byte2)) + "." + CStr(Asc(IPStruct.Byte1))
    End Function

    Function HostByAddress(ByVal sAddress As String) As String
    Dim lAddress As Long
    Dim p As Long
    Dim HostName As String
    Dim Host As T_Host
    lAddress = inet_addr(sAddress)
    p = gethostbyaddr(lAddress, 4, PF_INET)
    If p <> 0 Then
    CopyMemory Host, ByVal p, Len(Host)
    HostName = String(256, 0)
    CopyMemory ByVal HostName, ByVal Host.h_name, 256
    If HostName = "" Then HostByAddress = "Unable to Resolve Address"
    HostByAddress = Left(HostName, InStr(HostName, Chr(0)) - 1)
    Else
    HostByAddress = "No DNS Entry"
    End If
    End Function

    Public Sub WinsockInit()
    WSAStartup &H101, WSAData
    End Sub

    наверх


    Мои программы

    BalloonMessage for MS Agent

       BalloonMessage for Microsoft Agent реализует диалог программы с пользователем, используя при этом технологию Microsoft Agent. OCX реализует три типа диалоговых окон: InputBox, MsgBox и MsgLabels.

    Автор: Шатрыкин Иван. Соавтор: Павел Сурменок.

    наверх


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

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

    Вопросы:


    Автор вопроса:
    Мунгалов Андрей

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

       1.Подскажите пожалуйста как програмно создавать Базы данных .DBF формата 3 или 4.

    2.Есть файл отчета CRystalReports. как в него из кода засунуть к примеру строку текста. ( конкретно такая ситуация. у меня отчет формирует список цен, а вконце надо добавить строку сумма прописью.) как?


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

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

       Где взять Visual Basic 7.0
    Очень нужен.


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

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

       А как можно программно закрыть любую другую программу, загруженную из-под Windows?


    Автор вопроса: Rusty Angles

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

       Хочу создать трэйнер для игрушки, но как заменять данные в памяти? как их извлекать от туда, и чтобы при одном процессе, не мешая другим, в общем то что делают все трэйнеры. и еще, чтобы записывать и извлекать данные в hex(16-ти) что указывать и вообще как делаеться.. может есть сэмплы?! или инфа по этой теме?


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

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

       Как сменить кодировку текста,что-бы в Text-box иметь возможность выбора шрифта. Сейчас у меня выходит неискаженый текст(кирилица) в Text-box только со шрифтом Terminal.


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

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

       Знает кто нибудь, как можно програмно ограничить скорость соединения при закачке файла?


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

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

       1. Как считать скорость соединения модема с инетом в переменную?
    2. Как програмно позвонить в инет (т.е. код и напишите пожалуйста где там username и логин вставлять.)


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

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

       Как можно можно сделать автоматический скроллинг в элементе Webbrowser ??


    Автор вопроса: Проскурин

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

       Всем привет! Как бы написать прогу, что бы она преобразовывала (распознавала тональности, длину звучания и ноту) mp3 или wav в текст из аккордов или нот и наоборот.


    Автор вопроса: P@Ssword

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

       Как и Win2000 определить, подключен ли компьютер к нитернету (черея модем)?


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

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

       1)Программа запускает Windows Media Player, как его програмно закрыть и как определить закончено или нет воспроизведение клипа?
    2)Что такое SDK?


    Автор вопроса: Вячеслав Ленчевский

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

       нужна помощь: как организовать вложенный N раз цикл, если N заранее неизвестно? (границы у циклов одинаковые)
    типа: for i(1)=1 to 10
                     for i(2)=1 to 10
                         .......................
                           for i(N)=1 to 10
                                 i(0)=i(1)+i(2)+...+i(N)
                           next i(n)
                          ...............
                     next i(2)
                 next i(1)
    похоже тут необходима рекурсия? а как реализовать не соображу :-(


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

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

       Как прочитать ия программы свои письма непосредственно с сервера. Подскажите где найти практические советы на эту тему или исходник.


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

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

       1. Подскажите как в VB нажатием на кнопку открыть документ Microsoft vord, для добавления информации.

    2. Нужна консультация! Написал прогу по расчету кое каких данных, эти данные у меня записываются в файл C:\Мои документы\1.Doc: Внимание вопрос? Как мне найти этот файл на диске нажав на кнопку расположенную в моей программе, открыть его в формате Мicrosoft vord для добавления , корректировки данных или печати запустив Microsoft vord не открывая проводник.
      
    3. Подскажите как быть, пишу программу для тестирования эл. сварщиков, столкнулся с такой проблемой: 1. Какой код написать, чтоб на диске найти файл теста с вопросами и ответами, 2. вывести содержимое файла по необходимым TextBoxам, и чтоб программа сама перебирала вопросы и ответы по техт боксам при нажатии на кнопку дальше. Причем так чтоб этот файл можно было корректировать со временем.
      
    4.Люди подскажите! По сл. необходимости пишу тестовую программу. Какой код вписаь чтоб программа могла различать правильные и неправеильные ответы! 2. Каким образом выести текст вопроса в полном объеме в TextBox (при длинном вопросе он показывает только его часть), Причем и варианты ответов написаны в одном файле.


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

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

       Нужна консультация, подскажите, как сделать мою форму поверх всех окон.




    Ответы:


    Вопрос:

       Как в VB6.0 сделать форму fsStayOnTop??

    Ответ:

    Автор ответа: Иван

    Для создания такого окна используется функция API SetWindowPos из библиотеки user32.dll. Декларируем в модуле следующую функцию и константы:
      
    Option Explicit
    Public Const HWND_TOPMOST = -1
    Public Const HWND_NOTOPMOST = -2
    Public Const SWP_NOMOVE = &H2
    Public Const SWP_NOSIZE = &H1
    Public Const SWP_NOACTIVATE = &H10
    Public Const SWP_SHOWWINDOW = &H40
    Public Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
    Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
      
    В форму вписывается следующий код
      
    Option Explicit
    Private Sub Form_Load()
    Call SetWindowPos(Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)
    End Sub


    Вопрос:

       Как в VB6.0 сделать форму fsStayOnTop??

    Ответ:

    Автор ответа: Ревягин_Алексей

    Добавь 2 CommandButton (под именем Command1 и Command2). Когда нажмешь первую кнопку, форма поверх всех
      
    Private Declare Function SetWindowPos Lib "user32" (ByVal h%, ByVal hb%, ByVal x%, ByVal Y%, ByVal cx%, ByVal cy%, ByVal F%) As Integer
    Const SWP_NOMOVE = 2
    Const SWP_NOSIZE = 1
    Const flags = SWP_NOMOVE Or SWP_NOSIZE
    Const HWND_TOPMOST = -1
    Const HWND_NOTOPMOST = -2
      
    Private Sub Command1_Click()
    res = SetWindowPos(Form1.hwnd, HWND_TOPMOST, 0, 0, 0, 0, flags) 'Форма on-top
    End Sub
    Private Sub Command2_Click()
    res = SetWindowPos(Form1.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, flags) 'Форма non-on-top
    End Sub


    Вопрос:

       Как в VB6.0 сделать форму fsStayOnTop??

    Ответ:

    Автор ответа: Иван

    Если я правильно понял, то в окне проекта(где отображаются файлы форм) добавте форму нажав правую клавишу мыши add Form и выберите форму StayOnTop!


    Вопрос:

       Как в VB6.0 сделать форму fsStayOnTop??

    Ответ:

    Автор ответа: SHatrykin Ivan

    Что означает fsStayOnTop? Если "поверх всех окон" то можно так:

    'Устанавливаем окно поверх всех остальных
    Public Sub SetFormPosition(frmHandl As Long, TopPosition As Boolean)
         If TopPosition Then
              SetWindowPos frmHandl, HWND_TOPMOST, 0, 0, 0, 0, _
                           SWP_NOACTIVATE Or SWP_NOSIZE Or SWP_NOMOVE
          Else
              SetWindowPos frmHandl, HWND_NOTOPMOST, 0, 0, 0, 0, _
                           SWP_NOSIZE Or SWP_NOMOVE
          End If
    End Sub

    Вызываем эту процедуру так:
    call SetFormPosition Form1, True


    Вопрос:

       У меня вопрос по Web Browser'у. Подскажите как в VB менять раямер текста в Web Browser как это делает Internet Explorer.

    Ответ:

    Автор ответа: Ревягин_Алексей

    Должен быть метод Font :
       например

       webbrowser.font=commondialog1.font


    Вопрос:

       Зачем нужно обьявлять Option Explicit ?
    Что бы не яабыть обьявить переменную ???

    Ответ:

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

    Наверно Option Explicit предназначен для программистов в прошлом программируемых на что то вроде Pascal, С, где необходимо объявлять каждую переменную перед использованием. А VB этим и отличается, что переменные объявлять практически вообще нет необходимости, хотя профессиональные программисты всегда ставят Option Explicit для объявления всех переменных тем самым создают эффективные программы. Вот и все.


    Вопрос:

       Зачем нужно обьявлять Option Explicit ?
    Что бы не яабыть обьявить переменную ???

    Ответ:

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

    Что бы не было необьявленных переменных.


    Вопрос:

       Зачем нужно обьявлять Option Explicit ?
    Что бы не яабыть обьявить переменную ???

    Ответ:

    Автор ответа: Roman 'devil' Yuakovlev

    Повышение культуры программирования, возможность делания умного вида, борьба с вариантами и ошибками в набирании имен переменных... рекомендую настоятельно :)


    Вопрос:

       Зачем нужно обьявлять Option Explicit ?
    Что бы не яабыть обьявить переменную ???

    Ответ:

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

    Чтобы выявлялись ошибки.....


    Вопрос:

       Зачем нужно обьявлять Option Explicit ?
    Что бы не яабыть обьявить переменную ???

    Ответ:

    Автор ответа: SHatrykin Ivan

    И для этого тоже. Но основное предназначение этого оператора: исключение очепяток.
    Вот пример:

    Dim sLeft as String

    sLeft = sLeff & "и что будет?"


    Вопрос:

       Как послать строку в текстовое поле чужого окна?

    Ответ:

    Автор ответа: XAlex-sub

    Если курсор находится в нужном поле то можно воспользоваться функцией sendkeys("передаваемый текст") эта функция эмулирует нажатие клавиш на клаве в противном случае только через API и надо знать hwnd окна о обьекта


    Вопрос:

       Как послать строку в текстовое поле чужого окна?

    Ответ:

    Автор ответа: SHatrykin Ivan

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


    Вопрос:

       Может кто знает как вытянуть данные из таблицы ворд в таблицу экселя, подскажите плиз.

    Ответ:

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

    Начиная с Office 2000 появляются вложенные таблицы, нужно учесть.

    Private Sub GetParagraps(ByVal objParagraps As Word.Paragraphs)
    On Error GoTo Check:
    Dim objParagraph As Word.Paragraph
    Dim blnTableComplete As Boolean
    Dim iParagraph As Long
         For iParagraph = 1 To objParagraps.Count
             Set objParagraph = objParagraps.Item(iParagraph)
             If objParagraph.Range.Tables.Count > 0 Then
                 If blnTableComplete = False Then GetTable objParagraph.Range.Tables(1)
                 blnTableComplete = True
             Else
                 blnTableComplete = False
             End If
         Next
         Set objParagraph = Nothing
         Exit Sub
    Check:
         ...
         Resume Next
    End Sub


    Private Sub GetTable(ByVal tblCurrent As Word.Table)
    Dim CurrentRow As Word.Row
    Dim CurrentCell As Word.Cell
    Dim i As Long, j As Long
    On Error GoTo Check:
         
         For i = 1 To tblCurrent.Rows.Count
             Set CurrentRow = tblCurrent.Rows.Item(i)
                ....
             For j = 1 To CurrentRow.Cells.Count
                 Set CurrentCell = CurrentRow.Cells.Item(j)
                ....
             Next
         Next
         
         Set CurrentRow = Nothing
         Set CurrentCell = Nothing
    Exit Sub
    Check:
         ...
         Resume Next
    End Sub


    Вопрос:

       Может кто знает как вытянуть данные из таблицы ворд в таблицу экселя, подскажите плиз.

    Ответ:

    Автор ответа: SHatrykin Ivan

    Напрямую вытащить данные, скорее всего, не удастся. Можно воспользоваться обходным путем:
    1. получить таблицу в программу - можно через буфер обмена в rtf формате
    2. программно анализировать каждую полученную строчку! и самому создать массив из данных таблицы
    3. перекинуть этот массив в Exel


    Вопрос:

       Кто знает как в VB
      1)запустить какой-нибудь файл?
      2)получить список всех файлов и папок в какой-нибудь определенной папке?

    Ответ:

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

    Точно могу ответить только на первый это пожно сделать командой Shell
    напр. shell "C:\Myproga.exe"


    Вопрос:

       Кто знает как в VB
      1)запустить какой-нибудь файл?
      2)получить список всех файлов и папок в какой-нибудь определенной папке?

    Ответ:

    Автор ответа: Иван

    1) Самый надежный способ открытия любого файла получается с применением API – функций.
      
    ' Декларация функции для запуска файла.
      
    Public 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
      
    ' Декларация константы для максимизирования окна открываемого приложения.
    ' Для работы с другими константами смотрите Help по API.
      
    Public Const SW_SHOWMAXIMIZED = 3
      
    После этого нижеследующий код будет открывать файл test.xls находящийся в директории C:\My Documents\

    Call ShellExecute(0, "open", " C:\My Documents\test.xls","", "", SW_SHOWMAXIMIZED)


    Вопрос:

       Кто знает как в VB
      1)запустить какой-нибудь файл?
      2)получить список всех файлов и папок в какой-нибудь определенной папке?

    Ответ:

    Автор ответа: Иван

    Нет ничего проще:
      
    1. Функция Shell("path\name")-запускает исполняемую программу!
    2. Стандартный объект File помещаеш на форму, устанавливаешь свйство Path, если не надо чтобы объект был виден отключи видемось! File1.List(номер строки).text-имя файла
    Понятно? У меня подрукой нет VB, точнее напишу если попросиш!


    Вопрос:

       Кто знает как в VB
      1)запустить какой-нибудь файл?
      2)получить список всех файлов и папок в какой-нибудь определенной папке?

    Ответ:

    Автор ответа: Ревягин_Алексей

    есть такие функции как:
       shell(Path as string)
       ShellExecute
       и т. д.

       помести на форму объекты:
       Filelist
       dirlist
       drivelist
       и укажи для каждого из него параметр Default нажми F5.
       Эксперементируй.

    Вопрос:

       Кто знает как в VB
      1)запустить какой-нибудь файл?
      2)получить список всех файлов и папок в какой-нибудь определенной папке?

    Ответ:

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

    1)Shell "Полный путь к программе",стиль окна
    2)Это можно сделать с помощью Dir-а
      например:
    Поставь на форму ListBox и напишите в нём следуещее:

    Private Sub Form_Load()
    ListBox1.Clear
    st = Dir("C:\*.*", vbDirectory)
    Do While Len(st)
    st = Dir
    ListBox1.AddItem st
    Loop
    End Sub


    Вопрос:

       Кто знает как в VB
      1)запустить какой-нибудь файл?
      2)получить список всех файлов и папок в какой-нибудь определенной папке?

    Ответ:

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

    1) Чтобы запустить любой файл используется команда Shell ("Путь к файлу", параметр).
    2) Ставишь FileListBox и DirListBox и в свойстве Path прописываешь путь.


    Вопрос:

       Кто знает как в VB
      1)запустить какой-нибудь файл?
      2)получить список всех файлов и папок в какой-нибудь определенной папке?

    Ответ:

    Автор ответа: Roman 'devil' Yuakovlev

    1) shell "notepad.exe"
    2) функция dir$, контролы dirlistbox и filelistbox


    Вопрос:

       Кто знает как в VB
      1)запустить какой-нибудь файл?
      2)получить список всех файлов и папок в какой-нибудь определенной папке?

    Ответ:

    Автор ответа: SHatrykin Ivan

    Для запуска чужой программы воспользуйтесь функцией Shell. Описание смотрите сами (можно на нашем сайте). А для поиска файлов в определенной папке Path создайте такой цикл:

         sFile = Dir(Path & "*.*")
         Do While sFile <> ""
             имя_файла = sFile
             sFile = Dir
         Loop


    Вопрос:

       Как в VBA сояданному програмно объекту наяначить реакцию на событие OnClick.

    Ответ:

    Автор ответа: Ревягин_Алексей

    Нужно создать массив элементов управления указать свойство index=0 и дальше копировать этот объект на форму а затем зайти в код и выбрать Объект_Clicl
    в результате:

       Private sub Объект_Click(Index as Integer)
          select case index
                 case 0
                      событие нажатия на 0-й объект
                 case 1
                      событие нажатия на 1-й объект
                 case 2
                      событие нажатия на 2-й объект
                 .....
                 case n
                      событие нажатия на n-й объект
          end select
       end sub

       где n-это Объект.UBound


    Вопрос:

       Как гарантированно опознать компьютер? То есть: сер.номер мамы, сер.номер винта или что-нибудь в этом духе, без компонентов, желательно через API.

    Ответ:

    Автор ответа: SHatrykin Ivan

    Вопрос о серийном номере компьютера уже "обсуждался" в Библиотеке кодов. Смотрите раздел Информация о компьютере.


    Вопрос:

       Как можно в ресурсы засунуть WAV,AVI а потом их воспроизвести.

    Ответ:

    Автор ответа: Oleg Koren

    The following code is a resource script that can be compiled by using the 16-bit and 32-bit versions of Rc.exe.
      
    //////////////////////////////////////////////////////////////////////
         //////
         // Myres.rc - 16 & 32 bit script. This must be compiled into two
         file://.res files using the 16 & 32 bit versions of RC.
         ///////////////////////////////////////////////////////////////////////
         //////
         // Wave Resources - You must copy these files from your \Windows
         // directory to the directory where your .rc script resides.
      
          CHIMES WAVE DISCARDABLE "Chimes.wav"
          DING WAVE DISCARDABLE "Ding.wav"
      
    Steps to Create a Resource File Save the preceding code in Notepad as Myres.rc in the directory where Rc.exe exists on your hard disk.
      
    Copy Chimes.wav and Ding.wav from your Windows directory (\Windows\Media directory in Windows 95 and Windows 98 or \WinNT\Media directory in Windows NT and Windows 2000) to the same directory where you saved the Myres.rc file.
      
    At the command line, type "RC -r Myres.rc." If you want a 16-bit and 32- bit version of your resource file, then you will have to save two copies of your resource file as Myres32.rc and Myres16.rc, and compile each separately with the appropriate resource compiler.
      
    Steps to Run the Sample Application
    Create a new project and add a command button to Form1.

    Add the following code to Form1:
      
      
    '*******
           ' Form1.frm - Calls PlayWaveRes to play a wave resource file.
    '*******
      
           Sub Command1_Click()
              PlayWaveRes "Chimes"
              PlayWaveRes "Ding"
           End Sub
    Add your resource file to the project.
      
    Type the following code in a new code module:
      
    ******
           ' Baswave.bas - Plays a wave file from a resource using LoadResData.
    '*****
      
           Option Explicit
           #If Win32 Then
             Private Declare Function sndPlaySound Lib "winmm" Alias _
                "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) _
                As Long
           #Else
             Private Declare Function sndPlaySound Lib "MMSYSTEM" ( _
                                lpszSoundName As Any, ByVal uFlags%) As Integer
           #End If
      
    '******
           ' Flag values for wFlags parameter.
    '******
      
           Public Const SND_SYNC = &H0 ' Play synchronously (default).
           'Public Const SND_ASYNC = &H1 ' Play asynchronously (see note below).
           Public Const SND_NODEFAULT = &H2 ' Do not use default sound.
           Public Const SND_MEMORY = &H4 ' lpszSoundName points to a memory file.
           Public Const SND_LOOP = &H8 ' Loop the sound until next sndPlaySound.
           Public Const SND_NOSTOP = &H10 ' Do not stop any currently playing sound.
      
    '******
      
           ' Plays a wave file from a resource.
      
    '******
      
           Public Sub PlayWaveRes(vntResourceID As Variant, Optional vntFlags)
           '-----------------------------------------------------------------
           ' WARNING: If you want to play sound files asynchronously in
           ' Win32, then you MUST change bytSound() from a local
           ' variable to a module-level or static variable. Doing
           ' this prevents your array from being destroyed before
           ' sndPlaySound is complete. If you fail to do this, you
           ' will pass an invalid memory pointer, which will cause
           ' a GPF in the Multimedia Control Interface (MCI).
           '-----------------------------------------------------------------
           Dim bytSound() As Byte ' Always store binary data in byte arrays!
      
           bytSound = LoadResData(vntResourceID, "WAVE")
           If IsMissing(vntFlags) Then
              vntFlags = SND_NODEFAULT Or SND_SYNC Or SND_MEMORY
           End If
      
           If (vntFlags And SND_MEMORY) = 0 Then
              vntFlags = vntFlags Or SND_MEMORY
           End If
      
           sndPlaySound bytSound(0), vntFlags
           End Sub
      
    REFERENCES
    For information on how to store any file type in a resource file and retrieve the file for use at run-time in Visual Basic versions 5.0 and 6.0, please see the following article in the Microsoft Knowledge Base:
      
    Q194409 SAMPLE: RESFILE.EXE Stores Any File Type in a Resource File
    Additional query words: WAVE LOADRESDATA RESOURCES RC BYTE SND_ASYNC kbdsd
      
    ---------------

    это пример из MSDN.
    я его не проверял.


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

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

    наверх


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

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