Опять о клаве

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

Опять о клаве

Сообщение Wolan » 24.03.2004 (Ср) 11:00

Можно ли поменять реакцию клавы на нажатие на какую-либо кнопку на ней? Грубо: нажал на А, в тексте появилась буква Б. Если можно, подобный простой примерчик для разбора, плиз. :oops:

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

Сообщение alibek » 24.03.2004 (Ср) 12:37

Код: Выделить всё
Private Sub text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
  Case < 32
  Case Asc("A")
    KeyAscii = Asc("B")
  Case Asc("Z")
    KeyAscii = 0
  Case Else
End Select
End Sub
Lasciate ogni speranza, voi ch'entrate.

Wolan
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 01.03.2004 (Пн) 11:47

Сообщение Wolan » 24.03.2004 (Ср) 14:29

Огромное спасибо. А как сделать, чтобы это все работало при открытии любого файла в Wordе (не забивая конкретного имени файла в прогу)? :wink:

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 24.03.2004 (Ср) 17:46

ИМХО, это надо отлавливать с помощью GetAsyncKeyState и менять с помощью SetKeyboardState, либо делать хук.
Нет меня больше

Wolan
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 01.03.2004 (Пн) 11:47

Сообщение Wolan » 25.03.2004 (Чт) 10:58

Чо? Это форум вроде для новичков? Будь ласка, напиши коротенький примерчик. :oops:

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 25.03.2004 (Чт) 20:31

Ой, тьфу, не SetKeyboardState, а keybd_event!

Чтобы заменить англ. "A" на англ. "B", нужно поставить таймер с интервалом в 1 и вставить этот код:

Код: Выделить всё
Private Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Integer
Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Sub Timer1_Timer()
Select Case GetAsyncKeyState(vbKeyA) 'обязательно Select Case, а не If, потому что If ну о-о-очень медленный, и эффект будет несколько не тот.
Case -32767#
keybd_event vbKeyBack, 0, 0, 0
keybd_event vbKeyBack, 0, 2, 0
keybd_event vbKeyB, 0, 0, 0
keybd_event vbKeyB, 0, 2, 0
End Select
End Sub


Если хочешь изменить еще какую-то букву, то вместо
Код: Выделить всё
GetAsyncKeyState(vbKeyA)

вставляешь любую другую, например,
Код: Выделить всё
GetAsyncKeyState(vbKeyM)

, а на место
Код: Выделить всё
keybd_event vbKeyB, 0, 0, 0
keybd_event vbKeyB, 0, 2, 0

вставляешь, например,
Код: Выделить всё
keybd_event vbKeyN, 0, 0, 0
keybd_event vbKeyN, 0, 2, 0

То, что я сейчас только что написал, заменит "M" на "N".
Нет меня больше

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 28.03.2004 (Вс) 17:18

Вопросы:
Именно в Word?
Только на время работы твоей программы?
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 28.03.2004 (Вс) 18:14

что-то мне подсказывает, что автор вопроса хочет повторить успех программы Crazy Typing (как-то так она называлась)... в общем, кто-то ему насолил и он жаждет мести...
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 28.03.2004 (Вс) 18:33

Cyrax
Ааа... Ну если так, то это вообще элементарно.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com


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

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

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

    TopList  
cron