Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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


Оплата за обучение в Kata Academy только после твоего трудоустройства в IT, начни карьеру Middle Java-разработчика


Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2007, 14:40   #1
Lonix
Пользователь
 
Регистрация: 17.03.2007
Сообщений: 39
По умолчанию Перехват нажатия Ctrl

Добрый день! У меня такой вопрос как зделать так чтобы когда была нажата Ctrl выполнилось действие(к примеру сообщение нажата CTRL), одно но при нажатие наша программа может быть не активна, т.е. свернута, но все равно должна следить нажатие.
Lonix вне форума Ответить с цитированием
Старый 12.09.2007, 14:44   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

клавиатурный Хук или по таймеру GetKeyState
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.09.2007, 15:53   #3
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Используй вот такой код
if GetKeyState(VK_Control) < 0 then
ShowMessage('Кнопка CONTROL нажата')
else
ShowMessage('Кнопка CONTROL не нажата');
Aleksandr вне форума Ответить с цитированием
Старый 13.09.2007, 17:20   #4
Hintman
Пользователь
 
Регистрация: 14.04.2007
Сообщений: 28
По умолчанию Еще несколько вопросов

У меня еще несколько вопросов по теме.
Помогите советом, пожалуйста.

Первый вопрос.

Я написал такой код
Код:
procedure TFMain.Timer1Timer(Sender: TObject);
begin
if GetKeyState(VK_ESCAPE)<0 then begin
  if MessageDlg('Приостановить работу программы?',
                     mtConfirmation,[mbYes, mbNo],0)=mrYes
  then begin
    ShowMessage('Program was cancelled!');
    Exit;
    end;
  end;
Далее, если выставить в свойствах Timer задержу, скажем 1-10 мс,
то окно MessageDlg появляется раз 10, как будто я нажал Escape не 1 раз, а 10.

Если выставляешь задержку 1000 мс, то наоборот, нужно раз 10 нажимать Escape, пока хотя бы 1 раз сработает обработчик.

Наконец, если выставить задержку, например 100 мс, то процедура
TFMain.Timer1Timer нормально срабатавает, но это происходит не всегда.

В общем, коряво получается как-то получается. Какую задержку все-таки ставить?
Наверное, этот вопрос решается как-то в обход Таймера, но как?

Второй вопрос.
Опять же, вот есть у меня эта процедура TFMain.Timer1Timer.
И есть еще другая процедура, скажем TFMain.SB_NextClick,
которая работает в течение длительного времени.
Как сделать так, чтобы при срабатывании GetKeyState в Timer1Timer
выполнение этой процедуры сразу же останавлвалось?

И еще третий вопрос.

Как обработать, скажем, не просто клавшу Ctrl (VK_ESCAPE),
а сочетание Ctrl (VK_ESCAPE) +Q (81)?

Для информации по этим вопросам скажу, что ранее я использовал следующий код:

Код:
private
  procedure WMHotkey( var msg: TWMHotkey ); message WM_HOTKEY;
...
Код:
procedure TFMain.FormCreate(Sender: TObject);
begin
if not RegisterHotkey(Handle, 1, MOD_CONTROL, 81) then
ShowMessage('Unable to assign <Ctrl>+Q as hotkey.');
end;
...
Код:
procedure TFmain.WMHotkey(var msg:TWMHotkey);
begin
  if msg.hotkey = 1 then begin
  UnRegisterHotkey(Handle,1);
  Application.Terminate;
  end;
end;
И здесь тоже возникла проблема - наша программа не активна,
и событие Ctrl+Q до нее почему-то не доходит в том случае,
когда я запускаю на выполнение процедуру TFMain.SB_NextClick
(Application.ProcessMessages я туда не забыл поставить).

Буду благодарен за любые соображения.
Hintman вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
alt+ctrl+del ben95 Общие вопросы Delphi 36 03.01.2009 16:28
CTRL+ALT+DELETE terminadoor Помощь студентам 14 21.07.2008 15:22
Ctrl+Enter kisska Win Api 3 22.08.2007 19:55
Как программно нажать Ctrl + V ffo Win Api 11 29.07.2007 16:58
Отключение CTRL+ALT+DEL ShVad Общие вопросы Delphi 5 27.01.2007 19:09

Реклама для незарегистрированных, регистрация на форуме