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

Hooking "Low Level Keys-a"

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

[ Pregleda: 2808 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
195.252.80.*

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Hooking "Low Level Keys-a"09.11.2004. u 22:29 - pre 236 meseci
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
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

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

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Hooking "Low Level Keys-a"10.11.2004. u 09:19 - pre 236 meseci
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
 
Odgovor na temu

DarkMan
Darko Matesic

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

Jabber: DarkMan


Profil

icon Re: Hooking "Low Level Keys-a"10.11.2004. u 17:01 - pre 236 meseci
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.
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

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

Sajt: stackoverflow.com/users/1..


+480 Profil

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

DarkMan
Darko Matesic

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

Jabber: DarkMan


Profil

icon Re: Hooking "Low Level Keys-a"11.11.2004. u 19:48 - pre 236 meseci
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.
 
Odgovor na temu

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

[ Pregleda: 2808 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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