• 4 odgovora
  • 3.694 pregleda
Hooking "Low Level Keys-a" 09.11.2004. u 22:29 · pre 267 meseci #1
Zdravo, opet mi treba mala pomoć :)
Naime, uspeo sam da "upecam" tastere ALT-TAB i CTRL-ESC, ali mi treba pomoć kako da pozovem novu funkciju posle toga. Znači, treba mi neka funkcija pomoću koje ću posle uspešnog pecanja pozvati novu funkciju. Hvala
Re: Hooking "Low Level Keys-a" 10.11.2004. u 09:19 · pre 267 meseci #2
Sorry, zaboravio sam source:
Code:


#define _WIN32_WINNT 0x0400
#include <Windows.h>
void OnTop();


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) {


   HHOOK hhkLowLevelKybd  = SetWindowsHookEx(WH_KEYBOARD_LL, 
      LowLevelKeyboardProc, hinstExe, 0);


   MessageBox(NULL, 
      TEXT("System combination of keys is disabled.\n")
      TEXT("Click OK to terminate this application and enable combinations"),
      TEXT("Try to press ALT-TAB, CTRL-ESC or ALT-ESC!"), MB_OK);
   UnhookWindowsHookEx(hhkLowLevelKybd);

   return(0);
}

void OnTop()
{
      MessageBox(NULL, 
      TEXT("You have pressed forbiden combination!\n")
      TEXT("Click OK to close this message box"),
      TEXT("Forbiden!"), MB_OK);
}



Znaci sve sam pokusavao ali nikako da lepo pozovem OnTop() funkciju posle ALT-TAB, CTRL-ESC ili ALT-ESC
Re: Hooking "Low Level Keys-a" 10.11.2004. u 17:01 · pre 267 meseci #3
Probao sam tvoj kod i ubacio jednu liniju:
Code:

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;
      }
   }
   if(fEatKeystroke) OnTop();
   return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam, 
          lParam));
}

Ovo funkcionise, kada pritisnes te tvoje nedozvoljene kombinacije iskoci poruka.
Re: Hooking "Low Level Keys-a" 11.11.2004. u 19:48 · pre 267 meseci #5
Ta funkcija LowLevelKeyboardProc je jedna u lancu sistemskih funkcija (sledece pozivas sa CallNextHookEx) koje obradjuju dogadjaje na pritisak tastera na tastaturi. Kao takva ona mora da bude kratka i brza.
Ti si kao za primer stavio da ona pozove messagebox koji u sustini zaustavi proceduru dok korisnik ne pritisne dugme OK na poruci. Sta se tacno desava dok je procedura zaustavljena, koliko puta se aktivira LowLevelKeyboardProc funkcija to sad zavisi od sistema. Mozda je i objasnjeno u MSDN-u, proveri.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme