Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.006 c
15-1219010733
No_Dead(w)
2008-08-18 02:05
2008.10.05
монитор не выключается%)


11-1193735383
tigra
2007-10-30 12:09
2008.10.05
kolindy


15-1218472441
Анонимщики
2008-08-11 20:34
2008.10.05
Шахматы


15-1218874305
Anatoly Podgoretsky
2008-08-16 12:11
2008.10.05
ГМП


2-1219384408
arbin
2008-08-22 09:53
2008.10.05
работа c FTP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский