Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.05;
Скачать: CL | DM;

Вниз

Горячие клавиши   Найти похожие ветки 

 
demon ©   (2008-08-27 12:49) [0]

Подскажите, как сделать так, чтобы пргамма реагировала на горячую клавишу, а другое приложение в котором назначено тоже сочетание клавишь не реагировало на него?
К примеру, если нажать WinKey, то вызоветься меню пуск, а нужно чтобы только моя прогамма на это среагировала и меню не вызывалось.
Что-то пахожее умеет делать Active Keyboard 2.9


 
Leonid Troyanovsky ©   (2008-08-27 13:23) [1]


> demon ©   (27.08.08 12:49)  

> Подскажите, как сделать так, чтобы пргамма реагировала на
> горячую клавишу, а другое приложение в котором назначено
> тоже сочетание клавишь не реагировало на него?

WH_KEYBOARD_LL

--
Regards, LVT.


 
DVM ©   (2008-08-27 13:46) [2]


> К примеру, если нажать WinKey, то вызоветься меню пуск,
> а нужно чтобы только моя прогамма на это среагировала и
> меню не вызывалось.

Еще Ctrl+ESC надо ловить. WH_KEYBOARD_LL, как уже сказали, где то в MSDN был пример, кажется от Рихтера.


 
Leonid Troyanovsky ©   (2008-08-27 14:23) [3]


> DVM ©   (27.08.08 13:46) [2]

>  где то в MSDN был пример, кажется от Рихтера.

Моя любимая ссылка
http://msdn.microsoft.com/en-gb/magazine/cc302329.aspx

--
Regards, LVT.


 
demon ©   (2008-08-27 20:38) [4]

А можно ли это сделать без установки глобального хука (без подгрузки dll)?
Active Keyboard не подгружает dll...


 
DVM ©   (2008-08-27 22:39) [5]


> А можно ли это сделать без установки глобального хука (без
> подгрузки dll)?
> Active Keyboard не подгружает dll...

Ты даже не попытался разобраться в том, что тебе предлагают, я смотрю. Где ты тут dll углядел?


/************************************************************************
Module:  DisableLowLevelKeys.cpp
Notices: Written 2000 Jeffrey Richter
**************************************************************************/

#define _WIN32_WINNT 0x0400
#include <Windows.h>

/////////////////////////////////////////////////////////////////////////

LRESULT CALLBACK LowLevelKeyboardProc(int nCode,
  WPARAM wParam, LPARAM lParam) {

  BOOL fEatKeystroke = FALSE;

  if (nCode == HC_ACTION) {
     switch (wParam) {
     case WM_KEYDOWN:  case WM_SYSKEYDOWN:
     case WM_KEYUP:    case WM_SYSKEYUP:
        PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam;
        fEatKeystroke =
           ((p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN) != 0)) ||
           ((p->vkCode == VK_ESCAPE) &&
           ((p->flags & LLKHF_ALTDOWN) != 0)) ||
           ((p->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) &
            0x8000) != 0));
        break;
     }
  }
  return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam,
         lParam));
}

/////////////////////////////////////////////////////////////////////////

int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) {

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

  // Keep this app running until we"re told to stop
  MessageBox(NULL,
     TEXT("Alt+Esc, Ctrl+Esc, and Alt+Tab are now disabled.\n")
     TEXT("Click \"Ok\" to terminate this application and re-enable
           these keys."),
     TEXT("Disable Low-Level Keys"), MB_OK);
  UnhookWindowsHookEx(hhkLowLevelKybd);

  return(0);
}

///////////////////////////// End Of File ///////////////////////////////



 
ЛшдлуттнСфе   (2008-08-27 23:44) [6]


> DVM ©   (27.08.08 22:39) [5]

ну, где-нить там один фиг длл вызовется. :)


 
Palladin ©   (2008-08-27 23:54) [7]

как говорится, увидев три буквы, читатель понял ВСЕ... :)


 
Германн ©   (2008-08-28 01:16) [8]


> Palladin ©   (27.08.08 23:54) [7]
>
> как говорится, увидев три буквы, читатель понял ВСЕ... :
> )
>

Но почему он (читатель) решил, что буквы написаны на заборе? Вот что особенно непонятно.


 
demon ©   (2008-08-28 02:13) [9]

Ну, поперло...
Лучше бы как это на делфи выглядит показали, у самого ума не хватает переписать это на делфи.


 
ЛшдлуттнСфе   (2008-08-28 08:38) [10]

а это разве не делфи ?!


 
ЛшдлуттнСфе   (2008-08-28 08:39) [11]


> у самого ума не хватает

так может и не стоит браться, коль не по рылу каравай?


 
DVM ©   (2008-08-28 11:11) [12]


> demon ©   (27.08.08 20:38) [4]

Мог бы и сам перевести.

(************************************************************************
Module:  DisableLowLevelKeys.cpp
Notices: Written 2000 Jeffrey Richter
Translated by: Dmitry Muratov
**************************************************************************)

program DisableLowLevelKeys;

{$APPTYPE CONSOLE}

uses
 Windows, Messages, SysUtils;

const
 LLKHF_ALTDOWN  = KF_ALTDOWN shr 8;
 WH_KEYBOARD_LL = 13;

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

var
 hhkLowLevelKybd: HHOOK;

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

function LowLevelKeyboardProc(nCode: integer;  wParam: WPARAM;  lParam: LPARAM): LRESULT; stdcall;
var
 fEatKeystroke: BOOL;
 p: PKBDLLHOOKSTRUCT;
begin
 fEatKeystroke := LongBool(0);
 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, 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);
 UnhookWindowsHookEx(hhkLowLevelKybd);
end.



 
demon ©   (2008-08-28 13:21) [13]

Спасибо!



Страницы: 1 вся ветка

Текущий архив: 2008.10.05;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
15-1218610196
MsGuns
2008-08-13 10:49
2008.10.05
Лето или очередная летаргия форума ?


15-1218274270
king
2008-08-09 13:31
2008.10.05
Опыт работы


11-1194121276
LazyBob
2007-11-03 23:21
2008.10.05
КалорДиалог проблема небольшая


4-1197378338
Игорь00
2007-12-11 16:05
2008.10.05
Static без мерцания


15-1218840977
ZeroDivide
2008-08-16 02:56
2008.10.05
Новых версий Turbo Delphi не будет :(