На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> RegisterHotKey
    так это не будет работать т.к. для RegisterHotKey надо использовать MOD_ALT, MOD_CONTROL, MOD_SHIFT, а не HOTKEYF_ALT, HOTKEYF_CONTROL, HOTKEYF_SHIFT - у них и значения разные (т.е. MOD_CONTROL=4, а HOTKEYF_CONTROL=$02)
      ИМХО, надо первым параметром передавать хэндл окна, на которое клеится хоткей smile.gif Как оно вообще работает - удивляюсь smile.gif 0 не катит, я писал в одной своей проге Form1.Handle - и все пахало, а вот как расшифровывал модифер - не скажу, т.к. исходники навернулись...
        Цитата
        ИМХО, надо первым параметром передавать хэндл окна, на которое клеится хоткей  Как оно вообще работает - удивляюсь  0 не катит

        Ну почему же, если в качестве дескриптора окна передаётся 0, то сообщение будет ассоциировано с данным потоком и ловить его нужно в цикле обработки сообщений.

        2 _8989 пиши примерно следующее

        ...
        if (WordRec(wHotKey).Hi and HOTKEYF_ALT) <> 0 then Modifiers:=Modifiers or MOD_ALT;
        if ......
        ...
          В общем, я нашел код для этого. Реально рабочий. Только там нужОн VCL. Ставим HK: THotKey и во время загрузки проги загружаем в нее в текстовом виде хоткей:

          HK.HotKey:=TextToShortCut(Inif.ReadString('Main', 'Hotkey', ''));

          Ну, у меня из INI читается, но суть та же самая. Потом:

          modif:=0;
          if (hkCtrl in HK.Modifiers) then modif:=modif+MOD_CONTROL;
          if (hkAlt in HK.Modifiers) then modif:=modif+MOD_ALT;
          if (hkShift in HK.Modifiers) then modif:=modif+MOD_SHIFT;
          ShortCutToKey(HK.HotKey, K, SS);

          Итак, у нас в modif - модификаторы, а в K - вирт. код клавиши, SS нас не интересует, хотя можно прямо из него тянуть модификаторы (у меня из компонента). Теперь:

          RegisterHotKey(Form1.Handle, $8760, Modif, k);

          Опять же, номер клавиши из рабочей проги. Меня немного смущает двойное преобразование из текста в ShortCut и из него - в VK и модификатор, возможно, можно и проще. Но мне в проге нужен был сам компонент THotKey...
            ВСЕМ огромное спасибо за помощь! Особенную благодарность хочу выразить rhf. Еще раз - Сенкс!
              2_8989
              Так подними ему рейтинг-то, раз тебе помогли его ответы.
                Как?
                  А.. ну ты же гость. Сначала зарегится как минимум надо.
                    как делавл я
                    [code]
                    .......................
                    Procedure Hot(var Message:TMessage);message WM_HOTKEY;
                    ..........
                    RegisterHotKey(Wnd.Handle,0,0,VK_TAB);
                    ...............
                    Procedure Twnd1.Hot;
                    Begin
                    ..............
                    end;
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0331 ]   [ 16 queries used ]   [ Generated: 27.04.24, 06:52 GMT ]