Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 601

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Я делаю программку чтобы по нажатии на клавишу на клавиатуре выполнялось какое-то действие. Но вот это работает тогда, когда окно активно. А я бы хотел чтобы программа была свёрнута и не была активна и выполняла те действия когда я нажму на клавишу. Как мне это сделать?

Приложение:
  1. procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  2. Shift: TShiftState);
  3. begin
  4. if key=vk_numpad5 then
  5. begin
  6. Timer1.Enabled:=True;
  7. i:=2;
  8. end;
  9.  
  10. end;


Andrew_Cyber Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Andrew_Cyber (статус: Посетитель)
Вопрос отправлен: 23 сентября 2010, 20:22
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Смотри хэлп по API-функциям RegisterHotkey() и UnregisterHotkey().
Я еаписал несколько программ, в которых предусмотрена такая функциональность. Вот кусок кода:

В конструкторе главной формы:

// Регистрация клавиш звуков и клавиши отмены воспроизведения
  for HotKeyID:= 0 to 9 do
    RegisterHotKey(Application.Handle, HotKeyID, MOD_WIN, $30 + HotKeyID); // Win + 0...9 - звуки юзера
  RegisterHotKey(Application.Handle, 253, MOD_CONTROL or MOD_WIN, VK_F12); // Ctrl + Win + F12 - сказать время
  RegisterHotKey(Application.Handle, 254, MOD_CONTROL or MOD_WIN, VK_F11); // Ctrl + Win + F11 - развернуть из трея
  RegisterHotKey(Application.Handle, 255, MOD_WIN, $20); // Win + Space - прекратить воспроизведение

В деструкторе:
// Сброс регистрации клавиш звуков и клавиши отмены воспроизведения
  for HotKeyID:= 0 to 9 do
    UnregisterHotKey(Application.Handle, HotKeyID);
  UnregisterHotKey(Application.Handle, 253);
  UnregisterHotKey(Application.Handle, 254);
  UnregisterHotKey(Application.Handle, 255);

В обработчике Application.OnMessage:
procedure TMainForm.AppEventsMessage(var Msg: tagMSG;
  var Handled: Boolean);
var
  SoundIndex: Integer;
begin
  case Msg.message of
    WM_QUERYENDSESSION: Close();
 
    WM_HOTKEY: begin
                 case Msg.wParam of
                   // Проигрывание звуков, если заданы
                   0..9: begin
                           if Msg.wParam = 0
                             then SoundIndex:= 9
                             else SoundIndex:= Msg.wParam - 1;
 
                           if SoundIndex < UserSoundsMRU.Items.Count
                             then UserSoundsMRUClick(UserSoundsMRU, UserSoundsMRU.Items[SoundIndex]);
                         end;
 
                   // Развернуть/активизировать
                   253: if IsIconic(Application.Handle)
                          then begin
                                 Application.Restore();
                                 Application.BringToFront();
                               end
                          else Application.Minimize();
 
                   // Сказать время
                   254: begin
                          Application.ProcessMessages();
                          Clocker.SpeakTime();
                        end;
 
                   // Отмена проигрывания
                   255: ThreadQueue.TerminateAllThreads();
                 end; // case
 
                 Handled:= False; // Отдаю другим прогам
               end;
  end; // case
 
  // Активация первой копии приложения
  if Msg.message = WCM_ACTIVATE
    then begin
           Application.Restore();
           Application.BringToFront;
           SetActiveWindow(Application.Handle);
           SetForegroundWindow(Application.Handle);
         end;
end;

Будут вопросы - пиши.

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 24 сентября 2010, 08:23
Оценка за ответ: 5


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:46
Выполнено за 0.03 сек.