Резидентные программы

  • Автор темы Aliaksandar
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

Aliaksandar

#1
Люди помогите
Кароч интересно как сделать так что бы программы работала но окна не было
можно конечно скрыть окно (Form1.hide) но так не катит прога мот выполняться и будет но мне нужно что бы работала клавиатура т.е. прога отслеживала и выполняла команды с клавы но окна не было...
(если делать окно всегда поверх остальных окон и ещё скрыть его то тоже не работает)
 
B

Barmutik

#3
Понятие "резидентная программа" отмерло ещё со времён ДОС.

Сейчас Ваш вопрос стоит о перехвате событий проходящих в системе... что бы больше об этом понимать стоит почитать любую книжку по программированию на Delphi, не верное или не совсем верное использование указанной для Вас выше функции может привести к падению системы!
 
D

_dimka_

#4
ВАша проблема ясна, я уже делал такую ерунду.
Ответ заключается в том чтобы задать системные горячие клавиши для вашей проги.
Даже если вы будете работать в Worde и там допустим нажмете сохранить горячими клавишами.
Но ваша прога их под себя зарегистрирует, то на нажатие этих клавиш будет реагировать только ваша прога.
И также её скрыть как вам угодно.

Ниже теория

Горячие клавиши - сочетания клавиш, которые регистрируются в системе и при их нажатии система посылает сообщение WM_HOTKEY тому окну, Handle которого было заявлено при регистрации горячей клавиши. При этом не важно, имеет ли окно- получатель фокус ввода и видимо ли оно на экране. Это особенно удобно при написании резидентных программ, т.е. приложений, которые активизируются при нажатии определенных сочетаний клавиш.
Регистрация производится при помощи вызова API RegisterHotKey
function RegisterHotKey(hWnd: HWND; id: Integer; fsModifiers, vk: UINT): BOOL;
hWnd - Handle окна, которое будет получать сообщения при нажатии горячей клавиши
id - идентификатор (просто число, передаваемое в сообщении WM_HOTKEY. id позволяет приложению работать с несколькими горячими клавишами, различая их по id). Нельзя определить две горячие клавиши с одинаковым id
fsModifiers - модификаторы. Определяют, какие клавиши должны быть нажаты совместно с указанной vk. Допустимы значения: MOD_ALT - ALT, MOD_CONTROL - CTRL, MOD_SHIFT - SHIFT
vk - виртуальный код клавиши
Если горячую клавишу удается зарегистрировать, то функция возвращает TRUE.
При завершении приложения необходимо отменить регистрацию горячей клавиши при помощи вызова UnregisterHotKey. При вызве ей передается Handle окна и id горячей клавиши.

Пример:
Код:
 TForm1 = class(TForm)
 procedure FormCreate(Sender: TObject);
 procedure FormDestroy(Sender: TObject);
private
 // Обработчик сообщения WM_HOTKEY
 procedure WMHotKey(var Mess:TWMHotKey);message WM_HOTKEY;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.WMHotKey(var Mess: TWMHotKey);
begin
MessageBeep(0);
ShowMessage('Нажата горячая клавиша CTRL+F12');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Handle, 1 ,MOD_CONTROL, vk_F12);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
UnregisterHotKey(Handle, 1);
end;
 
B

Barmutik

#5
Метод использования хоткеев это узкий случай перехвата событий. В общем случае он не пригоден для мониторинга нажатых клавиш...

Использование хуков даёт Вам более широкие возможности для обработки событий системы...
 
Статус
Закрыто для дальнейших ответов.