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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2011, 18:17   #1
-=Virus=-
Форумчанин
 
Аватар для -=Virus=-
 
Регистрация: 03.07.2009
Сообщений: 246
По умолчанию Перехват нажатых клавиш.

Пишу программу которая будет перехватывать нажатие клавиш пульта от тв тюнера.

Суть проблемы такова:
Научился перехватывать нажатие одной клавиши, а как сделать для двух клавиш. Допустим одна клавиша прибавляет звук а вторая убавляет.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ExtCtrls, StdCtrls, Buttons, Menus, ShellApi;

type
  TForm1 = class(TForm)

    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    procedure WMHotKey(var Msg: TWMHotKey);

  public
    { Public declarations }

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
  MyHotKey = ord('1');

procedure TForm1.WMHotKey(var Msg: TWMHotKey);
var
I:Integer;
begin
    ShellExecute(0,PChar('open'),PChar('C:/Gotview/nircmd.exe'),PChar('changesysvolume -1000'),nil,SW_SHOWNORMAL);
    I:=ProgressBar1.Position;
    ProgressBar1.Position:=I-2;
end;



procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterHotKey(Form1.Handle, MyHotKey, 0, MyHotKey);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnRegisterHotKey(Form1.Handle, MyHotKey);
end;

end.
Так перехватываю только нажатие одной. Если создаю на вторую клавишу только срабатывает одно действие или прибавить или убавить.

Последний раз редактировалось -=Virus=-; 28.07.2011 в 18:19.
-=Virus=- вне форума Ответить с цитированием
Старый 28.07.2011, 18:26   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

второй параметр функции RegisterHotKey, это id хоткея, он же приходит в обработчик, и по нему можно различать какой же хоткей был нажат.
msg.HotKey
Код:
MyHotKey_1=ord('1');
MyHotKey_2=ord('2');

RegisterHotKey(Handle,MyHotKey_1,0,MyHotKey_1);
RegisterHotKey(Handle,MyHotKey_1,0,MyHotKey_1);
а в обработчике:
Код:
case msg.HotKey of
 MyHotKey_1: begin end;
 MyHotKey_2: begin end;
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.07.2011, 18:38   #3
-=Virus=-
Форумчанин
 
Аватар для -=Virus=-
 
Регистрация: 03.07.2009
Сообщений: 246
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
второй параметр функции RegisterHotKey, это id хоткея, он же приходит в обработчик, и по нему можно различать какой же хоткей был нажат.
msg.HotKey
Код:
MyHotKey_1=ord('1');
MyHotKey_2=ord('2');

RegisterHotKey(Handle,MyHotKey_1,0,MyHotKey_1);
RegisterHotKey(Handle,MyHotKey_1,0,MyHotKey_1);
а в обработчике:
Код:
case msg.HotKey of
 MyHotKey_1: begin end;
 MyHotKey_2: begin end;
end;
Спасибо вроде всё работает.

Хм... Странно вообще не стал реагировать на нажатие клавиш.
Вложения
Тип файла: zip GoTView.zip (797.4 Кб, 18 просмотров)

Последний раз редактировалось Stilet; 29.07.2011 в 08:21.
-=Virus=- вне форума Ответить с цитированием
Старый 29.07.2011, 00:39   #4
navodri
Пользователь
 
Аватар для navodri
 
Регистрация: 20.04.2011
Сообщений: 11
По умолчанию

Код польность рабочий! Проверено!

Код:
  
 private
    { Private declarations }
    procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
...

implementation

{$R *.DFM}

const
  MyHotKey_1=ord('1');
  MyHotKey_2=ord('2');

procedure TForm1.WMHotKey(var Msg: TWMHotKey);
var
I:Integer;
begin
 case msg.HotKey of
  MyHotKey_1: MessageBox(0,'MyHotKey_1','',0);
  MyHotKey_2: MessageBox(0,'MyHotKey_2','',0);
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterHotKey(Handle,MyHotKey_1,0,MyHotKey_1);
  RegisterHotKey(Handle,MyHotKey_2,0,MyHotKey_2);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 UnRegisterHotKey(Form1.Handle, MyHotKey_1);
 UnRegisterHotKey(Form1.Handle, MyHotKey_2);
end;
Как научиться электронике?
http://radiobook.ho.ua/
navodri вне форума Ответить с цитированием
Старый 29.07.2011, 10:57   #5
-=Virus=-
Форумчанин
 
Аватар для -=Virus=-
 
Регистрация: 03.07.2009
Сообщений: 246
По умолчанию

Похоже delphi xe кривит или может сама винда 7.
-=Virus=- вне форума Ответить с цитированием
Старый 29.07.2011, 11:13   #6
-=Virus=-
Форумчанин
 
Аватар для -=Virus=-
 
Регистрация: 03.07.2009
Сообщений: 246
По умолчанию

Всем спасибо нашёл свой косяк.
-=Virus=- вне форума Ответить с цитированием
Старый 29.07.2011, 11:59   #7
Neef-El
Пользователь
 
Регистрация: 23.07.2011
Сообщений: 10
По умолчанию Перехват нажатых клавиш

Привет всем.
Я не использую QWidget, использую QTimer и QSocket, как мне получить события нажатия клавиш?
Neef-El вне форума Ответить с цитированием
Старый 29.07.2011, 17:01   #8
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Я бы для этих целей углубился в изучение драйвера устройства.
Практичнее читать буфер устройства, чем пытаться обработать хоткеи его утилиты.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 29.07.2011, 17:11   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

смотря что за устройство, кстати может оно прямое АПИ имеет?
пульт от тюнера Beholder, имеет такое.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Key Up при нажатых 2х и более клавиш ldenis Общие вопросы Delphi 3 21.01.2011 13:00
Подсчет количества нажатых клавиш. Ассемблер Martischa Помощь студентам 0 29.11.2010 22:49
Перехват клавиш AnTe Общие вопросы Delphi 3 23.07.2010 06:24
Перехват нажатых клавиш sxem Общие вопросы Delphi 7 02.05.2010 23:31
Перехват нажатых клавиш AidarBik Общие вопросы Delphi 2 21.06.2007 20:11