Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2012, 16:13   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию Связать THotKey и глобальные клавиши, как?

Доброго времени суток!

Пытаюсь без гемороя, дать пользователю свободно указать желаемый hot key.


Как это сделать?

Цель: с сокрытым окном программы, по горячей клавише, делать действие.

Пробовал вот-так(Высмотрел в исходниках TcustomHotKey):
Код:
  //ImgChangeHKEdit - THotKey
  //fHK - registred global atom.
  UnregisterHotKey(Handle, fHK);
  RegisterHotKey(Handle, fHK, MakeWord(Byte(ImgChangeHKEdit.Modifiers), 0),
    (ImgChangeHKEdit.HotKey - MakeWord(Byte(ImgChangeHKEdit.Modifiers), 0)));
Но не работает

Можно и DLL навязать, но как дать возможность юзеру, самому, произвольно, выставлять желаемую комбинацию клавиш?
Человек_Борща вне форума Ответить с цитированием
Старый 05.10.2012, 16:35   #2
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию HotKeyManager

посмотрите компонент HotKeyManager
Вложения
Тип файла: rar HotKeyManager.rar (216.4 Кб, 11 просмотров)
beegl вне форума Ответить с цитированием
Старый 05.10.2012, 18:19   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

От себя: http://www.programmersforum.ru/showthread.php?t=8638
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.10.2012, 20:11   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Примного благодарен, вот что получилось:
Код:
procedure TMainForm.PrepareHK(const aHotKey: DWORD; var vModifers, vKey: Word);
const
  VK2_SHIFT   = 32;
  VK2_CONTROL = 64;
  VK2_ALT     = 128;
  VK2_WIN     = 256;
var
  vKeys: Integer;
begin
  vKey := 0;
  vModifers := 0;
  vKey := Byte(aHotKey);
  vKeys := aHotKey shr 8;
  if (vKeys and VK2_WIN) <> 0 then
    Inc(vModifers, MOD_WIN);

  if (vKeys and VK2_ALT) <> 0 then
    Inc(vModifers, MOD_ALT);

  if (vKeys and VK2_CONTROL) <> 0 then
    Inc(vModifers, MOD_CONTROL);

  if (vKeys and VK2_SHIFT) <> 0 then
    Inc(vModifers, MOD_SHIFT);
end;

//
procedure TMainForm.AppyHKBtnClick(Sender: TObject);
var
  fKey, fMod: Word;
begin
  UnregisterHotKey(Handle, fHK);
  PrepareHK(ImgChangeHKEdit.HotKey, fMod, fKey);
  if not RegisterHotKey(Handle, fHK, fMod, fKey) then
    RaiseLastWin32Error;
end;

fHK это Global Atom зарегистрированный в системе.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как подружить std::map и глобальные объекты _Bers Общие вопросы C/C++ 18 28.06.2012 22:52
Windows-программа + web-обвязка, как связать и как заставить работать? Человек_Борща Общие вопросы по программированию, компьютерный форум 3 23.04.2011 19:07
Проблема с THotKey в Delphi 2010 Altera Компоненты Delphi 8 06.01.2010 09:51
Как связать таблицы ksmspb Microsoft Office Excel 3 24.10.2009 19:35
Глобальные горячие клавиши W0LF Общие вопросы Delphi 4 20.09.2009 01:03