Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Hooking "Low Level Keys-a"

[es] :: C programiranje :: Hooking "Low Level Keys-a"

[ Pregleda: 1202 | Odgovora: 4 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Burgos
Zrenjanin

Član broj: 12484
Poruke: 1256
195.252.80.*

ICQ: 290190857
Sajt: www.last.fm/user/Burgos


Profil

icon Hooking "Low Level Keys-a"09.11.2004. u 22:29

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
Dejane, vrati se :)
09.11.2004. u 22:29 

Burgos
Zrenjanin

Član broj: 12484
Poruke: 1256
*.smin.sezampro.yu.

ICQ: 290190857
Sajt: www.last.fm/user/Burgos


Profil

icon Re: Hooking "Low Level Keys-a"10.11.2004. u 09:19
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
Dejane, vrati se :)
10.11.2004. u 09:19 

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 492
*.metrohive.neobee.net.



Profil

icon Re: Hooking "Low Level Keys-a"10.11.2004. u 17:01
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.
10.11.2004. u 17:01 

Burgos
Zrenjanin

Član broj: 12484
Poruke: 1256
*.smin.sezampro.yu.

ICQ: 290190857
Sajt: www.last.fm/user/Burgos


Profil

icon Re: Hooking "Low Level Keys-a"10.11.2004. u 21:18
Da, to sam i ja provalio, ali mi se poruka pojavi 2 puta, i za to vreme ALT-TAB funkcioniše.
Dejane, vrati se :)
10.11.2004. u 21:18 

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 492
*.metrohive.neobee.net.



Profil

icon Re: Hooking "Low Level Keys-a"11.11.2004. u 19:48
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.
11.11.2004. u 19:48 

[es] :: C programiranje :: Hooking "Low Level Keys-a"

[ Pregleda: 1202 | Odgovora: 4 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.