Текущий архив: 2003.08.21;
Скачать: CL | DM;
Вниз
Помогите HOOK CTRL+INS+INS Найти похожие ветки
← →
Flex © (2003-06-18 15:55) [0]Добрый день уважаемые программисты!
Помогите пожалуйста, мне нужно написать HOOK клавиатуры, который будет отлавливать
комбинацию клавиш Ctrl+INS+INS.
В System tray будет висеть обычный агент, которые должен отлавливать Ctrl+INS+INS
Я так понимаю, что события WM_KEYUP и WM_KEYDOWN будут отлавливаться через WindowProc.
Задача кажеться тривиальной, меня смущает только одно, нет ли более изящного кода, для
подобного рода комбинаций клавиш, когда одна и таже клавиша повторяется несколько раз.
Мой предварительный вариант представлен ниже.
Если есть какие-то рекомендации по реализации подобных вещей, буду очень признателен.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
FL:boolean; //Флаг нажатия на клавишу Ctrl+Ins
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
KeyPreview:=True; //Форма будет получать события клавиатуры перед
//активным элементом управления
FL:=False; //инициализация флага
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) then begin
if Key=VK_INSERT then begin
if FL then begin
Showmessage("Ctrl+INS+INS");
FL:=False;
Exit
end; //end FL
FL:=True;
end else FL:=False; //end Key=VK_INSERT
end //end (ssCtrl in Shift)
end;
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if not (ssCtrl in Shift) then FL:=False
end;
end.
Заранее благодарен.
← →
han_malign © (2003-06-18 16:17) [1]кстати одного FL:=False не хватает (if (ssCtrl in Shift) then)
З.Ы. Можно сократить
if (ssCtrl in Shift)and(Key=VK_INSERT) then begin
( "Ctrl+INS+INS") кстати одного FL:=False не хватает (if (ssCtrl in Shift) then)
З.Ы. Можно сократить
if (ssCtrl in Shift)and(Key=VK_INSERT) then begin
if FL then Showmessage("Ctrl+INS+INS");
FL:=not FL;
end else FL:=False;
← →
Flex © (2003-06-18 17:32) [2]
> кстати одного FL:=False не хватает (if (ssCtrl in Shift)
> then)
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (Key=VK_INSERT) then begin
if FL then Showmessage("Ctrl+INS+INS");
( ssCtrl in Shift)
> кстати одного FL:=False не хватает (if (ssCtrl in Shift)
> then)
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (Key=VK_INSERT) then begin
if FL then Showmessage("Ctrl+INS+INS");
FL:=not FL
end else FL:=False//end (ssCtrl in Shift) and (Key=VK_INSERT)
end;
Где не хватает флага?
Все работает...
← →
han_malign © (2003-06-18 17:51) [3]> Где не хватает флага?
if (ssCtrl in Shift) then begin
if Key=VK_INSERT then begin
if FL then begin
Showmessage("Ctrl+INS+INS");
FL:=False;
Exit
end; //end FL
FL:=True;
( ssCtrl in Shift) > Где не хватает флага?
if (ssCtrl in Shift) then begin
if Key=VK_INSERT then begin
if FL then begin
Showmessage("Ctrl+INS+INS");
FL:=False;
Exit
end; //end FL
FL:=True;
end else FL:=False; //end Key=VK_INSERT
end вот здесь//end (ssCtrl in Shift)
:)))
([Ctrl+Ins+Ins] <> [Ctrl+Ins Ctrl+Ins])
← →
Flex © (2003-06-18 18:24) [4]
> if (ssCtrl in Shift) then begin
> if Key=VK_INSERT then begin
> if FL then begin
> Showmessage("Ctrl+INS+INS");
> FL:=False;
> Exit
> end; //end FL
> FL:=True;
> end else FL:=False; //end Key=VK_INSERT
> end вот здесь//end (ssCtrl in Shift)
> :)))
К данному случаю был код:
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if not (ssCtrl in Shift) then FL:=False
end;
Хотя последний вариант, намного грамотнее.
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (Key=VK_INSERT) then begin
if FL then Showmessage("Ctrl+INS+INS");
( ssCtrl in Shift)
> if (ssCtrl in Shift) then begin
> if Key=VK_INSERT then begin
> if FL then begin
> Showmessage("Ctrl+INS+INS");
> FL:=False;
> Exit
> end; //end FL
> FL:=True;
> end else FL:=False; //end Key=VK_INSERT
> end вот здесь//end (ssCtrl in Shift)
> :)))
К данному случаю был код:
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if not (ssCtrl in Shift) then FL:=False
end;
Хотя последний вариант, намного грамотнее.
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (Key=VK_INSERT) then begin
if FL then Showmessage("Ctrl+INS+INS");
FL:=not FL
end else FL:=False//end (ssCtrl in Shift) and (Key=VK_INSERT)
end;
Страницы: 1 вся ветка
Текущий архив: 2003.08.21;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.012 c