Новый выпуск...
Читайте!
Книги
|
|
Переход на 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 можно найти
здесь.
наверх
Получение имен классов и всех заголовков активных окон
Даный пример покажет в окне Debug информацию о классе окон открытых приложений и текст заголовков всех активных окон
Private Declare Function apiGetClassName Lib "user32" Alias
"GetClassNameA" (ByVal Hwnd As Long, ByVal lpClassname As String, ByVal
nMaxCount As Long) As Long
Private Declare Function apiGetDesktopWindow Lib "user32" Alias
"GetDesktopWindow" () As Long
Private Declare Function apiGetWindow Lib "user32" Alias "GetWindow"
(ByVal Hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function apiGetWindowLong Lib "user32" Alias
"GetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function apiGetWindowText Lib "user32" Alias
"GetWindowTextA" (ByVal Hwnd As Long, ByVal lpString As String, ByVal aint As
Long) As Long
Private Const mcGWCHILD = 5
Private Const mcGWHWNDNEXT = 2
Private Const mcGWLSTYLE = (-16)
Private Const mcWSVISIBLE = &H10000000
Private Const mconMAXLEN = 255
Function fEnumWindows()
Dim lngx As Long, lngLen As Long
Dim lngStyle As Long, strCaption As String
lngx = apiGetDesktopWindow()
'Return the first child to Desktop
lngx = apiGetWindow(lngx, mcGWCHILD)
Do While Not lngx = 0
strCaption = fGetCaption(lngx)
If Len(strCaption) > 0 Then
lngStyle = apiGetWindowLong(lngx, mcGWLSTYLE)
'enum visible windows only
If lngStyle And mcWSVISIBLE Then
Debug.Print "Class = " & fGetClassName(lngx),
Debug.Print "Caption = " & fGetCaption(lngx)
End If
End If
lngx = apiGetWindow(lngx, mcGWHWNDNEXT)
Loop
End Function
Private Function fGetClassName(Hwnd As Long)
Dim strBuffer As String
Dim intCount As Integer
strBuffer = String$(mconMAXLEN - 1, 0)
intCount = apiGetClassName(Hwnd, strBuffer, mconMAXLEN)
If intCount > 0 Then
fGetClassName = Left$(strBuffer, intCount)
End If
End Function
Private Function fGetCaption(Hwnd As Long)
Dim strBuffer As String
Dim intCount As Integer
strBuffer = String$(mconMAXLEN - 1, 0)
intCount = apiGetWindowText(Hwnd, strBuffer, mconMAXLEN)
If intCount > 0 Then
fGetCaption = Left$(strBuffer, intCount)
End If
End Function
Private Sub Form_Load()
Call fEnumWindows
End Sub
наверх
Найти любое окно
Данный пример покажет, как можно по любому
куску текста заголовка определить номер
процесса в системе, и по этому номеру можно
определить полный заголовок окна
Option Explicit
Private Declare Function GetWindowText Lib "user32" Alias
"GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As
Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias
"GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Private Declare Function GetNextWindow Lib "user32" Alias "GetWindow"
(ByVal hwnd As Long, ByVal wFlag As Long) As Long
Public Function GetCaption(lhWnd As Long) As String
Dim sA As String, lLen As Long
lLen = GetWindowTextLength(lhWnd)
sA = String(lLen, 0)
Call GetWindowText(lhWnd, sA, lLen + 1)
GetCaption = sA
End Function
Public Function DLHFindWin(frm As Form, WinTitle As String, CaseSensitive As Boolean) As
Long
Dim lhWnd As Long, sA As String
lhWnd = frm.hwnd
Do
DoEvents
If lhWnd = 0 Then Exit Do
If CaseSensitive = False Then
sA = LCase(GetCaption(lhWnd))
WinTitle = LCase(WinTitle)
Else
sA = GetCaption(lhWnd)
End If
If InStr(sA, WinTitle) Then
DLHFindWin = lhWnd
Exit Do
Else
DLHFindWin = 0
End If
lhWnd = GetNextWindow(lhWnd, 2)
Loop
End Function
Private Sub Form_Load()
'вместо слова internet напиши любое слово или
выражение,
'содержащее в заголовке окна, которое вы ищете
Call MsgBox(DLHFindWin(Me, "internet", False))
Call MsgBox(GetCaption(DLHFindWin(Me, "internet", False)))
'ПРИМЕЧАНИЕ: вы можете использовать в вашей
программе как первую, так и вторую строку
End Sub
наверх
Заблокировать/Разблокировать любое окно в Win95/98/NT
Расположите на форме 2 элемента CommandButton. В коде 'Call DisWin("Form1", ...)' замените "Form1" на требуемое окно. После нажатия на кнопку в данном окне блокируются нажатия на кнопки мыши и клавиатуры. Но вы можете поставить таймер на 20 секунд и вписать в событие Timer1_Timer() код из второй кнопки.
#If Win32 Then
Private Declare Function EnableWindow& Lib "user32" (ByVal hWnd As Long,
ByVal fEnable As Long)
Private Declare Function FindWindow& Lib "user32" Alias
"FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String)
#Else
Private Declare Function EnableWindow% Lib "user" (ByVal hWnd As Integer, ByVal
aBOOL As Integer)
Private Declare Function FindWindow% Lib "user" (ByVal lpClassName As Any, ByVal
lpWindowName As Any)
#End If
Function DisWin(WindowName$, EnabOrDisab&) 'EX: Call DisWin("mIRC32", 0)
Dim lFndWnd As Long
Dim lDisEnWnd As Long
lFndWnd = FindWindow(vbNullString, WindowName$) 'Finds the Window Name
lDisEnWnd = EnableWindow(lFndWnd, ByVal EnabOrDisab&) 'Disables all mouse and keyboard
input to the specified window.
'In ByVal EnabOrDisab& you either enter: 0 to Disable Window or 1 to Enable it.
End Function
Private Sub Command1_Click()
Call DisWin("Form1", 0)
End Sub
Private Sub Command2_Click()
Call DisWin("Form1", 1)
End Sub
наверх
Поиск hwnd процесса на панели задач
Данный пример покажет hwnd процесса,
представленного на панели задач. В качестве
входного параметра можно задавать шаблон для
поиска. Честно говоря, я не совсем разобрался, как
написать шаблон, однако если вам пример
понравится, можете сами разобраться.
Обязательно добавьте
модуль в ваш проект. Расположите на форме элемент
CommandButton.
'КОД ФОРМЫ
Private Sub Command1_Click()
Debug.Print FindWindowWild("*Mi??OSoFt In[s-u]ernet*", False)
End Sub
'КОД МОДУЛЯ
Private Declare Function EnumWindows& Lib "user32" (ByVal lpEnumFunc As
Long, ByVal lParam As Long)
Private Declare Function GetWindowText Lib "user32" Alias
"GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As
Long) As Long
Private Declare Function IsWindowVisible& Lib "user32" (ByVal hwnd As Long)
Private Declare Function GetParent& Lib "user32" (ByVal hwnd As Long)
Dim sPattern As String, hFind As Long
Function EnumWinProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim k As Long, sName As String
If IsWindowVisible(hwnd) And GetParent(hwnd) = 0 Then
sName = Space$(128)
k = GetWindowText(hwnd, sName, 128)
If k > 0 Then
sName = Left$(sName, k)
If lParam = 0 Then sName = UCase(sName)
If sName Like sPattern Then
hFind = hwnd
EnumWinProc = 0
Exit Function
End If
End If
End If
EnumWinProc = 1
End Function
Public Function FindWindowWild(sWild As String, Optional bMatchCase As Boolean = True) As
Long
sPattern = sWild
If Not bMatchCase Then sPattern = UCase(sPattern)
EnumWindows AddressOf EnumWinProc, bMatchCase
FindWindowWild = hFind
End Function
наверх
Получение полного пути exe-файла из его хэндла
Данный пример покажет полный путь к
исполняемому (exe) файлу.
Расположите на форме элемент CommandButton.
В оригинальном примере в событии Command1_Click()
была лишь одна строчка (та, которая не
закомментирована). Но если вы добавите модуль из
примера "Поиск hwnd
процесса на панели задач", то вы сможете
определить полный путь exe-файла программы ИнтернетЭкспорер.
Не забудьте снять комментарий в событии Command1_Click().
Const TH32CS_SNAPPROCESS As Long = 2&
Const MAX_PATH As Long = 260
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwflags As Long
szexeFile As String * MAX_PATH
End Type
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As
Long, lpdwProcessId As Long) As Long
Private Declare Function CreateToolhelpSnapshot Lib "Kernel32" Alias
"CreateToolhelp32Snapshot" (ByVal lFlgas As Long, ByVal lProcessID As Long) As
Long
Private Declare Function ProcessFirst Lib "Kernel32" Alias
"Process32First" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "Kernel32" Alias
"Process32Next" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "Kernel32" (ByVal hPass As Long)
Public Function GetExeFromHandle(hwnd As Long) As String
Dim threadID As Long, processID As Long, hSnapshot As Long
Dim uProcess As PROCESSENTRY32, rProcessFound As Long
Dim i As Integer, szExename As String
' Get ID for window thread
threadID = GetWindowThreadProcessId(hwnd, processID)
' Check if valid
If threadID = 0 Or processID = 0 Then Exit Function
' Create snapshot of current processes
hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
' Check if snapshot is valid
If hSnapshot = -1 Then Exit Function
'Initialize uProcess with correct size
uProcess.dwSize = Len(uProcess)
'Start looping through processes
rProcessFound = ProcessFirst(hSnapshot, uProcess)
Do While rProcessFound
If uProcess.th32ProcessID = processID Then
'Found it, now get name of exefile
i = InStr(1, uProcess.szexeFile, Chr(0))
If i > 0 Then szExename = Left$(uProcess.szexeFile, i - 1)
Exit Do
Else
'Wrong ID, so continue looping
rProcessFound = ProcessNext(hSnapshot, uProcess)
End If
Loop
Call CloseHandle(hSnapshot)
GetExeFromHandle = szExename
End Function
Private Sub Command1_Click()
'снимите комментарий, если вы добавили модуль из
предыдущего примера
'MsgBox GetExeFromHandle(FindWindowWild("*Mi??OSoFt In[s-u]ernet*", False))
MsgBox GetExeFromHandle(Me.hwnd)
End Sub
наверх
Использование анимационного курсора
Добавьте 2 CommandButton на форму
'ПРИМЕР 1
Const GCL_HCURSOR = -12
Private Declare Function ClipCursor Lib "user32" (lpRect As Any) As Long
Private Declare Function DestroyCursor Lib "user32" (ByVal hCursor As Any) As
Long
Private Declare Function LoadCursorFromFile Lib "user32" Alias
"LoadCursorFromFileA" (ByVal lpFileName As String) As Long
Private Declare Function SetClassLong Lib "user32" Alias
"SetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As
Long) As Long
Private Declare Function GetClassLong Lib "user32" Alias
"GetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Dim lResult As Long
Dim mhAniCursor As Long
Dim mhAniCursor2 As Long
Private Sub Command1_Click()
'Replace 'C:\windows\cursors\hourglas.ani' with your ANI Cursor
mhAniCursor = LoadCursorFromFile("C:\windows\cursors\hourglas.ani")
lResult = SetClassLong((hwnd), GCL_HCURSOR, mhAniCursor)
End Sub
Private Sub Command2_Click()
lResult = SetClassLong((hwnd), GCL_HCURSOR, mhBaseCursor)
lResult = DestroyCursor(mhAniCursor)
End Sub
Private Sub Form_Load()
mhBaseCursor = GetClassLong((hwnd), GCL_HCURSOR)
End Sub
Private Sub Form_Unload(Cancel As Integer)
lResult = SetClassLong((hwnd), GCL_HCURSOR, mhBaseCursor)
lResult = DestroyCursor(mhAniCursor)
End Sub
'ПРИМЕР 2
Private Declare Function CopyCursor Lib "user32" Alias "CopyIcon"
(ByVal hcur As Long) As Long
Private Declare Function GetCursor Lib "user32" () As Long
Private Declare Function LoadCursorFromFile Lib "user32" Alias
"LoadCursorFromFileA" (ByVal lpFileName As String) As Long
Private Declare Function SetSystemCursor Lib "user32" (ByVal hcur As Long, ByVal
id As Long) As Long
Private Const OCR_NORMAL = 32512
Dim hCursor As Long, hOldCursor As Long
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If hCursor = 0 Then
Dim lRet As Long, a As String, hInstance As Long, hImage As Long
'укажите правильную директорию Windows
a = "c:\win\cursors\" & Dir$("c:\win\cursors\*.ani")
hCursor = LoadCursorFromFile(a)
If hCursor Then
lRet = GetCursor()
hOldCursor = CopyCursor(lRet)
lRet = SetSystemCursor(hCursor, OCR_NORMAL)
End If
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim lRet As Long
If hCursor Then
lRet = SetSystemCursor(hOldCursor, OCR_NORMAL)
End If
End Sub
наверх
Мои программы
BalloonMessage for MS Agent
BalloonMessage for Microsoft Agent реализует диалог программы с
пользователем, используя при этом технологию Microsoft Agent. OCX реализует три
типа диалоговых окон: InputBox, MsgBox и MsgLabels.
Автор: Шатрыкин Иван. Соавтор: Павел Сурменок.
наверх
Вопрос/Ответ
Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы.
Вопросы:
Автор вопроса: Max
Ответ ожидается по этому
адресу
Как прекрепить к проэкту ещё одну форму, и как Сделать так чтоб InputBox реагировал на ввод данных, и как изменить в свойствх программы "ПРОИЗВОДИТЕЛЯ"?
Автор вопроса:
Костик
Ответ ожидается по этому
адресу
Вопрос 1:
Как сделать так чтобы ия папки VB60, где лежит моя прога яапускающая help.hlp файл, открывался help.hlp файл?
Вопрос 2:
Как можно уянать что делает какой-либо dll файл?
Автор вопроса:
Шевченко Александр
Ответ ожидается по этому
адресу
Как программно вложить файл в письмо?
Автор вопроса:
Иван
Ответ ожидается по этому
адресу
Как узнать (программно) где лежит шаблон Normal.dot в Office 97/2000 ?
Автор вопроса:
Иван
Ответ ожидается по этому
адресу
Как из программы на VB отправить документ Word на печать ?
Автор вопроса:
Vlad
Ответ ожидается по этому
адресу
помогите составить оптимальный алгоритм создания дерева (treeviewer)из таблицы, в которой два основных поля - ссылка на верхний и нижний узел ( rec_up,rec_down )
Автор вопроса:
Вадим
Ответ ожидается по этому
адресу
VB. Как писать в определенное место файла? Типа патч.
Как найти файл и проверить (сравнить) дату и изменить ее по своему желанию?
Автор вопроса:
Ilja A. Bakhtin
Ответ ожидается по этому
адресу
Как сделать так, чтобы программа работала в ДОСовском окне.
Автор вопроса:
daedmen
Ответ ожидается по этому
адресу
Народ подскажите плиз как считать/записать в файл бинарный код и где мне его в VB потом хранить ведь в переменные типа iteger и long нечего не поместиться .
Автор вопроса:
Vladimir
Ответ ожидается по этому
адресу
Как с помощью Microsoft MAPI Controls 6.0 отправить письмо в формате HTML?
Автор вопроса:
Эдуард Маркелов
Ответ ожидается по этому
адресу
Как получить возможность, переслать тот или иной файл на FTP сервер?
Ответы:
Вопрос:
При открытии почтового клиента хочу чтобы там соядавалось письмо такое:
Здравствуйте, ...
Привет вам ия ...
Собственно вопрос: Что нужно добавить в строку
mailto:user@server.ru?subject=Hello?body=__вот__сюда
чтобы соядалось 2 строки в теле письма! СПАСИБО!
Ответ:
Автор ответа:
P@Ssword
Пиши:
mailto:pas_sword@tut.by?subject=Samit,%20hi!&body=Yoy!%20Welcome%20home,%20Samit!%0D%0DBest%20Regards%0DP@Ssword,%20mailto:pas_sword@tut.by
Проверено на MacroHard Outgluk 2OOO %-)
Вопрос:
Как из программы набрать телефонный номер?
Ответ:
Автор ответа:
Rutshtein Alex
Используй компоненту Microsoft Comm Control
Вопрос:
Как из программы набрать телефонный номер?
Ответ:
Автор ответа:
Dilon
Чтобы набрать номер надо сначала шлёпнуть на форму инструмент Microsoft Comm Control, добавить текстовое окно и кнопочку Dial.Код:
''''''''''''''''
Private Sub cmdDial_Click()
Dim strA As String
strA = txtNumber.Text
comOne.CommPort = 1
comOne.Settings = "9600,N,8,1" 'укажем скорость порта , проверка четности, кол-во битов и контр бит
comOne.PortOpen = True
comOne.Output = "ATDT" & strA & vbCr
End Sub
Private Sub Form_Unload(Cancel As Integer)
comOne.PortOpen = False
End Sub
''''''''''''''''
Вопрос:
В предыдущем выпуске рассылки (73) обсуждался вопрос о блокировке Ctrl+Alt+Del и о сокрытии проги в списке задач с помощью функций Win32API. По советам авторов ортветов всё отлично работает под Windows98, но к сожалению не под WindowsXP. Как реализовать блокировку Ctrl+Alt+Del или скрыть прогу в списке задач под Windows 2k\XP с помощью функций Win32API?
Ответ:
Автор ответа:
Dilon
По-моему, что в XP блокировать комбинацию Ctrl+Alt+Del невозможно
Вопрос:
В предыдущем выпуске рассылки (73) обсуждался вопрос о блокировке Ctrl+Alt+Del и о сокрытии проги в списке задач с помощью функций Win32API. По советам авторов ортветов всё отлично работает под Windows98, но к сожалению не под WindowsXP. Как реализовать блокировку Ctrl+Alt+Del или скрыть прогу в списке задач под Windows 2k\XP с помощью функций Win32API?
Ответ:
Автор ответа:
P@Ssword
Хотя нет, можно попробовать. Просто берёшь любой постоянный процесс (чтобы всегда был открыт, например explorer.exe), создаёшь в нём поток (thread) и запускаешь в этом потоке свою прогу. Многие ведь не знают, что обычно у эксплорера Х потоков, и не заметят увеличения Х на единицу. К тому же это число постоянно меняется (напр. открытие нового окна - +1поток), так что отследить такую прогу будет очень сложно :)
Вопрос:
Как работать с TabStrip?
Ответ:
Автор ответа:
Dilon
Мне кажется, что работать с TabStrip очень неудобно(нужно создавать контейнер для элементов управления, потом это всё прописывать в коде). Лучший вариант,на мой взгляд,- использовать SSTab(Microsoft Tabbed Control). Здесь вы просто рисуете элементы управления, не заботясь о всяких там контейнерах.
Вопрос:
Можно ли где-то скачать учебник для начинающего програмера. Желательно в формате PDF.
Ответ:
Автор ответа:
Dilon
Посмотри здесь http://emanual.ru/
Можете заполнить эту форму, либо отослать вопрос
СЮДА
Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта.
наверх