Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
2 / 2 / 1
Регистрация: 06.04.2019
Сообщений: 64

Горячие клавиши при свернутом в трей приложении

12.11.2019, 08:44. Показов 905. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,пишу небольшую программу в которой необходимо реализовать горячие клавиши так, что бы когда программа была свернута она перехватывала нажатые клавиши.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.11.2019, 08:44
Ответы с готовыми решениями:

Вызвать меню в другом приложении свернутом в трей
Пытаюсь функцией PostMessage(hWnd, WM_RBUTTONDOWN, 0,0); вызвать меню приложения которое свернуто в трей. Не получается.

Горячие клавиши для свернутой в трей программы
Привет всем! Подскажите, пожалуйста, какую-нибудь нормальную реализацию вызова моей программы, висящей в трее или на панели задач, по...

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

1
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
15.11.2019, 02:15
В этой теме посмотри "про трей": Отображение скрытого в трее окна программы при попытке запуска ее копий
Далее (по хоткеям): добавляешь на форму TApplicationEvents
Регистрируешь горячие клавиши (или их комбинации) с помощью функции RegisterHotKey(), убираешь (когда не нужно) через UnregisterHotKey
В методе OnMessage (для TApplicationEvents) прописываешь действия, выполняемые при нажатии горячих клавиш.
Пример (key-и - это численные значения наших горячих клавиш):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg, bool &Handled)
{
if (Msg.message == WM_HOTKEY)
 {
  if (Msg.wParam == key1)
    join_room->Click();
  else
   if (Msg.wParam == key2 && !tunnel_test->Tag)
   {
     tunnel_test->Click();
     tunnel_test->Tag = 1;
     Timer4->Enabled = 1;
     Label4->Caption = "туннель комнаты с помощью хоткея будет доступен через 30 секунд";
     Timer5->Enabled = 1;
   }
  else
   if (Msg.wParam == key3)
    tunnel_on_host->Click();
  else
   if (Msg.wParam == key4)
    player_tunnel->Click();
 }
}
Пример регистрации горячих клавиш (код "старый, но не бесполезный"):
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
UINT mods(TShiftState modifs)
{
  UINT iModifiers = 0;
  if (modifs.Contains(ssShift))
    iModifiers += MOD_SHIFT;
  if (modifs.Contains(ssCtrl))
    iModifiers += MOD_CONTROL;
  if (modifs.Contains(ssAlt))
    iModifiers += MOD_ALT;
  return iModifiers;
}
//---------------------------------------------------------------------------
AnsiString hk(unsigned short ShortCut)
{
  AnsiString hk0 = AnsiReplaceText(ShortCutToText(ShortCut), "+", " + ");
  if (hk0 == "")
    hk0 = "нет хоткея";
  return hk0;
}
//---------------------------------------------------------------------------
void __fastcall ShowHKsMain()
{
  Form1->join_room->Caption = "вход в комнату (" + hk(Form2->HotKey1->HotKey) + ")";
  Form1->tunnel_test->Caption = "туннель игроков в комнате (" + hk(Form2->HotKey2->HotKey) + ")";
  Form1->tunnel_on_host->Caption = "туннель игроков на хосте (" + hk(Form2->HotKey3->HotKey) + ")";
  Form1->player_tunnel->Caption = "туннель игрока (" + hk(Form2->HotKey4->HotKey) + ")";
}
//---------------------------------------------------------------------------
void __fastcall RegisterHKs()
{
  Word key;
  TShiftState modifs;
 
  ShortCutToKey(Form2->HotKey1->HotKey, key, modifs);
//  ShowMessage(String(HotKey1->HotKey) + "   " + "key = " + String(key) + "   " + String(modifs.ToInt()) + "   " + ShortCutToText(HotKey1->HotKey) + "   " + String(HotKey1->Modifiers.ToInt()));
//  ShowMessage("MOD_SHIFT = " + String(MOD_SHIFT) + "   MOD_ALT = " + String(MOD_ALT) + "   MOD_CONTROL = " + String(MOD_CONTROL));
  RegisterHotKey(Form1->Handle,Form1->key1,mods(modifs),key);
 
  ShortCutToKey(Form2->HotKey2->HotKey, key, modifs);
  RegisterHotKey(Form1->Handle,Form1->key2,mods(modifs),key);
 
  ShortCutToKey(Form2->HotKey3->HotKey, key, modifs);
  RegisterHotKey(Form1->Handle,Form1->key3,mods(modifs),key);
 
  ShortCutToKey(Form2->HotKey4->HotKey, key, modifs);
  RegisterHotKey(Form1->Handle,Form1->key4,mods(modifs),key);
}
//---------------------------------------------------------------------------
Можно еще использовать "атомы" (как защиту от дублирования численных значениф) для регистрации хоткеев, но и без них обойтись вполне возможно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  key1 = GlobalAddAtom("enter room");
  key2 = GlobalAddAtom("tunnel room");
  key3 = GlobalAddAtom("tunnel on host");
  key4 = GlobalAddAtom("player tunnel");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
  UnregisterHotKey(Handle,key1);
  UnregisterHotKey(Handle,key2);
  UnregisterHotKey(Handle,key3);
  UnregisterHotKey(Handle,key4);
  GlobalDeleteAtom(key1);
  GlobalDeleteAtom(key2);
  GlobalDeleteAtom(key3);
  GlobalDeleteAtom(key4);
}
Изложил сумбурно, но все это гуглится очень легко и просто, что я и делал (вполне успешно), когда мне это самому было нужно несколько лет назад.
Миниатюры
Горячие клавиши при свернутом в трей приложении  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.11.2019, 02:15
Помогаю со студенческими работами здесь

Горячие клавиши в приложении не работают
Здравствуйте. Пишу менюшку для программы, но не получается забить на хоткеи действия. ЧЯДНТ? private void MainForm_KeyDown(object sender,...

Горячие клавиши в консольном приложении
Использую следующие классы HotKeyManager: public static class HotKeyManager { public static event...

Получения событий при свернутом приложении
Нужно получать координаты нажатия мыши при свернутом java приложении. Возможно ли это сделать с JVM?

Обработка событий при свернутом приложении
Добрый день. Подскажите пожалуйста, как обрабатывать событие в свернутом приложении. Допустим мне надо, чтобы мое приложение, будучи...

Распознавание нажатых клавиш при свёрнутом приложении
допустим что приложение было свёрнуто, как можно сделать так, чтобы оно разворачивалось при нажатии определённых клавиш ?


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru