Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/32: Рейтинг темы: голосов - 32, средняя оценка - 4.88
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744

RegisterHotKey

27.07.2011, 13:50. Показов 6742. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую. Сделал все как говорится тут:

RegisterHotKey. Как сделать несколько RegisterHotKey и отменить регистрацию

В пустом проекте работает, а в моем нет..
это условие не выполняется:
C++
1
if (Msg.message == WM_HOTKEY)

Вот заголовочный файл, какой из этих методов может блокировать горячие клавиши?

C++
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
//---------------------------------------------------------------------------
 
#ifndef KeyBoardMan_UnitH
#define KeyBoardMan_UnitH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "sLabel.hpp"
#include "sSkinManager.hpp"
#include <Dialogs.hpp>
#include <mmsystem.hpp>
#include <AppEvnts.hpp>
#include "sButton.hpp"
#include <Menus.hpp>
#include <ExtCtrls.hpp>
#include "sPanel.hpp"
#include <IniFiles.hpp>
#include "ProgressUnit.h"
#include <fstream.h>
#include <map.h>
#include "StatictisUnit.h"
#include <jpeg.hpp>
 
//---------------------------------------------------------------------------
class TMainForm : public TForm
{
__published:    // IDE-managed Components
    TsSkinManager *sSkinManager1;
    TOpenDialog *OpenDialog1;
    TLabel *lRight;
    TLabel *lLeft;
    TApplicationEvents *ApplicationEvents1;
    TsPanel *TextPanel;
    TTimer *TimerPause;
    TTimer *TimerAct;
    TLabel *LabelSpeed;
    TsPanel *PnlTime;
    TImage *Image1;
    TLabel *LabelPercent;
    TMainMenu *MainMenu1;
    TMenuItem *N1;
    TMenuItem *N2;
    void __fastcall InitVariables();
    void __fastcall FirstStart();
    void __fastcall SetFile(AnsiString fname);
    void __fastcall GetFirstString();
    void __fastcall Start();
    void __fastcall FormKeyPress(TObject *Sender, wchar_t &Key);
    void __fastcall PauseKeyPress(TObject *Sender, wchar_t &Key);
    void __fastcall Pause();
    void __fastcall TrueChar();
    void __fastcall WrongChar();
    void __fastcall SetOptimalSize();
    void __fastcall SetMinimalSize();
    void __fastcall FormCreate(TObject *Sender);
    void __fastcall SwitchSize();
    void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
    void __fastcall GetINI();
    void __fastcall SetINI();
    void __fastcall Restore();
    AnsiString __fastcall GetTime();
    short __fastcall GetSpeed();
    void __fastcall TimerPauseTimer(TObject *Sender);
    void __fastcall TimerActTimer(TObject *Sender);
    void __fastcall PnlTimePaint(TObject *Sender, TCanvas *Canvas);
    short __fastcall GetSessionTime();
    float __fastcall GetFaultsPercent();
    void __fastcall N1Click(TObject *Sender);
    void __fastcall N2Click(TObject *Sender);
    bool __fastcall GetDesktopWallpaper();
    void __fastcall ApplicationEvents1Deactivate(TObject *Sender);
    void __fastcall ApplicationEvents1Message(tagMSG &Msg, bool &Handled);
private:    // User declarations
    ifstream fin;
    FILE* textFile;
    FILE* ff; // FaultsFile!
    String fileName;
    String iniFileName;
    AnsiString ch;
    char buffer[100]; // Используется при заполнении LRight при запуске
    bool miniSized;
    int num; // Количество фраз
    int currentStr; // Текущая фраза
    fpos_t pos; // Текущая позиция
    TIniFile *iniFile;
    short speed;
    String templStr; // Для режима паузы
    String temprStr;
    int lrTop;
    char second;
    char minute;
    AnsiString secStr, minStr;
    short rightPresses;
    short wrongPresses;
    TColor color;
    AnsiString progressFileName;
    std::map<wchar_t,int>::iterator i;
    bool paused;
public:     // User declarations
    TStringList *strListProgress;
    DynamicArray<String> dateStrArray;
    DynamicArray<short> speedArray;
    DynamicArray<float> faultArray;
    DynamicArray<String> timeStrArray;
    std::map <wchar_t, int> mapFaults;
 
