информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыВсе любят медЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[win32] [delphi] а правда, где тебе надо? 23.07.02 16:29  Число просмотров: 929
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
> Как в системе проследить за нажатием комбинации клавиш
> (например Ctrl+Alt+End)?

Если в системе, то без системных ловушек не обойтись. А если на форме, то ставишь, например свойство своей Form1.KeyPreview = True. Потом в событии OnKeyDown\Up следишь за клавишами. Или на форме, если есть главное меню, добавляешь невидимый пункт меню, в котором Visible = False, а ShortCut ставишь какой тебе надо.
<programming>
[win32] [delphi] гориячие клавиши. 23.07.02 01:25  
Автор: Cyber Style Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Как в системе проследить за нажатием комбинации клавиш (например Ctrl+Alt+End)?
[win32] [delphi] а правда, где тебе надо? 23.07.02 16:29  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
> Как в системе проследить за нажатием комбинации клавиш
> (например Ctrl+Alt+End)?

Если в системе, то без системных ловушек не обойтись. А если на форме, то ставишь, например свойство своей Form1.KeyPreview = True. Потом в событии OnKeyDown\Up следишь за клавишами. Или на форме, если есть главное меню, добавляешь невидимый пункт меню, в котором Visible = False, а ShortCut ставишь какой тебе надо.
ни за что не поверю... 23.07.02 19:41  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
что в дельфи нельзя вызвать что то типа RegisterHotKey
это же обычная функция из user32.dll
и она (выписка из MSDN):
The RegisterHotKey function defines a system-wide hot key
что вы все привязались к ловушкам
[win32] [delphi] горячие клавиши. 23.07.02 13:51  
Автор: Cyril <sc> Статус: Member
<"чистая" ссылка>
> Как в системе проследить за нажатием комбинации клавиш
> (например Ctrl+Alt+End)?
если я правильно понял, то хочется обрабатывать комбинации клавиш
даже когда твое приложение не получает фокус?
Если так, то тебе необходимо установить свою KeyboardProc hook процедуру.
зачем так жестоко :) 23.07.02 15:51  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
ещё скажи свой драйвер клавиатуры
[Delphi] Сорри, перемудрил, исправляюсь ;-) 24.07.02 15:20  
Автор: Cyril <sc> Статус: Member
<"чистая" ссылка>
> ещё скажи свой драйвер клавиатуры

вот небольшой примерчик на дельфях
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  comctrls, StdCtrls, menus;

const
  UNIQUE_ID = $03BF;  // уникальный идентификатор для горячей клавиши

type
  TForm1 = class(TForm)
    HotKey  : THotKey;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure HotKeyExit(Sender: TObject);
  private
    { Private declarations }
  public
 procedure HotKeyMsgHandler(var message : TMessage); message WM_HOTKEY;
    procedure RegisterHotKeyId;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.HotKeyMsgHandler(var message: TMessage);
begin
  SetForegroundwindow(Form1.Handle);
end;

procedure TForm1.RegisterHotKeyId;
var
  virt_key : word;
  fkMod    : word;
  shift_state : TShiftState;
begin
  fkMod := 0;
  ShortCutToKey(HotKey.HotKey, virt_key, shift_state);
  if ssShift in shift_state then fkMod := fkMod OR MOD_SHIFT;
  if ssAlt in shift_state   then fkMod := fkMod OR MOD_ALT;
  if ssCtrl in shift_state  then fkMod := fkMod OR MOD_CONTROL;
  RegisterHotKey(Form1.Handle, UNIQUE_ID, fkMod, virt_key);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterHotKeyId;
  // кнопка для того чтобы зарегистрировать новую горячую клавишу
  Button1.Caption :='Применить';
end;

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

procedure TForm1.HotKeyExit(Sender: TObject);
begin
  UnRegisterHotKey(Form1.Handle, UNIQUE_ID);
  RegisterHotKeyId;
end;

end.

---
[Win32] Горячие клавиши. 23.07.02 09:34  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
не знаю как в дельфи
должно быть что то типа WM_HOTKEY & RegisterHotKey
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach