Olive77
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору В продолжении темы Код: 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 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 Private Const BM_CLICK = &HF5 Sub BtnClick() Dim lhwnd As Long Dim sClassName As String Dim sCaption As String sClassName = "ThunderRT6FormDC" ' класс окна sCaption = "MyDialog" ' заголовок окна ' Находим нужное окно lhwnd = FindWindowEx(0, 0, sClassName, sCaption) sClassName = "ThunderRT6CommandButton" ' класс кнопки sCaption = "OK" ' заголовок кнопки ' Находим нужную кнопку в найденном окне lhwnd = FindWindowEx(lhwnd, 0, sClassName, sCaption) ' Посылаем кнопке событие BM_CLICK SendMessage lhwnd, BM_CLICK, 0, 0 End Sub | Код замечательно работает для нажимания кнопок. А вот вариант с посыланием текста в TextBox что-то не проходит. В диалоговом окне присутствуют 3 TextBoxа. В интернете нашел, что надо сначала определить первый TextBox, через него второй, и т.д. Кто-то пишет, что порядок нахождения обратный. В-общем, попробывал и так и этак. Ничего не проходит, а в одном случае даже Excel вылетает. Код: 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 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 Private Const BM_CLICK = &HF5 Private Const WM_SETTEXT As Long = &HC& Sub BtnClick() Dim lhwnd As Long Dim lhwnd_txt As Long Dim lhwnd_btn As Long Dim sClassName As String Dim sCaption As String sClassName = "ThunderRT6FormDC" ' window class sCaption = "List Creation" ' window title ' find required window lhwnd = FindWindowEx(0, 0, sClassName, sCaption) sClassName = "ThunderRT6TextBox" ' text class ' find required textbox in the window 'Find First window with this "ThunderRT6TextBox" class hWndchild = FindWindowEx(lhwnd, 0, "ThunderRT6TextBox", vbNullString) 'first text box 'Find Next window with this "ThunderRT6TextBox" class hWndchild = FindWindowEx(lhwnd, hWndchild, "ThunderRT6TextBox", vbNullString) 'second text box 'Find Next window with this "ThunderRT6TextBox" class hWndchild = FindWindowEx(lhwnd, hWndchild, "ThunderRT6TextBox", vbNullString) 'third text box 'send text sMsg = "TEST" SendMessage hWndchild, WM_SETTEXT, 0&, sMsg sClassName = "ThunderRT6CommandButton" ' button class sCaption = "OK" ' button title ' find required button in the window lhwnd_btn = FindWindowEx(lhwnd, 0, sClassName, sCaption) ' send event BM_CLICK to the button SendMessage lhwnd_btn, BM_CLICK, 0, 0 End Sub | Где собака порылась? | Всего записей: 1271 | Зарегистр. 26-12-2002 | Отправлено: 14:51 12-09-2007 | Исправлено: Olive77, 14:54 12-09-2007 |
|