Использование GetDlgItemText для получения текста из контрола - VB

Узнай цену своей работы

Формулировка задачи:

Пытаюсь получить текст из блокнота. GetDlgItemText ничего не передает в буфер. Код ошибки - 0. Помогите разобраться.
Листинг программы
  1. Option Explicit
  2. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  3. 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
  4. Private Declare Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
  5. Private Declare Function GetDlgItemText Lib "user32" Alias "GetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, lpString As String, ByVal nMaxCount As Long) As Long
  6. Sub main()
  7. Dim H_Parent As Long, H_Control As Long, H_Item As Long
  8. Dim lngIndex As Long
  9. Dim strText As String
  10. Dim lngTextLength As Long
  11. H_Parent = FindWindow("notepad", vbNullString) 'Try with FindWindow
  12. If H_Parent <> 0 Then
  13. H_Control = FindWindowEx(H_Parent, 0, "edit", vbNullString)
  14. If H_Control <> 0 Then
  15. For lngIndex = 0 To 1000000
  16. H_Item = GetDlgItem(H_Parent, lngIndex)
  17. If H_Item = H_Control Then
  18. strText = Space(255)
  19. lngTextLength = GetDlgItemText(H_Parent, lngIndex, strText, len(strText))
  20. Debug.Print Err.LastDllError
  21. If lngTextLength <> 0 Then
  22. Debug.Print lngIndex, H_Item, lngTextLength, strText
  23. End If
  24. End If
  25. Next
  26. End If
  27. End If
  28. End Sub
GetDlgItem - http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx GetDlgItemText - http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

Решение задачи: «Использование GetDlgItemText для получения текста из контрола»

textual
Листинг программы
  1. Option Explicit
  2.  
  3. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  4. 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
  5. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  6.  
  7. Private Const WM_GETTEXT = &HD
  8. Private Const WM_GETTEXTLENGTH = &HE
  9.  
  10. Private Sub Form_Load()
  11.     Dim H_Parent As Long, H_Control As Long
  12.     Dim strText As String
  13.     Dim lngTextLength As Long
  14.    
  15.     H_Parent = FindWindow("notepad", vbNullString) 'Try with FindWindow
  16.    
  17.     If H_Parent <> 0 Then
  18.         H_Control = FindWindowEx(H_Parent, 0, "edit", vbNullString)
  19.         If H_Control <> 0 Then
  20.             lngTextLength = SendMessage(H_Control, WM_GETTEXTLENGTH, 0, ByVal 0&)
  21.             strText = Space(lngTextLength + 1)
  22.             SendMessage H_Control, WM_GETTEXT, lngTextLength + 1, ByVal strText
  23.             strText = Left(strText, lngTextLength)
  24.         End If
  25.     End If
  26. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы