SendKeys, SendKeys для мыши и список открытых окон

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

SendKeys, SendKeys для мыши и список открытых окон

Сообщение Олег Козлов » 29.08.2005 (Пн) 7:54

Пара вопросов у меня...
Кто знает - плиз, хелп.

1. Как получить список всех открытых окон. Мне надо, чтобы было даже вот как: если есть программа, состоящая из нескольких окон, чтобы и список эти окна тоже можно было получить.

2. Как послать клик кнопкой мыши (подобно функции SendKeys, но только клик мышью).

3. Есть где-нибудь подробная инструкция по использованию SendKeys???

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.08.2005 (Пн) 7:56

1. Вопрос, задолбавший всех. Обсуждался сотни раз. В поиск.
2. См. п. 1
3. Наводящий вопрос. У тебя Офис установлен?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Олег Козлов
Обычный пользователь
Обычный пользователь
 
Сообщения: 52
Зарегистрирован: 26.05.2005 (Чт) 15:56
Откуда: Нижний Тагил

Сообщение Олег Козлов » 29.08.2005 (Пн) 8:05

GSerg писал(а):3. Наводящий вопрос. У тебя Офис установлен?
Установлен. в Полном комплекте. Так что, в справке к VBA искать?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.08.2005 (Пн) 8:14

Да.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Олег Козлов
Обычный пользователь
Обычный пользователь
 
Сообщения: 52
Зарегистрирован: 26.05.2005 (Чт) 15:56
Откуда: Нижний Тагил

Сообщение Олег Козлов » 29.08.2005 (Пн) 8:16

Хорошо. Попробую. Спасибо.

max-aziat
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 13.06.2005 (Пн) 13:41
Откуда: Таджикистан

Сообщение max-aziat » 29.08.2005 (Пн) 8:25

на те мож это ты ишеш???

Имитация нажатия кнопки на мышке

Private Declare Sub mouse_event Lib "user32" _
(ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cbuttons As Long, ByVal dwExtraInfo As Long)
Private Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_LEFTUP = &H4
Private Const MOUSEEVENTF_MIDDLEDOWN = &H20
Private Const MOUSEEVENTF_MIDDLEUP = &H40
Private Const MOUSEEVENTF_RIGHTDOWN = &H8
Private Const MOUSEEVENTF_RIGHTUP = &H10
Private Enum ButtonClick
btcLeft
btcRight
btcMiddle
End Enum

Private Function MouseClick(ByVal MBClick As ButtonClick) As Boolean
Dim cbuttons As Long
Dim dwExtraInfo As Long
Dim mevent As Long

Select Case MBClick
Case ButtonLeft
mevent = MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP
Case ButtonRight
mevent = MOUSEEVENTF_RIGHTDOWN Or MOUSEEVENTF_RIGHTUP
Case ButtonMiddle
mevent = MOUSEEVENTF_MIDDLEDOWN Or MOUSEEVENTF_MIDDLEUP
Case Else
MouseClick = False
Exit Function
End Select

mouse_event mevent, 0&, 0&, cbuttons, dwExtraInfo
MouseClick = True
End Function

Private Sub Command1_Click()
Call MouseClick(ButtonLeft)
End Sub
не всё сразу дается ...

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 29.08.2005 (Пн) 11:06

max-aziat писал(а):на те мож это ты ишеш???

Имитация нажатия кнопки на мышке


А ты свой код тестировал перед тем как запостить? :?:
Учитывая то что во время клика по кнопке курсор мыши чаще всего находится над кнопкой, то программу зациклит :?
Если всё делать своими ручками, они скоро отвалятся !

max-aziat
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 13.06.2005 (Пн) 13:41
Откуда: Таджикистан

Сообщение max-aziat » 29.08.2005 (Пн) 11:18

я знаю , ты прав зацикливает но дело не в этом ....
если ему надо будет он сам эту маленькую ошыбку исправит
не всё сразу дается ...

Олег Козлов
Обычный пользователь
Обычный пользователь
 
Сообщения: 52
Зарегистрирован: 26.05.2005 (Чт) 15:56
Откуда: Нижний Тагил

Сообщение Олег Козлов » 29.08.2005 (Пн) 11:44

Ну конечно исправлю. Thanks...

Олег Козлов
Обычный пользователь
Обычный пользователь
 
Сообщения: 52
Зарегистрирован: 26.05.2005 (Чт) 15:56
Откуда: Нижний Тагил

Сообщение Олег Козлов » 29.08.2005 (Пн) 13:35

Все-таки про список открытых окон я не нашел.

Мне нужно получить список ВООБЩЕ ВСЕХ окон, даже messagebox'ов. А то, что нашел, либо отображает список процессов, либо не все окна (только главные - без диалоговых).

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.08.2005 (Пн) 13:39

Для каждого главного окна делаешь FindWindowEx и будет тебе щастье.
Lasciate ogni speranza, voi ch'entrate.

Олег Козлов
Обычный пользователь
Обычный пользователь
 
Сообщения: 52
Зарегистрирован: 26.05.2005 (Чт) 15:56
Откуда: Нижний Тагил

Сообщение Олег Козлов » 29.08.2005 (Пн) 14:15

В общем, примерно мне нужно вот что: [см. приложенный архив]

Но он не каждое, к примеру, msgbox отображает (по-моему).
Например, если в бейсике сделать msgbox, то он отображает заголовок этого окна. А нажал на Помощь -> Содержание в среде VB6 IDE, вылезло окошко "MSDN Doesn't Exist..." так это окно не появилось в списке. Может, в коде что исправить надо, чтобы АБСОЛЮТНО все окна были?
Вложения
openwindows_list.rar
(1.81 Кб) Скачиваний: 38

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 29.08.2005 (Пн) 14:15

alibek писал(а):Для каждого главного окна делаешь FindWindowEx и будет тебе щастье.

А лутше EnumChildWindows IMHO 8)
Если всё делать своими ручками, они скоро отвалятся !

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 29.08.2005 (Пн) 14:20

Олег.
Скачай с allapi.net программу Api-Guide. Найди в ней функцию EnumChildWindows, там есть преотличнейший пример.

Гайдар, ну сколько можно, повесь баннер!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.08.2005 (Пн) 14:33

Тебя услышали :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 29.08.2005 (Пн) 14:39

Я стукнулся и подпихнул баннер :)

Олег Козлов
Обычный пользователь
Обычный пользователь
 
Сообщения: 52
Зарегистрирован: 26.05.2005 (Чт) 15:56
Откуда: Нижний Тагил

Сообщение Олег Козлов » 29.08.2005 (Пн) 15:03

Amed писал(а):Олег.
Скачай с allapi.net программу Api-Guide. Найди в ней функцию EnumChildWindows, там есть преотличнейший пример.

Гайдар, ну сколько можно, повесь баннер!


Там глюк. на строке

sSave = Space$(GetWindowTextLength(hwnd) + 1)

пишет ошибку 14 (число GetWindowTextLength(hwnd) слишком большое)

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 29.08.2005 (Пн) 15:19

Вставь в этой процедуре первой строкой On Error Resume Next.


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

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

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 66

    TopList