Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
1

Горячие клавиши неактивного окна

25.07.2011, 22:18. Просмотров 2460. Ответов 18
Метки нет (Все метки)

Всем привет!, написал программку для одной игры и добавил некоторые горячие клавиши, но дело в том что при переходе в игру горячие клавиши проги не работают, может кто знает как это сделать, заранее спасибо!
P.S. Я слышал о какой то фун-ции HotKey может это чем то поможет...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2011, 22:18
Ответы с готовыми решениями:

Горячие клавиши - обойти наведение фокуса и привязать клавиши клавиатуры к кнопкам на форме
всем доброго времени суток. столкнулся с такой проблемой. требуется чтобы при нажатии определенных...

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

Горячие клавиши
Ввожу горячие клавиши bool r1 =RegisterHotKey(Handle,1,0,qqq->HotKey);//qqq THotKey (в примере...

Горячие клавиши
У меня кнопка - Button, выполняет такое то действие, не подскажите, как привязать выполнение...

18
LK
Заблокирован
25.07.2011, 22:30 2
кто ж знает, как вы их добавляли... общий случай описан здесь:
RegisterHotKey. Как сделать несколько RegisterHotKey и отменить регистрацию
1
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
26.07.2011, 20:46  [ТС] 3
А можно пример... а то я чото не понял
0
Прогер
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
27.07.2011, 00:01 4
GoldDragon,

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
void __fastcall TForm24::FormCreate(TObject *Sender)
{
RegisterHotKey(Handle,0,MOD_ALT+MOD_CONTROL,VK_RETURN);
RegisterHotKey(Handle,1,MOD_ALT,'A');
RegisterHotKey(Handle,2,MOD_ALT,'B');
}
//---------------------------------------------------------------------------
void __fastcall TForm24::ApplicationEvents1Message(tagMSG &Msg, bool &Handled)
{
if(Msg.message == WM_HOTKEY)
 {
     if(Msg.wParam == 0)
      {
          ShowMessage("Enter");
      }
      if(Msg.wParam == 1)
       {
           ShowMessage("A");
       }
      if(Msg.wParam == 2)
       {
           ShowMessage("B");
       }
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm24::FormClose(TObject *Sender, TCloseAction &Action)
{
UnregisterHotKey(Handle,0);
UnregisterHotKey(Handle,1);
UnregisterHotKey(Handle,2);
}
Добавлено через 15 минут
GoldDragon,
Если Handle хочеш получить с не твоего окна то понадобится получить HWND с окна. Окна найдёте с помощю FindWindow(); и FindWindowEx();
2
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
27.07.2011, 11:02  [ТС] 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if(Msg.message == WM_HOTKEY)
 {
     if(Msg.wParam == 0)
      {
          ShowMessage("Enter");
      }
      if(Msg.wParam == 1)
       {
           ShowMessage("A");
       }
      if(Msg.wParam == 2)
       {
           ShowMessage("B");
       }
 }
Уменя прям в начале код вот такая ошибка появляется
[BCC32 Error] Unit2.cpp(29): E2294 Structure required on left side of . or .*
Unit2.cpp(28): parsing: void _fastcall TForm2::ApplicationEvents1ActionExecute(TBasicAction *,bool &)
и что значит это точка, менял на стрелку думал что код на делфи написан но разницы никакой
0
287 / 228 / 27
Регистрация: 13.06.2010
Сообщений: 744
27.07.2011, 11:41 6
Все 4 точки менял на стрелку?
Компилятор говорит, что слевой стороны от точки должна быть переменная а не указатель на нее!

Выход:
Поставить стрелку или же разыменовывай указатель
C++
1
if((*Msg).message == WM_HOTKEY)
Во всех 4х местах разумеется
0
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
27.07.2011, 12:04  [ТС] 7
нее не получлилось теперь такая ошибка
[BCC32 Error] Unit2.cpp(29): E2316 'message' is not a member of 'TIdMessage'
Full parser context
Unit2.cpp(28): parsing: void _fastcall TForm2::ApplicationEvents1ActionExecute(TBasicAction *,bool &)

Тут дело не в этом. как я понял Msg это компонент, но у этого компонента нет Message... или может мне библиотеку надо подключить
обясните мне что значит
C++
1
if(Msg.message == WM_HOTKEY)
Msg message и WM=HOTKEY
0
648 / 459 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
27.07.2011, 13:07 8
GoldDragon, все работает.
1
Вложения
Тип файла: zip forgolddragon.zip (355.3 Кб, 22 просмотров)
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
27.07.2011, 13:32  [ТС] 9
Всё сделал как в примере у тебя прога запустилась но при нажатии нечего не происходит
вот код cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
__fastcall TForm2::TForm2(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormCreate(TObject *Sender)
{
RegisterHotKey(Handle,1,MOD_ALT,'A');
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
 UnregisterHotKey(Handle,1);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::WMHotKey(TWMHotKey &Message)
{
  switch (Message.HotKey)
  {
    case 0: ShowMessage("ENTER"); break;
    case 1: ShowMessage("A"); break;
  }
}
вот h
C++
1
2
3
4
5
6
7
8
9
10
11
class TForm2 : public TForm
{
__published:    // IDE-managed Components
    TIdMessage *Msg;
    void __fastcall FormCreate(TObject *Sender);
    void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
    void __fastcall WMHotKey(TWMHotKey &Message); //вот создал параметр
private:    // User declarations
public:     // User declarations
    __fastcall TForm2(TComponent* Owner);
};
в чём опять проблема...
1
287 / 228 / 27
Регистрация: 13.06.2010
Сообщений: 744
27.07.2011, 13:34 10
вот тут прекрасный код!

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

Извиняюсь за повтор..
0
648 / 459 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
27.07.2011, 13:36 11
GoldDragon, все происходит! просто нужно нажимать Alt + A, Alt + Enter.

Добавлено через 38 секунд
****all666, эту ссылку давал LK во втором посте.
0
287 / 228 / 27
Регистрация: 13.06.2010
Сообщений: 744
27.07.2011, 13:38 12
У меня эквивалентная ситуация!

доходит до сюда и не выполняет условие, что ни нажимай!

C++
1
if (Msg.message == WM_HOTKEY)
Кто знает, почему?
0
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
27.07.2011, 13:40  [ТС] 13
А зачем это прописывать в h файле
C++
1
2
3
BEGIN_MESSAGE_MAP
  MESSAGE_HANDLER(WM_HOTKEY,TWMHotKey,WMHotKey);
END_MESSAGE_MAP(TForm);
0
648 / 459 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
27.07.2011, 13:42 14
GoldDragon, это карта откликов. Как-то так. Поищи в гугле.
0
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
27.07.2011, 13:44  [ТС] 15
Цитата Сообщение от QVO Посмотреть сообщение
GoldDragon, все происходит! просто нужно нажимать Alt + A, Alt + Enter.

Добавлено через 38 секунд
****all666, эту ссылку давал LK во втором посте.
В твоеё программе всё работает я не отрицаю, просто когда я пишу сам по твоему примеру у меня прога запускается но не происходит ничего при нажатии алт + А, я посмотрел там в файле h что то прописано из за этого он и работает но что я понять не могу....

Добавлено через 1 минуту
Тогда дай ссылку на справку что такое карта откликов, ты же когда то тоже не понимал...
0
648 / 459 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
27.07.2011, 13:45 16
GoldDragon, так внимательно прочитай тему, которую LK дал https://www.cyberforum.ru/post868937.html
0
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
27.07.2011, 13:47  [ТС] 17
т.е. ты сам толком не понял что это, но ясно ток то что без этого он не будет работать), ну тогда всё всем спасибо за помощь!
0
648 / 459 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
27.07.2011, 13:52 18
GoldDragon, читай вообщем.
0
Прогер
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
27.07.2011, 14:25 19
GoldDragon,
А билдер какой у вас? у меня всё отлично работает
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2011, 14:25

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Горячие клавиши
Суть задания в том что при нажатии этой комбинации :левый alt + левый ctrl + F10,...

Горячие клавиши
Ув.программисты как сделать чтобы при неактивном приложении оно воспринимало нажатие клавиш...

Как для неактивного окна применить клавиатуру активного
Надо понять, как для неактивного окна применить клавиатуру активного. Сам момент есть только как...

Горячие клавиши среды C++ Bulder 6
Здравствуйте. Что-то нажал и вдруг лавинообразно поменялись в среде горячие клавиши. Не могу...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.