Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Простой вопрос по hwnd Добавлено: 23.07.03 17:46  

Автор вопроса:  Padre  | Web-сайт: localhost | ICQ: 346632205 
Никак не могу получить хвнд richtextbox'а имея хвнд окна на котором он распаоложен.

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 ZeroX



ICQ: 220401330 

Вопросов: 47
Ответов: 406
 Профиль | | #1 Добавлено: 23.07.03 17:49

Как ты его получаешь?

Вопрос может показаться глупым, но кинь код - проанализируем

Ответить

Номер ответа: 2
Автор ответа:
 Gravity



Вопросов: 6
Ответов: 120
 Профиль | | #2 Добавлено: 23.07.03 18:43

Padre что за тупой вопрос ?

RichTextBox1.Hwnd

и всё ...

Ответить

Номер ответа: 3
Автор ответа:
 Padre



ICQ: 346632205 

Вопросов: 25
Ответов: 215
 Web-сайт: localhost
 Профиль | | #3
Добавлено: 23.07.03 23:50

2Gravity  мне нужен hwnd Richtextbox'а находящегося на чужом окне.

2ZeroX: методика взята из API-Guide'а. Я нахожу все хвнд в системе и по windowtext нахожу нужный хвнд окна. Затем мне нужно

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

'modul
Public XThwnd As Long'хвнд окна

Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean
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" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long
 

Public Function EnumWindowsProc(ByVal hWnd As Long, ByVal lParam As Long) As Boolean
     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

 

'form load

EnumWindows AddressOf EnumWindowsProc, ByVal 0&

'часть кода для определения хвнд текстбокса. Взято всё из того же API-Guide
'модуль
 
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-сайт: malyav.narod.ru
 Профиль | | #4
Добавлено: 24.07.03 08:27

Мне как то нужна была подобная фича и вот что я наваял тогда.

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)
'рекурсивный вызов для поиска всех дочерних окон
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-сайт: localhost
 Профиль | | #6
Добавлено: 25.07.03 16:04
2Malyav а откуда взялось GetClass и GetText?

Ответить

Номер ответа: 7
Автор ответа:
 Malyav



ICQ: 8440085 

Вопросов: 15
Ответов: 117
 Web-сайт: malyav.narod.ru
 Профиль | | #7
Добавлено: 25.07.03 19:05

PADRE, извиняюсь, поторопился недосмотрел.

В общем у меня там эти функции в отдельном модуле,  вместе со всеми другими апишными объявлениями, ниже его код

 

Option Explicit
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

Public Type RECT
 Left As Long
 Top As Long
 Right As Long
 Bottom As Long
End Type

Public Const WM_GETTEXTLENGTH = &HE
Public Const WM_GETTEXT = &HD

Public Const SW_HIDE = 0
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_BOTTOM = 1
Public Const HWND_NOTOPMOST = -2
Public Const HWND_TOP = 0
Public Const HWND_TOPMOST = -1

Public Const SWP_DRAWFRAME = &H20
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

Public Function GetClass(wHwnd As Long) As String
Dim buffer As String
Dim retval As Long
    buffer = Space(250)
    retval = GetClassName(wHwnd, buffer, 250)
    GetClass = Left(buffer, retval)
End Function

Public Function GetText(wHwnd As Long) As String
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

 

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам