Конференция "WinAPI" » Запрещение реакции на нажатие кнопки WIN на клавиатуре [D7, WinXP]
 
  • dmitry_12_08_73 © (28.11.08 13:12) [0]
    Приветствую, помогите с запретом нажатия кнопки WIN. Имеется ввиду не отображение меню Windows по нажатию кнопки WIN на клавиатуре.
  • clickmaker © (28.11.08 13:14) [1]
    SetWindowsHookEx(WH_KEYBOARD_LL
    примеры наверняка есть в Инете
  • dmitry_12_08_73 © (28.11.08 13:15) [2]
    спасибо
  • Anatoly Podgoretsky © (28.11.08 13:32) [3]
    > dmitry_12_08_73  (28.11.2008 13:12:00)  [0]

    Самое надежное - пассатижи
  • DVM © (28.11.08 20:21) [4]

    {******************************************************************************}
    {* Module:  DisableLowLevelKeys.cpp                                           *}
    {* Notices: Written 2000 Jeffrey Richter                                      *}
    {*                                                                            *}
    {* Translated by: Dmitry Muratov                                              *}
    {* 2008                                                                       *}
    {******************************************************************************}

    program DisableLowLevelKeys;

    uses
     Windows, Messages;

    const
     LLKHF_ALTDOWN  = KF_ALTDOWN shr 8;
     WH_KEYBOARD_LL = 13;

    type

     TKBDLLHOOKSTRUCT = record
       vkCode: DWORD;
       scanCode: DWORD;
       flags: DWORD;
       time: DWORD;
       dwExtraInfo: DWORD;
     end;
     PKBDLLHOOKSTRUCT = ^TKBDLLHOOKSTRUCT;

    var
     hhkLowLevelKybd: HHOOK;

    //------------------------------------------------------------------------------

    function LowLevelKeyboardProc(nCode: integer;  wParam: WPARAM;  lParam: LPARAM): LRESULT; stdcall;
    var
     fEatKeystroke: boolean;
     p: PKBDLLHOOKSTRUCT;
    begin
     fEatKeystroke := false;
     if nCode = HC_ACTION then
       begin
         case wParam of
           WM_KEYDOWN,
           WM_SYSKEYDOWN,
           WM_KEYUP,
           WM_SYSKEYUP:
             begin
               p := PKBDLLHOOKSTRUCT(lParam);
               fEatKeystroke := ((p^.vkCode = VK_LWIN) or (p^.vkCode = VK_RWIN)) or
                                ((p^.vkCode = VK_TAB) and ((p^.flags and LLKHF_ALTDOWN) <> 0)) or
                                ((p^.vkCode = VK_ESCAPE) and ((p^.flags and LLKHF_ALTDOWN) <> 0)) or
                                ((p^.vkCode = VK_ESCAPE) and ((GetKeyState(VK_CONTROL) and $8000) <> 0)) or
                                ((p^.vkCode = VK_F4) and ((p^.flags and LLKHF_ALTDOWN) <> 0));
             end;
         end;
       end;
     if fEatKeystroke then
       result := 1
     else
       result :=  CallNextHookEx(0, nCode, wParam, lParam);
    end;

    //------------------------------------------------------------------------------

    begin
     // Install the low-level keyboard & mouse hooks
     hhkLowLevelKybd := SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);

     // Keep this app running until we're told to stop
     MessageBox(0,
                PChar('
    Alt+Esc, Ctrl+Esc, WIN, Alt+F4, and Alt+Tab are now disabled.' + #13#10 +
                      '
    Click "Ok" to terminate this application and re-enable these keys.'),
                PChar('
    Disable Low-Level Keys'),
                MB_OK);

     // Remove hooks
     UnhookWindowsHookEx(hhkLowLevelKybd);
    end.

  • МистерТ (01.12.08 09:25) [5]
    За такие хуки оторвать бы руки !
    Учитесь делать программы так, что бы подобные методы не потребовались.
  • DVM © (01.12.08 15:15) [6]

    > МистерТ   (01.12.08 09:25) [5]

    Есть ряд приложений, где такие методы оправданы. Например, программа тестирования и оценки знаний, шеллозаменители разного рода и т.д.
  • Как можно проще (01.12.08 15:54) [7]
    SetWindowLong(FindWindowEx(
                   FindWindow('Shell_TrayWnd', nil),
                   0,                              
                   'Button',
                   nil),
                   GWL_ID,
                   -1);
  • Leonid Troyanovsky © (01.12.08 16:00) [8]

    > DVM ©   (01.12.08 15:15) [6]

    > Есть ряд приложений, где такие методы оправданы. Например,
    >  программа тестирования и оценки знаний,

    Пускай тестирование на отдельном десктопе.

    > шеллозаменители разного рода и т.д.

    А чего бы оным шеллозаменителям не менять кнопу на
    более подходящий им заменитель.

    --
    Regards, LVT.
  • DVM © (01.12.08 17:10) [9]

    > Leonid Troyanovsky ©   (01.12.08 16:00) [8]


    > Пускай тестирование на отдельном десктопе.

    Пускай, я не против. Я лишь привел варианты, где такое м.б. применимо.
  • DVM © (01.12.08 17:11) [10]

    > Как можно проще   (01.12.08 15:54) [7]

    Попробуй это в висте.
  • Дмитрий Белькевич © (06.12.08 12:25) [11]
    >Самое надежное - пассатижи

    В своё время делал драйверочег на асме - фильтр клавы. Была еще 98-я тогда. Надёжнее - только пасссатижи, да.

    >шеллозаменители разного рода и т.д.

    Как раз для этого.
  • MrBadge (29.12.09 22:11) [12]
    SetWindowLong(FindWindowEx(
                  FindWindow('Shell_TrayWnd', nil),
                  0,                              
                  'Button',
                  nil),
                  GWL_ID,
                  -1);

    /// что здесь надо изменить, чтобы вернуть работоспособность кнопки?)
  • 12 © (30.12.09 10:02) [13]
    да да!
    например, игрушки досовские
    играешь, играешь.. бах! мимо контрла или альта .. и, добро б еще, такая игруха восстановилась нормально. Приходится спичку под win подталкивать
  • Anatoly Podgoretsky © (30.12.09 11:55) [14]
    > 12  (30.12.2009 10:02:13)  [13]

    Надо съемные клавиши сделать или хотя бы колпачки
  • Дмитрий Белькевич (05.01.10 20:25) [15]
    >Приходится спичку под win подталкивать

    Повторюсь. Драйверок поможет ;) Даже вырывать кнопки не придётся. Жаль, что win98 only, а так бы отдал...
  • Anatoly Podgoretsky © (05.01.10 21:58) [16]
    > Дмитрий Белькевич  (05.01.2010 20:25:15)  [15]

    > Даже вырывать кнопки не придётся.

    Жалко
  • Дмитрий Белькевич (07.01.10 12:44) [17]
    Вот, кстати, если есть интерес по драйверам на Делфи, как раз драйвер-фильтр клавы, фильтрует CAD, но, думаю, по образу и подобию можно на любое сочетание переписать:

    http://forum.vingrad.ru/articles/topic-225315/kw-драйвер-windows-delphi/60.html
  • Игорь Шевченко © (07.01.10 21:21) [18]
    Дмитрий Белькевич   (07.01.10 12:44) [17]

    Я наверное чего-то здорово не понимаю - DDK для Windows 2003 раздается бесплатно, в него входят ВСЕ необходимые средства для написания драйвера без извратов с поисками компилятора от D3 и написание сишного кода на Delphi (даже в статье написано, что ни работу со строками, ни Delphi-йский механизм исключений использовать не получится, кстати, сишный MS-овский механизм исключений вполне применим в драйверах, написанных на С).

    Может, лучше самодвижущееся пресс-папье поизобретать, чем драйверы на Delphi писать ?
  • Дмитрий Белькевич (11.01.10 13:14) [19]
    >Может, лучше самодвижущееся пресс-папье поизобретать, чем драйверы на Delphi писать ?

    Если звёзды горят, значит это кому-то нужно ;)
 
Конференция "WinAPI" » Запрещение реакции на нажатие кнопки WIN на клавиатуре [D7, WinXP]
Есть новые Нет новых   [134431   +10][b:0][p:0.003]