    TTime timePassed;
    TTime sessionTime;
 
    __fastcall TMainForm(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TMainForm *MainForm;
//---------------------------------------------------------------------------
#endif
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.07.2011, 13:50
Ответы с готовыми решениями:

RegisterHotKey. Как сделать несколько RegisterHotKey и отменить регистрацию
Спасибо - Otaka! https://www.cyberforum.ru/cpp-builder/thread39159.html?uri=/cpp-builder/thread39159.html все отлично работает, но...

RegisterHotKey для русской раскладки
пытаюсь пользоваться registerhotkey с англ биндами отлично работает биндит, прожимается и снимает бинд всё как надо а вот с русскими...

RegisterHotKey для количества клавиш больше 3-х
Всем доброго времени суток. Я в программе ставлю хук через компонент ApplicationEvents, но проблема в том, что зарегистрировать хук можно...

42
Прогер
 Аватар для Programmer.
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
29.07.2011, 03:21
Студворк — интернет-сервис помощи студентам
SalterOk,
Цитата Сообщение от SalterOk Посмотреть сообщение
всегда ложное
Если ложное то сообшение не выпало бы!
Напиши хотябы как регистрируеш хоткеи
0
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
29.07.2011, 09:12  [ТС]
Проверяю! Регистрирует! Пробовал специально до запуска этой программы другую запустить и занять комбинацию клавиш, - тогда не регистрирует..
Не выполняется только это условие, все остальное работает

Добавлено через 3 минуты
Пожалуйста:


Цитата Сообщение от NiTan Посмотреть сообщение
Регистрируем наши связки клавиш
C++
1
2
3
4
5
6
 void __fastcall TForm1::FormCreate(TObject *Sender)
{
        RegisterHotKey(Handle,0,MOD_ALT+MOD_CONTROL,VK_RETURN); //Регистрируем под номером 0 связку клавиш Alt + Ctrl + Enter. 
        RegisterHotKey(Handle,1,MOD_ALT,'A'); //А здесь регистрируем связку Alt + клавиша "A" под номером 1
}
//---------------------------------------------------------------------------
Теперь размещаете на форме TApplicationEvents из вкладки Additional и на событие OnMessage пишите:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,
      bool &Handled)
{
if (Msg.message == WM_HOTKEY)
        {
        if (Msg.wParam == 0) // Здесь идет проверка идентификатора. Если параметр 0, что соответствует нашей первой связке, то 
                {
                ShowMessage("ENTER"); // Наше действие
                }
                if (Msg.wParam == 1) //Если параметр 1, что соответствует нашей второй связке, то 
                {
                ShowMessage('A'); // Другое действие
                }
        }
}
//---------------------------------------------------------------------------
А теперь отключаем горячие клавиши:
C++
1
2
3
4
5
6
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
UnregisterHotKey(Handle,0);
UnregisterHotKey(Handle,1);
}
//---------------------------------------------------------------------------

И вот так тоже пробовал


Цитата Сообщение от MikeSoft Посмотреть сообщение
Можно реализовать перехват сообщения WM_HOTKEY (как и любого другого) без добавления TApplicationEvents. В заголовочном файле в области private: добавляем:
C++
1
2
3
4
5
void __fastcall WMHotKey(TWMHotKey &Message);
 
BEGIN_MESSAGE_MAP
  MESSAGE_HANDLER(WM_HOTKEY,TWMHotKey,WMHotKey);
END_MESSAGE_MAP(TForm);
Тем самым, мы указываем, что сообщение WM_HOTKEY будет обрабатываться в функции WMHotKey, которая содержит параметр (TWMHotKey &Message).

Далее в *.cpp файле описываем саму функцию:
C++
1
2
3
4
5
6
7
8
void __fastcall TForm2::WMHotKey(TWMHotKey &Message)
{
  switch (Message.HotKey) {
    case 0: ShowMessage("ENTER"); break;
    case 1: ShowMessage("A"); break;
    default: return;
  }
}
Ну а регистрация, как обычно - в конструкторе:
C++
1
2
RegisterHotKey(Handle,0,MOD_ALT+MOD_CONTROL,VK_RETURN);
RegisterHotKey(Handle,1,MOD_ALT,'A');
И при закрытии:
C++
1
2
UnregisterHotKey(Handle,0);
UnregisterHotKey(Handle,1);



Повторяю, в других проектах все работает! Не работает только в этом.. но никаких хуков, никаких перехватов я не реализовывал, должно быть это какой-то стандартный компонент.. поэтому я выложил только .h файл(ну и по другим причинам, о которых сказано ранее)
0
Прогер
 Аватар для Programmer.
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
29.07.2011, 12:19
Fuckall666,
Код напиши как ты сам их зарегистрировал а не пример нитана и маиксофта!
0
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
29.07.2011, 12:39  [ТС]
Ты понимаешь фразу "сделал все как тут"?

Сначала разумеется был творческий подход, потом тупо копипаст, т.к. не заработало по-своему, потом оказалось что никак не работает.
Еще раз тоже самое цитировать?\
ок
C++
1
2
3
4
5
 void __fastcall TForm1::FormCreate(TObject *Sender)
{
        RegisterHotKey(Handle,0,MOD_ALT+MOD_CONTROL,VK_RETURN); //Регистрируем под номером 0 связку клавиш Alt + Ctrl + Enter. 
        RegisterHotKey(Handle,1,MOD_ALT,'A'); //А здесь регистрируем связку Alt + клавиша "A" под номером 1
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,
      bool &Handled)
{
if (Msg.message == WM_HOTKEY)
        {
        if (Msg.wParam == 0) // Здесь идет проверка идентификатора. Если параметр 0, что соответствует нашей первой связке, то 
                {
                ShowMessage("ENTER"); // Наше действие
                }
                if (Msg.wParam == 1) //Если параметр 1, что соответствует нашей второй связке, то 
                {
                ShowMessage('A'); // Другое действие
                }
        }
}
C++
1
2
3
4
5
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
UnregisterHotKey(Handle,0);
UnregisterHotKey(Handle,1);
}
0
Прогер
 Аватар для Programmer.
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
29.07.2011, 13:45
Fuckall666,
И после етого нажимаеш на ALT+CTRL+ENTER или на AL+A и нечего не происходит? O.o
0
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
29.07.2011, 14:08  [ТС]
Цитата Сообщение от Programmer. Посмотреть сообщение
Fuckall666,
И после етого нажимаеш на ALT+CTRL+ENTER или на AL+A и нечего не происходит? O.o
Именно так, фуф... 3-х страниц хватило...)))

Условие в этой строке не выполняется:
C++
1
if (Msg.message == WM_HOTKEY)
0
Прогер
 Аватар для Programmer.
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
29.07.2011, 14:15
Fuckall666,
А Может переписать проект? а то если в пустом проекте работает то что с етим то!
0
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
29.07.2011, 14:24  [ТС]
Цитата Сообщение от Programmer. Посмотреть сообщение
Fuckall666,
А Может переписать проект? а то если в пустом проекте работает то что с етим то!
Да... тоже уже надумываю..
0
 Аватар для SalterOk
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
29.07.2011, 14:31
Цитата Сообщение от Fuckall666 Посмотреть сообщение
Условие в этой строке не выполняется:
C++
1
if (Msg.message == WM_HOTKEY)
а какое сообщение вообще передается?
C++
1
ShowMessage(Msg.message);
Добавлено через 4 минуты
Или лучше при отладке посмотри а то окна будут вылазить постоянно
1
Прогер
 Аватар для Programmer.
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
29.07.2011, 15:57
Fuckall666,
Пропиши в конце
C++
1
ShowMessage(GetLastError());
и скажи чё будет
1
 Аватар для SalterOk
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
29.07.2011, 16:57
Цитата Сообщение от Programmer. Посмотреть сообщение
Fuckall666,
Пропиши в конце
C++
1
ShowMessage(GetLastError());
сразу после RegisterHotKey
1
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
29.07.2011, 19:40  [ТС]
[QUOTE=SalterOk;1874296]а какое сообщение вообще передается?
C++
1
ShowMessage(Msg.message);
Оо.. Бесконечно выходит "49214"


