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

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


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

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


VBNet VBMania
Ссылки:

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

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

       Почти догнал...
    Читайте!


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




    Как запустить файл .mp3?

    Вопрос:

    Как запустить файл .mp3?

    Ответ:

    В разделе формы General Declarations объявляем следующую API-функцию:

    Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long

    'чтобы воспроизвести файл
    Private Sub Command2_Click()
    Call mciExecute("play d:\Music01.mp3")
    End Sub

    'чтобы закрыть файл
    Private Sub Command1_Click()
    Call mciExecute("close d:\Music\01.mp3")
    End Sub

    Иван

    наверх


    Как программно отключить заставку Windows?

    Вопрос:

    Как программно отключить заставку Windows?

    Ответ:

    Можно, в файле System.ini, который храниться в каталоге WINDOWS есть ссылка на имя текущей заставки и если её удалить, то и заставки не будет.
    Сделать это можно так:

    Private Sub SwitchOffScreenSaver()
       Dim FileNoRd As Integer
       Dim FileNoWr As Integer
       Dim WinDir As String
       Dim szData As String
       Dim szExample As String
               
       szExample = "SCRNSAVE.EXE"
       WinDir = GetWinDir 'Используем нашу новую функцию для получения каталога Windows (см. выше)
       FileNoWr = FreeFile 'Получаем свободный номер для записи
       'открываем временный файл для построчного сохранения данных.
       Open "C:\mytemp.tmp" For Output As #FileNoWr
          FileNoRd = FreeFile 'Получаем свободный номер для чтения
          'открываем рабочий файл для анализа и изменения
          Open WinDir & "System.ini" For Input As #FileNoRd
             Do Until EOF(FileNoRd)
                Line Input #FileNoRd, szData
                'Если мы находим в файле наш пример и его длина совпадает,
                If Mid(szData, 1, Len(szExample)) = szExample Then
                   'то очищаем значения найденной строки для _
                    отключения заставки.
                   szData = szExample & "="
                End If
                Print #FileNoWr, szData
             Loop
       Close 'Закрываем все открытые файлы
       'Копируем новые данные из временного файла в System.ini
       FileCopy "C:\mytemp.tmp", WinDir & "System.ini"
       Kill "C:\mytemp.tmp" 'Удаляем временный файл
    End Sub

    SC

    наверх


    Как на VB определить путь к системной папке?

    Вопрос:

    Как на VB определить путь к системной папке?

    Ответ:

    Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
    'Получение директории C:\WINDOWS\SYSTEM

    Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
    'Директория "C:\WINDOWS"
    Private Function GetSysDir() As String
       Dim szBuffer As String * 50
       Dim lngRet As Long
       
       lngRet = GetSystemDirectory(szBuffer, 50)
       GetSysDir = Left$(szBuffer, lngRet)
       If Right(GetSysDir, 1) <> "\" Then GetSysDir = GetSysDir & "\"
    End Function

    Private Function GetWinDir() As String
       Dim szBuffer As String * 50
       Dim lngRet As Long
       
       lngRet = GetWindowsDirectory(szBuffer, 50)
       GetWinDir = Left$(szBuffer, lngRet)
       If Right(GetWinDir, 1) <> "\" Then GetWinDir = GetWinDir & "\"
    End Function

    'Использование
    Private Sub Form_Load()
        MsgBox GetWinDir
        MsgBox GetSysDir
    End Sub

    или объединяем наши 2 функции:

    Private Function GetDirectory(szDirName As String) As String
       Dim szBuffer As String * 50
       Dim lngRet As Long
       
       If LCase(szDirName) = "sys" then
          lngRet = GetSystemDirectory(szBuffer, 50)
       ElseIf LCase(szDirName) = "win" then
          lngRet = GetWindowsDirectory(szBuffer, 50)
       End If
       GetDirectory = Left$(szBuffer, lngRet)
       If Right(GetDirectory, 1) <> "\" Then GetDirectory = GetDirectory & "\"
    End Function

    'Использование
    Private Sub Form_Load()
        MsgBox GetDirectory("win")
        MsgBox GetDirectory("sys")
    End Sub

    SC

    наверх


    Как поместить картинки в DLL?

    Вопрос:

    Как поместить картинки в DLL и как с ними потом работать (т.е. читать картинки из этой же DLL)?

    Ответ:

    В начале заходим в меню Add-Ins, затем Add-In Meneger... .Там находим строчку Visual Basic 6 Resource Editor и справа от описания есть флажки, устанавливаем Loaded/Unloaded и Load on StartUp. На стандартной панели инструментов должнен появиться VB Resource Editor. Запускаем и добовляем всё что душе угодно. Всё наши картинки там. Код чтения картинки:

    Private Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As Long
    Private Declare Function ExtractIconEx Lib "shell32.dll" Alias "ExtractIconExA" (ByVal lpszFile As String, ByVal nIconIndex As Long, phiconLarge As Long, phiconSmall As Long, ByVal nIcons As Long) As Long

    Private Sub Command1_Click()
       Dim hIcon As Long
       
       ExtractIconEx "C:\my.dll", 0, hIcon, 0, 1
       DrawIcon Form1.hdc, 0, 0, hIcon
    End Sub

    У формы свойство ScaleMode должно быть 3 - Pixel

    SC

    наверх


    Возможна ли одновременная работа в одной программе двух Winsock?

    Вопрос:

    озможна ли одновременная работа в одной программе двух Winsock, один работает на приём сообщений (так сказать в режиме ожидания сообщений), а второй - на отправку сообщений ?

    Ответ:

    А что тебе мешает?

    Вот выдержка из MSDN (благополучно работают два сокета):

    To create a TCP server
    Create a new Standard EXE project.
    Change the name of the default form to frmServer.
    Change the caption of the form to "TCP Server."
    Draw a Winsock control on the form and change its name to tcpServer.
    Add two TextBox controls to the form. Name the first txtSendData, and the second txtOutput.

    Add the code below to the form.
    Private Sub Form_Load()
    ' Set the LocalPort property to an integer.
    ' Then invoke the Listen method.
    tcpServer.LocalPort = 1001
    tcpServer.Listen
    frmClient.Show ' Show the client form.
    End Sub

    Private Sub tcpServer_ConnectionRequest _
    (ByVal requestID As Long)
    ' Check if the control's State is closed. If not,
    ' close the connection before accepting the new
    ' connection.
    If tcpServer.State <> sckClosed Then _
    tcpServer.Close
    ' Accept the request with the requestID
    ' parameter.
    tcpServer.Accept requestID
    End Sub

    Private Sub txtSendData_Change()
    ' The TextBox control named txtSendData
    ' contains the data to be sent. Whenever the user
    ' types into the textbox, the string is sent
    ' using the SendData method.
    tcpServer.SendData txtSendData.Text
    End Sub

    Private Sub tcpServer_DataArrival _
    (ByVal bytesTotal As Long)
    ' Declare a variable for the incoming data.
    ' Invoke the GetData method and set the Text
    ' property of a TextBox named txtOutput to
    ' the data.
    Dim strData As String
    tcpServer.GetData strData
    txtOutput.Text = strData
    End Sub

    The procedures above create a simple server application. However, to complete the scenario, you must also create a client application.

    To create a TCP client Add a new form to the project, and name it frmClient. Change the caption of the form to TCP Client. Add a Winsock control to the form and name it tcpClient. Add two TextBox controls to frmClient. Name the first txtSend, and the second txtOutput. Draw a CommandButton control on the form and name it cmdConnect. Change the caption of the CommandButton control to Connect. Add the code below to the form. Important Be sure to change the value of the RemoteHost property to the friendly name of your computer.

    Private Sub Form_Load()
    ' The name of the Winsock control is tcpClient.
    ' Note: to specify a remote host, you can use
    ' either the IP address (ex: "121.111.1.1") or
    ' the computer's "friendly" name, as shown here.
    tcpClient.RemoteHost = "RemoteComputerName"
    tcpClient.RemotePort = 1001
    End Sub

    Private Sub cmdConnect_Click()
    ' Invoke the Connect method to initiate a
    ' connection.
    tcpClient.Connect
    End Sub

    Private Sub txtSendData_Change()
    tcpClient.SendData txtSend.Text
    End Sub

    Private Sub tcpClient_DataArrival _
    (ByVal bytesTotal As Long)
    Dim strData As String
    tcpClient.GetData strData
    txtOutput.Text = strData
    End Sub

    The code above creates a simple client-server application. To try the two together, run the project, and click Connect. Then type text into the txtSendData TextBox on either form, and the same text will appear in the txtOutput TextBox on the other form.

    Sergey Y. Tkachev



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

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

    Вопросы:


    Автор вопроса: VlasenkoFedor@mail.ru

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

       Как получить hMenu в User Control?


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

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

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


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

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

       Как сделать в программе проверку, запущено ли какое либо определённое приложение? К примеру интернет эксплорер. И если нет то, скажем отключить сеть? Тобишь отключить конкретное соединение. Или наоборот, запустить тот самый эксплорер?


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

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

       Требуется открывать WORDом текстовые файлы разной кодировки. В WORDe стоит галка подтверждения преобразования файлов при открытии, но тем не менее при обращении VB к WORDу для открытия файла не появляется окно выбора кодировки текста (при этом окно преобразования файла - кодированный текст - есть).
    Вопрос: как при помощи VB вызвать окно выбора кодировки <Преобразование файла (MS-DOS, Windows, Другая)>?


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

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

       Есть открытый документ Excel2000. Пользователь открывает документ еще раз, и открывается копия только для чтения.
    Как сделать так чтобы второй экземпляр не открывался, а активизировался ранее открытый?


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

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

       У кого-нибудь есть код, как переключить раскладку? Причем нужно, чтобы была возможность переключения не только rus\eng, но и на другие, желательно, чтобы код раскладки использовался стандартный (eng = 409, rus = 419).




    Ответы:


    Вопрос:

       Нужно в строке "<--+7123456789" или "+7123456789" оставить только цифры. Можно конечно обрезанием, но кажется есть такой оператор который сам оставляет только цифры.

    Ответ:

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

    Свойство ScaleHeight доступно только для чтения. Задавай Height, тогда и ScaleHeight изменится.


    Вопрос:

       Короче, такое дело... Хочу получить хэндл окон (textbox и listbox) в чужом приложении. Для этого ставлю хук на мышь:
    hHandle = SetWindowsHookEx(WH_MOUSE, AddressOf GetMouse, App.hInstance, 0)
    Почему при переходе на другое приложение хук отключается? Даже если перейду обратно на свое, все равно не работает? Если вояможно, как это исправить? И если кто-нить янает, может, как-нибудь яамутить получение хэндла как в SpyXX?

    Ответ:

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

    По-моему легче это делать не хуком а с помощью функции WindowFromPoint. В качестве X и Y передавай ей значения, полученные с помощью GetCursorPos.


    Вопрос:

       У меня вопрос по Winsock'у: реально ли тестировать прогу, юзающую winsock на компе, не подключеном к сети? (например: запустить на одном компе и клиент и сервер, клиент шлет инфу на IP 127.0.0.1, или что - то в этом духе)?

    Ответ:

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

    Это не просто как ты выразился "реально", а это единственный способ (если комп без сети). Тестироваться будет аж бегом. Сам так отлаживал проги.



    Ответ:

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

    Абсолютно реально. Я так всегда и делаю. Правда там есть свои тонкости, поэтому всё-таки тестировать время от времени прогу на реальной сетке или хотя бы через модем.



    Ответ:

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

    Все нормально, Winsock работает с портами... Так что тестировать прогу можно на компе без сети...


    Вопрос:

       Имеется объект со свойствами Property1, Property2,... и т.д. Как обратиться к этим свойствам через цикл? Т.е. требуется перебирать в цикле имя свойств.

    Ответ:

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

    Если элементы свойства которых ты хочешь перебирать одинаковые, то целесообразнее сделать ииз них массив. И тогда получится следующее:

    For ArrayIndex = 0 to 9 ' Если у тебя предположим 10 элементов textbox
         text1(ArrayIndex).text = "Index of this control = " & ArrayIndex
    Next ArrayIndex

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


    Вопрос:

       Как програмно убить активный процесс?

    Ответ:

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

    Перебираешь все процессы в памяти, находишь необходимый тебе и записываешь его PID в переменную (например PrID ), далее

         PrHnwd = OpenProcess(PROCESS_HEAP_REGION, True, PrID)
         call TerminateProcess(PrHnwd, 0)

    И твой процесс уходит в мир иной :)




    Ответ:

    Автор ответа: Хатламаджиян Виталий Арутюнович

    Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal
    dwProcessId As Long) As Long
    Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
    ...
    Dim hProcess As Long
    hProcess = OpenProcess(&H1F0FFF, 1, ID) 'ID - идентификатор удаляемого процесса
    TerminateProcess hProcess, 0
    ...



    Ответ:

    Автор ответа: Nechaev Sergey

    API function TerminateProcess
    Public Declare Function TerminateProcess Lib "kernel32" Alias "TerminateProcess" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long




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

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

    наверх


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

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

    http://subscribe.ru/
    E-mail: ask@subscribe.ru
    Адрес подписки
    Отписаться

    В избранное