powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как обратится к активному окну из API ?
9 сообщений из 9, страница 1 из 1
Как обратится к активному окну из API ?
    #35819755
evansl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет!

к сожалению не специалист в win api ... Может кто подскажит какие использовать функции ...

необходимо решить следующую задачу:

... появляется окно, необходимо программно из VBA нажать на кнопку OK, фокус в ней и можно нажимать через клавишу Ввод ...
Как я понял для этого можно использовать функцию GetKeyboardState, но как обратися к окну?

Conn.ShowVariableScreen (True) 'запускает окно

но как дальше применить код:

GetKeyboardState (MassiveKey(0))

MassiveKey(VK_NUMLOCK) = 1

SetKeyboardState MassiveKey(0)
...
Рейтинг: 0 / 0
Как обратится к активному окну из API ?
    #35819994
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, с окном делать ничего не нужно, достаточно выполнить SendKeys "~" или "{ENTER}".
Во-вторых, если команда Conn.ShowVariableScreen (True) открывает модальное окно, то перед ней нужно создать и запустить таймер, в котором и слать SendKeys.
...
Рейтинг: 0 / 0
Как обратится к активному окну из API ?
    #35821847
evansl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Antonariy, разобрался... но задача усложнилась ... в окне есть текстбоксы, не подскажите c помощью каких функций можно обратиться к элементам окна, установить значения ...
...
Рейтинг: 0 / 0
Как обратится к активному окну из API ?
    #35821956
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FindWindow FindNextWindow SetText
...
Рейтинг: 0 / 0
Как обратится к активному окну из API ?
    #35822084
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А лучше EnumChildWindows
...
Рейтинг: 0 / 0
Как обратится к активному окну из API ?
    #35825294
evansl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые Гуру помогите разобратся ...
вот код который я вызываю в VBA:

Public Sub HowManyProc(ByVal HandleW As Long, ByVal msg As Long, _
ByVal idEvent As Long, ByVal TimeSys As Long)
Dim HandleWin As Long
Dim Text2 As String
Dim i As Long
Text2 = "Выбрать значения переменных"
HandleWin = FindWindow(vbNullString, Text2)
If HandleWin <> 0 Then
MsgBox HandleWin

End If

End Sub

'Запускаем таймер
Public Sub Start()
Finish
IdEv = SetTimer(0&, 0&, 2000, AddressOf HowManyProc)
End Sub

'Запускаем программу
Private Sub cmdUpdate_Click()

Start
Call Conn.ShowVariableScreen(True)

End Sub

при выполнении Call Conn.ShowVariableScreen(True) вызывается окно в котором 4 текстовых элемента ... из кода получаю его Handle, каким образом обратится к этим элементам?

Функцию EnumChildWindows пробовал, она возвращает элементы окна ...
...
Рейтинг: 0 / 0
Как обратится к активному окну из API ?
    #35825307
evansl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.е. не возращает
...
Рейтинг: 0 / 0
Как обратится к активному окну из API ?
    #35825369
evansl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.е. не возращает
...
Рейтинг: 0 / 0
Как обратится к активному окну из API ?
    #35825793
slope
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что то подобное я делал
сначала надо выделить окно
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowsName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal cCmdShow As Long) As Long
Private Sub Command1_Click()
Dim lFoundWindow As Long
Dim lOK As Long
Dim lOK1 As Long
Dim X As Variant
lFoundWindow = FindWindow(vbNullString, Text1.Text)
If lFoundWindow = 0 Then
MsgBox ("такого нет окна")
Else
lOK = SetForegroundWindow(lFoundWindow)
lOK1 = ShowWindow(lFoundWindow, 9)
lOK1 = ShowWindow(lFoundWindow, 10)
lFoundWindow = 0
lOK = 0
lOK1 = 0
End If
End Sub
потом найти хэндл окна(кнопки которую нажимать надо) с помощью
EnumChildWindows и FindWindow
после чего слать сообщение на этот хэндл
типа вот какой то кусок кода разберешься
---------------------------------------------------
Option Explicit
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As Any, ByVal lpWindowName As Any) As Long


Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWndParent As Long, _
ByVal hWndChildAfter As Long, _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long


Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal Msg As Long, wParam As Any, lParam As Any) As Long

Public Const WM_LBUTTONDOWN = &HF5 'с этой работает нажатие!!!!!!! 245*&HF5
'Public Const WM_LBUTTONDOWN = &HD
'поиск хэндла кнопки
Public Function find_hwnd_button(klass As String, name_button As String) As Long
find_hwnd_button = FindWindowEx(FindWindow(vbNullString, "кнопка_"), ByVal 0&, klass, name_button) 'определяем дескриптор кнопки
MsgBox Str(find_hwnd_button)
'***************************************************
'hBut = FindWindowEx(FindWindow(vbNullString, "кнопка_"), ByVal 0&, "ThunderRT6CommandButton", "старт") 'определяем дескриптор кнопки
'класс окна ("ThunderRT6CommandButton") определяем прогой типа spy!!!!!!!
End Function

'посылаем нажатие кнопке
Public Sub send_сlick_button(hBut As Long)
Call SendMessage(hBut, WM_LBUTTONDOWN, 1, 1)
End Sub
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как обратится к активному окну из API ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]