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

Тема в разделе "Delphi - Система", создана пользователем Aliaksandar, 30 май 2005.

Статус темы:
Закрыта.
  1. Aliaksandar

    Aliaksandar Гость

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

    mike.dld Гость

    SetWindowsHookEx
     
  3. Barmutik

    Barmutik Гость

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

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

    _dimka_ Гость

    ВАша проблема ясна, я уже делал такую ерунду.
    Ответ заключается в том чтобы задать системные горячие клавиши для вашей проги.
    Даже если вы будете работать в 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 горячей клавиши.

    Пример:
    Код (Text):
     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;
     
  5. Barmutik

    Barmutik Гость

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

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

Поделиться этой страницей