|
|
|
Как обратится к активному окну из API ?
|
|||
|---|---|---|---|
|
#18+
Привет! к сожалению не специалист в win api ... Может кто подскажит какие использовать функции ... необходимо решить следующую задачу: ... появляется окно, необходимо программно из VBA нажать на кнопку OK, фокус в ней и можно нажимать через клавишу Ввод ... Как я понял для этого можно использовать функцию GetKeyboardState, но как обратися к окну? Conn.ShowVariableScreen (True) 'запускает окно но как дальше применить код: GetKeyboardState (MassiveKey(0)) MassiveKey(VK_NUMLOCK) = 1 SetKeyboardState MassiveKey(0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2009, 14:42 |
|
||
|
Как обратится к активному окну из API ?
|
|||
|---|---|---|---|
|
#18+
Во-первых, с окном делать ничего не нужно, достаточно выполнить SendKeys "~" или "{ENTER}". Во-вторых, если команда Conn.ShowVariableScreen (True) открывает модальное окно, то перед ней нужно создать и запустить таймер, в котором и слать SendKeys. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2009, 15:43 |
|
||
|
Как обратится к активному окну из API ?
|
|||
|---|---|---|---|
|
#18+
Спасибо Antonariy, разобрался... но задача усложнилась ... в окне есть текстбоксы, не подскажите c помощью каких функций можно обратиться к элементам окна, установить значения ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2009, 12:19 |
|
||
|
Как обратится к активному окну из API ?
|
|||
|---|---|---|---|
|
#18+
FindWindow FindNextWindow SetText ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2009, 12:50 |
|
||
|
Как обратится к активному окну из API ?
|
|||
|---|---|---|---|
|
#18+
А лучше EnumChildWindows ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2009, 13:22 |
|
||
|
Как обратится к активному окну из API ?
|
|||
|---|---|---|---|
|
#18+
Уважаемые Гуру помогите разобратся ... вот код который я вызываю в 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 пробовал, она возвращает элементы окна ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2009, 17:00 |
|
||
|
Как обратится к активному окну из API ?
|
|||
|---|---|---|---|
|
#18+
т.е. не возращает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2009, 17:03 |
|
||
|
Как обратится к активному окну из API ?
|
|||
|---|---|---|---|
|
#18+
т.е. не возращает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2009, 17:21 |
|
||
|
Как обратится к активному окну из API ?
|
|||
|---|---|---|---|
|
#18+
Что то подобное я делал сначала надо выделить окно 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2009, 20:53 |
|
||
|
|

start [/forum/topic.php?fid=60&fpage=167&tid=2161332]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 329ms |

| 0 / 0 |
