нажатие клавиш в окно

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

нажатие клавиш в окно

Сообщение 050 » 27.09.2006 (Ср) 11:32

ПРошу подсказать, можно ли, зная дескриптор окна (чужого), передать
в него нажатие клавиш (например CTRL + space) и будет ли при этом фокус перемещаться на ту форму??

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 27.09.2006 (Ср) 12:12

SendMessage и в поиск.

050
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 21.11.2005 (Пн) 11:59

Сообщение 050 » 27.09.2006 (Ср) 12:27

...а вот есть API вызов sendmessage и там сообщение WM_CHAR - этим нельзя воспользоваться?

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

Сообщение alibek » 27.09.2006 (Ср) 12:35

Гораздо проще воспользоваться SendKeys или API keyb_event. WM_CHAR тоже можно, но зачем?
Lasciate ogni speranza, voi ch'entrate.

050
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 21.11.2005 (Пн) 11:59

Сообщение 050 » 27.09.2006 (Ср) 12:56

alibek, RayShade,
насколько я понял через sendkeys всеравно надо пользовать api
чтобы та форма получили фокус, а затем уже sendkeys.
??
если можно небольшой пример, передать фокус некой форме (по hwnd),
послать туда ctrl+space и получить фокус обратно??
Спасибо.

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

Сообщение Viper » 27.09.2006 (Ср) 13:44

вот ведь лень до чего людей доводит, пользуся API функцией SetForegroundWindow

SetForegroundWindow hWnd ' устанавливаем фокус на окно с известным хэндлом
SendKeys ... ' отсылаем нужное
SetForegroundWindow me.hWnd ' возвращаем фокус на родину
Весь мир матрица, а мы в нем потоки байтов!

050
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 21.11.2005 (Пн) 11:59

Сообщение 050 » 27.09.2006 (Ср) 14:41

viper!,

api нашел окно делается активным, но как послать туда sendkeys,
Код: Выделить всё
Private Sub form_load()
Dim hwnd As Long
Dim name As String
name = "Безымянный - Блокнот"
hwnd = FindWindow(vbNullString, name)
Call SetForegroundWindow(hwnd)
SendKeys "ggg"
End Sub


посылает на форму, а не в блокнот??

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

Сообщение Viper » 27.09.2006 (Ср) 15:11

Да? У меня код почему то успешно срабатывает

Код: Выделить всё
Private Sub Command1_Click()
Dim hWndFind As Long
hWndFind = FindWindow(vbNullString, "Безымянный - Блокнот")
If hWndFind <> 0 Then
    SetForegroundWindow hWndFind
    SendKeys "Write to active window"
End If
End Sub
Весь мир матрица, а мы в нем потоки байтов!

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

Сообщение alibek » 27.09.2006 (Ср) 15:21

Если окно ищется по заголовку, зачем вообще API?
AppActivate.
Lasciate ogni speranza, voi ch'entrate.

050
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 21.11.2005 (Пн) 11:59

Сообщение 050 » 27.09.2006 (Ср) 15:43

viper!
ok! спасибо.
а как вернуть фокус?
поскольку
Код: Выделить всё
SetForegroundWindow Form1.hwnd

сразу в этом же command_click - зацикливает программу

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Сообщение Debugger » 27.09.2006 (Ср) 15:52

???
Булевая переменная... И таймер.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 27.09.2006 (Ср) 16:33

А почему незаслуженно обойдена вниманием апи SetFocus?
Лучший способ понять что-то самому — объяснить это другому.

050
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 21.11.2005 (Пн) 11:59

Сообщение 050 » 27.09.2006 (Ср) 16:49

Antonariy,
а чем она лучше используемой?

050
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 21.11.2005 (Пн) 11:59

Сообщение 050 » 27.09.2006 (Ср) 17:10

Alibek,
AppActivate - не подходит, поскольку окно может быть не просто не активное , но и свернутое...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.09.2006 (Ср) 17:23

Antonariy писал(а):А почему незаслуженно обойдена вниманием апи SetFocus?

Напоминаем, что фокус свой в каждом потоке. SetFocus к окнам чужих потоков не имеет эффекта.
Изображение


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

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

Сейчас этот форум просматривают: Google-бот, Majestic-12 [Bot] и гости: 39

    TopList