нажать чужую кнопку

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
evgm00
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 12.02.2007 (Пн) 20:53

нажать чужую кнопку

Сообщение evgm00 » 02.11.2007 (Пт) 10:18

Привет всем
Для автоматизации необходимо в в чужом окне (вывод на печать)
нажать кнопку hWnd окна и кнопки знаю:

hWnd = FindWindow("#32770", "Window")
If hWnd <> 0 Then
hWndCMD = FindWindowEx(hWnd, 0, "BUTTON", "Save")
If hWndCMD <> 0 Then
PostMessage(hWnd, WM_KEYDOWN, VK_TAB, 0)
PostMessage(hWndCMD, WM_KEYDOWN, VK_RETURN, 0)

почему то при VK_TAB кнопка не получает фокус и нажатие ентер передается др кнопке
что не так я делаю???
заранее спасибо

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 02.11.2007 (Пт) 12:25

А обязательно на кнопку надо Enter'ом нажимать? Может BM_CLICK'ом можно обойтись? Ну или на крайний случай если охота прямо так уж с извратом (извини конечно, но имхо это именно так и есть) можно сначала кнопке послать WM_SETFOCUS а потом послать Enter. И вообще тема уже поднималась много раз.
Подпись проходит рефакторинг

evgm00
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 12.02.2007 (Пн) 20:53

нажать чужую кнопку

Сообщение evgm00 » 02.11.2007 (Пт) 13:56

Lumen писал(а):А обязательно на кнопку надо Enter'ом нажимать? Может BM_CLICK'ом можно обойтись? Ну или на крайний случай если охота прямо так уж с извратом (извини конечно, но имхо это именно так и есть) можно сначала кнопке послать WM_SETFOCUS а потом послать Enter. И вообще тема уже поднималась много раз.


Спасибо
1 SETFOCUS что-то тоже не получилось а вот кликом все работает
2 я пробовал поиск честное слово но что-то ничего не нашел (не там искал наверное)
3 а если это кажется извратом то подскажите пожалуйста как реализовать это правильно...

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 02.11.2007 (Пт) 14:13

Мое мнение - это использовать SendMessage(hwndbutton, BM_CLICK, 0, 0), но это только мое мнение (как я бы стал реализовывать нажатие на кнопку). Может у тебя условия задачи такие, что никак кроме как Enter'ом не нажмешь. Так что не принимай те слова по поводу изврата близко. Это всего лишь мое мнение. И я хочу тебе помочь (подсказать решение). Вотъ :wink:
Подпись проходит рефакторинг

evgm00
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 12.02.2007 (Пн) 20:53

нажать чужую кнопку

Сообщение evgm00 » 07.12.2007 (Пт) 10:33

а подскажите еще пожалуйста - почему из среды разработки текст в окно вставляется а из ехе нет???

SendMessage(hWinTXT, WM_SETTEXT, 0, ByVal sFileName)

заранее спасибо

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 07.12.2007 (Пт) 10:43

а куда вставляем то? откуда хэндл берем?
Весь мир матрица, а мы в нем потоки байтов!

evgm00
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 12.02.2007 (Пн) 20:53

нажать чужую кнопку

Сообщение evgm00 » 07.12.2007 (Пт) 11:05

вставляем в диалоговое окно сохранения файла
все хендлы есть и правильные - проверено
получаю так:

hWin = FindWindow("#32770", "SaveFile")
If hWin <> 0 Then
hWinTXT = FindWindowEx(hWin, 0, "COMBOBOXEX32", vbNullString)
hWinTXT = FindWindowEx(hWinTXT, 0, "COMBOBOX", vbNullString)
hWinTXT = FindWindowEx(hWinTXT, 0, "EDIT", vbNullString)
If hWinTXT <> 0 Then
RetVal = SendMessage(hWinTXT, WM_SETTEXT, 0, ByVal sFile_Name)
RetVal = SendMessage(hWin, WM_KEYDOWN, VK_RETURN, 0)

evgm00
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 12.02.2007 (Пн) 20:53

нажать чужую кнопку

Сообщение evgm00 » 07.12.2007 (Пт) 12:05

если вставить msgbox перед посылкой текста
If hWinTXT <> 0 Then
msgbox "ok"
RetVal = SendMessage(hWinTXT, WM_SETTEXT, 0, ByVal sFile_Name)
RetVal = SendMessage(hWin, WM_KEYDOWN, VK_RETURN, 0)
то ехе начинает работать корректно...
что бы это значило???

evgm00
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 12.02.2007 (Пн) 20:53

нажать чужую кнопку

Сообщение evgm00 » 07.12.2007 (Пт) 14:11

помогло следующее

RetVal = SetForegroundWindow(hWin)
Call Sleep(500)
RetVal = SendMessage(hWinTXT, WM_SETTEXT, 0, ByVal sFile_Name)

только не пойму почему...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: PetalBot и гости: 1

    TopList