Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/26: Рейтинг темы: голосов - 26, средняя оценка - 4.69
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575

Как узнать, какая клавиша была нажата в Word

05.12.2010, 13:15. Показов 4866. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Т. е. смысл в чём? Я ввожу текст в документ и если нажал определённую клавишу, то должно выскочить сообщение.
Обработки события нажатия клавиш на клавиатуре в VBA для Word, я так понимаю, нет.
Думал вот это поможет
Visual Basic
1
WindowSelectionChange
и
Visual Basic
1
2
If Asc(Selection.Characters(1).Previous) = 32 Then
End If
но оно срабатывает, если выделить слово.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.12.2010, 13:15
Ответы с готовыми решениями:

Нужно в первых строках макроса узнать какая именно была нажата кнопка
Проблема в следующем: есть две кнопки, созданные макросом на своей панельке инструментов. Они запускают один и тот же макрос. Нужно в...

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

Как определять, какая клавиша была нажата?
1) как определять, какая клавиша была нажата? 2) как определить время, которое проходит между нажатиями клавиш?

6
 Аватар для ironegg
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
05.12.2010, 18:18
на самом деле разработчики предусмотрели обработку событий документа. только для этого нужно создать модуль класса. процедура описана в справке и на сайте мелкомягких. начни отсюда http://msdn.microsoft.com/en-u... e.10).aspx
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
05.12.2010, 20:19  [ТС]
Цитата Сообщение от ironegg Посмотреть сообщение
на самом деле разработчики предусмотрели обработку событий документа
но обработки нужного мне события нет.
0
 Аватар для PrAvalon
154 / 33 / 10
Регистрация: 27.10.2010
Сообщений: 87
06.12.2010, 14:16
отследить нажатие клавиш можно так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Option Base 1
Option Explicit
 
Type POINTAPI32
    x As Long
    y As Long
End Type
 
Type MSG32
    hWnd As Long
    message As Long
    wParam As Long
    lParam As Long
    time As Long
    pt As POINTAPI32
End Type
 
Declare Function FindWindow32 Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long
 
Declare Function PeekMessage32 Lib "USER32" Alias "PeekMessageA" (lpMsg As MSG32, _
    ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, _
    ByVal wRemoveMsg As Long) As Long
 
Declare Function TranslateMessage32 Lib "USER32" Alias "TranslateMessage" (lpMsg As MSG32) As Long
 
 
Sub procTestKey()
Dim iCount As Integer
Dim sKey As String
Application.DisplayStatusBar = True
iCount = 0
Do
    iCount = iCount + 1
    Application.StatusBar = "Стоп: " & iCount & "  Нажмите любую клавишу для остановки."
        sKey = funCheckKey32
  Loop Until sKey <> ""
MsgBox "Была нажата: " & sKey
Application.StatusBar = False
End Sub
Function funCheckKey32() As String
Dim msgMessage As MSG32
Dim iHwnd As Long
Dim i As Long
'константы Windows API
Const WM_CHAR As Long = &H102
Const WM_KEYDOWN As Long = &H100
Const PM_REMOVE As Long = &H1
Const PM_NOYIELD As Long = &H2
funCheckKey32 = "" 'по умолчанию никакая клавиша не нажата
iHwnd = FindWindow32("WORDMAIN", Application.Caption) 'получаем хэндл  окна
i = PeekMessage32(msgMessage, iHwnd, WM_KEYDOWN, WM_KEYDOWN, PM_REMOVE + PM_NOYIELD)
If i <> 0 Then
    i = TranslateMessage32(msgMessage)
    i = PeekMessage32(msgMessage, iHwnd, WM_CHAR, WM_CHAR, PM_REMOVE + PM_NOYIELD)
    funCheckKey32 = Chr(msgMessage.wParam) ' возвращаемсимвол нажатой клавиши
End If
End Function
1
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
06.12.2010, 15:44  [ТС]
PrAvalon,
этот код надо запускать вручную. А нужно, чтобы постоянное определение шло.
0
 Аватар для ironegg
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
06.12.2010, 23:57
AutoOpen?
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
07.12.2010, 09:50  [ТС]
ironegg,
так его код только один раз срабатывает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.12.2010, 09:50
Помогаю со студенческими работами здесь

Как глобально определить, какая клавиша была нажата?
хочу написать что то вроде клав. шпиона... но кроме tab esc up down итд... я ничего отловить не могу.... подскажите как заставить винды...

Как узнать какая нажата клавиша?
без обработчика программа должна понять какая нажата клавиша, даже если окно этой программы не активно... пробовывал !kbhit не...

определить какая клавиша была нажата
Подскажите пожалуйста как можно определить на KeyUP то, что был отпущен пробел???

Как узнать, какая клавиша нажата из события таймера?
Мне нужно узнать код клавиши нажатой в момент тика таймера. как это так можно узнать?

Определить какая клавиша была нажата пользователем
Определить какая клавиша была нажата пользователем(цифровая, латинская строчная, латинская заглавная).


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru