- Код: Выделить всё
Private Sub Command2_Click()
Shell ("D:/ONIKS.000/ow06.exe")
Do Until hWindow > 0
hWindow = FindWindow(vbNullString, "Имя окна")
Loop
hMenu = GetMenu(hWindow)
hMenuSub = GetSubMenu(hMenu, 0)
hMenuItm = GetMenuItemID(hMenuSub, 0)
PostMessage hWindow, WM_COMMAND, hMenuItm, 0
Do Until hParent > 0
hParent = FindWindow(vbNullString, "Открыть")
Loop
If (hParent) Then
sText = "TEST"
ReDim sByteArr(Len(sText) + 1)
sByteArr = StringToByteArray(sText)
Do Until hChild > 0
hChild = GetDlgItem(hParent, 1152)
Loop
If (hChild) Then
SendMessage hChild, WM_SETTEXT, ByVal 0&, sByteArr(0)
TextLen = SendMessage(hChild, WM_GETTEXTLENGHT, 0, 0) + 1
If (TextLen) Then
WinText = String(TextLen, Chr$(0))
Call SendMessage(hChild, WM_GETTEXT, TextLen, ByVal WinText)
End If
End If
End If
End Sub
Программа запускается, запускает другую программу, через верхнее меню добираюсь до диалога выбора файлов... и не могу загнать строку в поле имени открываемых файлов - она остается пустой, причем, мне кажется (может и кажется конечно уже) что в поле нечто мелькает. Далее пытаюсь из этого поля считать текст - в переменной WinText он действительно есть. Пошагово программа работает хорошо, все появляется там где и нужно, а в обычном режиме не хочет. Еще работает если сделать:
- Код: Выделить всё
for i = 0 To 100000
SendMessage hChild, WM_SETTEXT, ByVal 0&, sByteArr(0)
Next i
но почему так ? Система обработать не успевает ? Или что ? И как бороться с этим ? Спасибо.