Как сделать экранную клаву чтоб она вводила в любое окно

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

Как сделать экранную клаву чтоб она вводила в любое окно

Сообщение Pocket dj » 15.05.2005 (Вс) 18:57

Как сделать экранную клаву чтоб она вводила в любое окно другой проги :?:

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

Сообщение alibek » 16.05.2005 (Пн) 7:34

А чем не устраивает стандартная MS?
Lasciate ogni speranza, voi ch'entrate.

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 16.05.2005 (Пн) 10:30

alibek писал(а):А чем не устраивает стандартная MS?

Ну хочется человеку своё написать :)

Помниться, писал я что-то похожее месяца три назад... Сорсы только погибли :( По памяти:
1. Для начала находим активное окно ф-цией GetForegroundWindow.
2. Дальше нужно узнать на каком именно окне установлен фокус. Но чтобы это сделать, для начала нужно вызвать ф-цию AttachThreadInput. ID чужого процесса получаем ф-цией GetWindowThreadProcessId, в качестве hwnd подставляя результат GetForegroundWindow. ID своего процесса получаем с помощью GetCurrentThreadId.
3. Теперь, собственно, узнаём хэндл окна с фокусом. Ф-ция GetFocus.
4. Всё. Теперь можно посылать этому окну мессаги WM_CHAR, WM_KEYDOWN и WM_KEYUP с помощью ф-ции SendMessage.

Там, в принципе, есть свои нюансы, но разобраться можно. В Api-guide есть объявления всех ф-ций, кроме AttachThreadInput:
Код: Выделить всё

Private Declare Function AttachThreadInput Lib "user32" (ByVal idAttach As Long, ByVal idAttachTo As Long, fAttach As Boolean) As Boolean

В качестве первого парметра передаёшь ID чужого процесса, второго - ID своего процесса, третьего - true, если хочешь подключиться, false - если отключиться.

Удачи! :wink:
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!


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

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

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

    TopList