Цитата Сообщение от Programmer. Посмотреть сообщение
Fuckall666,
Пропиши в конце
C++
1
ShowMessage(GetLastError());
и скажи чё будет
Всегда "0"
0
Прогер
 Аватар для Programmer.
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
30.07.2011, 03:01
Fuckall666,
Значет команда выполняется! вчем тогда дела, блин не могу понять, что тогда может мешать?
1
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
30.07.2011, 08:54  [ТС]
А вот как узнать что это сообщение означает?
Цитата Сообщение от Fuckall666 Посмотреть сообщение
"49214"
0
 Аватар для SalterOk
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
30.07.2011, 12:17
49214 это вроде тоже самое что и 0xc03e.
Искал не долго - наверно потому ниче полезного не нашел.
Встречал упоминания что это не документированное сообщение или же что значения больше 0xc000 означают ошибку.
1
294 / 200 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
31.07.2011, 10:56
Слушай, так ты лучше возми скопируй весь код, закрой этот проект, создай новый и вставь в него, тогда должно всё заработать, попробуй...

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

Добавлено через 17 секунд
особенно в RAD Studio
1
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
31.07.2011, 11:30  [ТС]
А можно все перенести Copy-Past'ами одними??
Я имею ввиду возможноть не переписывать от руки те данные, которые введены в Object Inspector
0
294 / 200 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
31.07.2011, 17:32
Ну можно кончно, только там у каждого компонента по 20 срок замучаешься)), лучше просто сам код скопируй а остальное отредактируй там минут 5 уйдёт на всё

Добавлено через 2 минуты
Кстати ты попробуй должно получиться, только не в Object Inspector а в том окне что повыше Structure нажимаешь на компонент ->Edit->Copy, попробуй сразу форму так скопировать если глюк останеться знач придётся по отдельности....
1
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
31.07.2011, 19:29  [ТС]
Все заработало. Просто переписал проект.
Кстати сообщение
C++
1
 ShowMessage(Msg.message);
"49214" - Выходит даже в пустом проекте!!!

Ну что тут скажешь.. Rad Studio XE не совершенна)

Спасибо вам всем за помощь!

Добавлено через 21 минуту
Оооо нееет! Открыл новый(переписанный проект) второй раз. И теперь у главной и одной из дочерних форм нет вклатки DESIGN
Теперь нет возможности работать над визуальным оформлением.................
0
Прогер
 Аватар для Programmer.
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
01.08.2011, 01:24
Fuckall666,
У тебя с билдером проблемы!


Цитата Сообщение от Fuckall666 Посмотреть сообщение
"49214" - Выходит даже в пустом проекте!!!
Ну что тут скажешь.. Rad Studio XE не совершенна)
Если функция возврашает не 0 то оно работает, но если оно 0 то не работает!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.08.2011, 01:24
Помогаю со студенческими работами здесь

Выполнение действия при помощи RegisterHotKey
Привет всем! При использовании горячих клавиш в моей программе, я столкнулся с одной проблемой. Мне нужно, при нажатии определенных...

Зарегистрировать левую клавишу мышки с пoмощью RegisterHotKey?
Надо зарегистрировать как горячую клавишу левую кнопку мышки.Что только не пробовал RegisterHotKey(Handle,0,0,VK_LBUTTON); ...

RegisterHotKey
Опишите как пользоваться RegisterHotkey из библиотеки User32.dll Прочитал туторы и документацию но все равно не понимаю как ею...

Игнорируется RegisterHotKey()
Не понять почему, но все же факт. ЗЫ:Компилятор ошибок не выдает! bool noclip(HWND hwnd) { if(RegisterHotKey(NULL, 1,...

Qt winapi registerhotkey
Добрый вечер. Возникла нужда встроить в программу &quot;горячие клавиши&quot;. Чистыми средствами qt не получается сделать для windows глобальные...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru