[ Burgos @ 24.02.2005. 16:15 ] @
//Ovaj tekst je subjektivno napisan, pa me ne napadajte ako nisam u pravu (imam jako malo iskustva sa OOP) Klase - mač sa dve oštrice. Pored svih prednosti organizovanja koda i svega ostalog, onaj koje navikao na line-after-line programiranje u BASICU, pascalu ili C-u ima velike poteškoće da nauči kako se koriste klase... Bacio sam dosta $ za VC++ 6 da bih odradio jedan komer. projekat, a posle par dana naiđoh na problem. Pošto sam napisao dosta koda, problem je nastao u preglednosti koda. Rekoh sebi: ajde da se malo pozabavim sa klasama... Tu počinje pakao... Maksimalno sam pojednostavio projekat, tj. izdvojio sam jedan deo da bi mogli da mi pomognete. hook.h: Code: class hook{ public: LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam); }; hook.cpp: Code: #define _WIN32_WINNT 0x0400 #include "Windows.h" #include "hooking.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; } } if(fEatKeystroke) MessageBox(NULL,NULL,NULL,NULL); return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam, lParam)); } }; main.cpp: Code: #define _WIN32_WINNT 0x0400 #include <Windows.h> #include "hooking.h" void OnTop(); int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) { HHOOK hhkLowLevelKybd = SetWindowsHookEx(WH_KEYBOARD_LL, hook::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); } Poruka o grešci: Code: --------------------Configuration: hook - Win32 Debug-------------------- Compiling... main.cpp c:\frogProject\ES\main.cpp(9) : error C2664: 'SetWindowsHookExA' : cannot convert parameter 2 from 'long (__stdcall hook::*)(int,unsigned int,long)' to 'long (__stdcall *)(int,unsigned int,long)' There is no context in which this conversion is possible Skipping... (no relevant changes detected) hooking.cpp Error executing cl.exe. hook.exe - 1 error(s), 0 warning(s) |