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





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[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