Страница: 1 |
Как ты его получаешь? Вопрос может показаться глупым, но кинь код - проанализируем Padre что за тупой вопрос ? RichTextBox1.Hwnd и всё ... 2Gravity мне нужен hwnd Richtextbox'а находящегося на чужом окне. 2ZeroX: методика взята из API-Guide'а. Я нахожу все хвнд в системе и по windowtext нахожу нужный хвнд окна. Затем мне нужно найти хвнд ричтекстбокса чтобы передать ему текст. Тут я использую EnumChildWindows, но ничего путного пока не получилось 'modul Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean ByVal cch As Long) As Long Public Function EnumWindowsProc(ByVal hWnd As Long, ByVal lParam As Long) As Boolean 'form load EnumWindows AddressOf EnumWindowsProc, ByVal 0& 'часть кода для определения хвнд текстбокса. Взято всё из того же API-Guide Мне как то нужна была подобная фича и вот что я наваял тогда. Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, ByVal lpszClass As Any, ByVal lpszWindow As Any) As Long Private Sub FindAllChilds(ParentHWnd As Long) PADRE, извиняюсь, поторопился недосмотрел. В общем у меня там эти функции в отдельном модуле, вместе со всеми другими апишными объявлениями, ниже его код Option Explicit Public Type RECT Public Const WM_GETTEXTLENGTH = &HE Public Const SW_HIDE = 0 Public Const HWND_BOTTOM = 1 Public Const SWP_DRAWFRAME = &H20 Public Function GetClass(wHwnd As Long) As String Public Function GetText(wHwnd As Long) As String Страница: 1 |
Вопрос: Простой вопрос по hwnd
Добавлено: 23.07.03 17:46
Автор вопроса: Padre | Web-сайт:
Никак не могу получить хвнд richtextbox'а имея хвнд окна на котором он распаоложен.
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
ZeroX
ICQ: 220401330
Вопросов: 47
Ответов: 406
Профиль | | #1
Добавлено: 23.07.03 17:49
Номер ответа: 2
Автор ответа:
Gravity
Вопросов: 6
Ответов: 120
Профиль | | #2
Добавлено: 23.07.03 18:43
Номер ответа: 3
Автор ответа:
Padre
ICQ: 346632205
Вопросов: 25
Ответов: 215
Web-сайт:
Профиль | | #3
Добавлено: 23.07.03 23:50
Public XThwnd As Long'хвнд окна
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String,
Public Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long
Dim sSave As String, Ret As Long
Ret = GetWindowTextLength(hWnd)
sSave = Space(Ret)
GetWindowText hWnd, sSave, Ret + 1
If sSave = "Testing program" Then
XThwnd = hWnd
End If
EnumWindowsProc = True
End Function
'модуль
Public Function EnumChildProc(ByVal hWnd As Long, ByVal lParam As Long) As Long
Dim sSave As String
'Get the windowtext length
sSave = Space$(GetWindowTextLength(hWnd) + 1)
'get the window text
GetWindowText hWnd, sSave, Len(sSave)
'remove the last Chr$(0)
sSave = Left$(sSave, Len(sSave) - 1)
If sSave <> "" Then Form1.Print sSave
'continue enumeration
EnumChildProc = 1
End Function
'форма
EnumChildWindows XThwnd, AddressOf EnumWindowsProc, ByVal 0&
Номер ответа: 4
Автор ответа:
Malyav
ICQ: 8440085
Вопросов: 15
Ответов: 117
Web-сайт:
Профиль | | #4
Добавлено: 24.07.03 08:27
'рекурсивный вызов для поиска всех дочерних окон
Dim sTemp As String
Dim ChildHwnd As Long
Do
ChildHwnd = FindWindowEx(ParentHWnd, ChildHwnd, CLng(0), CLng(0))
If ChildHwnd <> 0 Then
FindAllChilds (ChildHwnd)
sTemp = "Класс объекта: " & Chr$(9) & GetClass(ChildHwnd) & vbCrLf & _
"Хэндлер:" & Chr$(9) & Chr$(9) & ChildHwnd & vbCrLf & _
"Текст:" & Chr$(9) & Chr$(9) & GetText(ChildHwnd) & vbCrLf & vbCrLf
Text1.Text = frmMain.Text1.Text & sTemp
sTemp = ""
End If
Loop While ChildHwnd <> 0
End Sub
Номер ответа: 5
Автор ответа:
ZeroX
ICQ: 220401330
Вопросов: 47
Ответов: 406
Профиль | | #5
Добавлено: 24.07.03 10:44
2Padre: Я пороюсь - где был код поработоспособней (API-Guide рульная штука, но там много воды)
Номер ответа: 6
Автор ответа:
Padre
ICQ: 346632205
Вопросов: 25
Ответов: 215
Web-сайт:
Профиль | | #6
Добавлено: 25.07.03 16:04
2Malyav а откуда взялось GetClass и GetText?
Номер ответа: 7
Автор ответа:
Malyav
ICQ: 8440085
Вопросов: 15
Ответов: 117
Web-сайт:
Профиль | | #7
Добавлено: 25.07.03 19:05
Declare Function CreateDC& Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, ByVal lpInitData As Any)
Declare Function DeleteDC& Lib "gdi32" (ByVal hdc As Long)
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)
Declare Function GetWindowRect& Lib "user32" (ByVal Hwnd As Long, lpRect As RECT)
Declare Function IsWindow& Lib "user32" (ByVal Hwnd As Long)
Declare Function BitBlt& Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long)
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal Hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function GetWindowTextLength Lib "user32.dll" Alias "GetWindowTextLengthA" (ByVal Hwnd As Long) As Long
Public Declare Function GetClassName& Lib "user32" Alias "GetClassNameA" (ByVal Hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long)
Public Declare Function SendMessageByNum& Lib "user32" Alias "SendMessageA" (ByVal Hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long)
Public 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
Declare Function GetPixel Lib "gdi32.dll" (ByVal hdc As Long, ByVal nXPos As Long, ByVal nYPos As Long) As Long
Declare Function ShowWindow Lib "user32.dll" (ByVal Hwnd As Long, ByVal nCmdShow As Long) As Long
Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As Any) As Long
Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, ByVal lpszClass As Any, ByVal lpszWindow As Any) As Long
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Const WM_GETTEXT = &HD
Public Const SW_MAXIMIZE = 3
Public Const SW_MINIMIZE = 6
Public Const SW_NORMAL = 1
Public Const SW_SHOW = 5
Public Const SW_SHOWNA = 8
Public Const SW_SHOWNOACTIVATE = 4
Public Const HWND_NOTOPMOST = -2
Public Const HWND_TOP = 0
Public Const HWND_TOPMOST = -1
Public Const SWP_FRAMECHANGED = &H20
Public Const SWP_HIDEWINDOW = &H80
Public Const SWP_NOACTIVATE = &H10
Public Const SWP_NOCOPYBITS = &H100
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOREDRAW = &H8
Public Const SWP_NOZORDER = &H4
Public Const SWP_SHOWWINDOW = &H40
Dim buffer As String
Dim retval As Long
buffer = Space(250)
retval = GetClassName(wHwnd, buffer, 250)
GetClass = Left(buffer, retval)
End Function
Dim retval As Long
Dim TrimSpace As String
retval = SendMessageByNum(wHwnd, WM_GETTEXTLENGTH, 0&, 0&
TrimSpace = Space$(retval)
retval = SendMessageByString(wHwnd, WM_GETTEXT, retval + 1, TrimSpace)
GetText = TrimSpace
End Function