ALT+STRG+TAB, ALT+TAB, Windowstaste usw. blocken
-
Hi,
wie kann man die obringen Tastenkombinationen blocken, mein Programm soll ein Blocker werden, so das nur bestimmte leute diesen Blocker deaktivieren können und nicht jeder Daten verändern kann bzw. rumklicken kann.
-
Mit Hook
static LRESULT CALLBACK StopKey(int, WORD,LONG); static HHOOK kbHook; /* Hook aktivieren */ kbHook= SetWindowsHookEx(WH_KEYBOARD_LL, (int(__stdcall*)())StopKey, hInstance, NULL); /* Hook deaktivieren */ UnhookWindowsHookEx(kbHook); /* Die HookProc Funktion */ LRESULT CALLBACK StopKey(int HookCode, WORD wParam, LONG lParam) { bool isStopCodes = false; if (HookCode == HC_ACTION) { switch (wParam) { case WM_KEYDOWN: case WM_SYSKEYDOWN: case WM_KEYUP: case WM_SYSKEYUP: PKBDLLHOOKSTRUCT lp = (PKBDLLHOOKSTRUCT) lParam; isStopCodes = ((lp->vkCode == VK_TAB) && ((lp->flags & LLKHF_ALTDOWN) != 0)) | | ((lp->vkCode == VK_ESCAPE) && ((lp->flags & LLKHF_ALTDOWN) != 0)) | | ((lp->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) & 0x8000) != 0)); break; } } return(isStopCodes ? 1 : CallNextHookEx(kbHook, HookCode, wParam, lParam)); }
Den Code nicht so Kopieren, SetWindowsHookEx und UnhookWindowsHookEx entsprechend verwenden um den Hook zu aktivieren und zu deaktivieren.
-
irgendwie komm ich mir verarscht vor...
welche Includes brauch ich dafür (außer windows.h?)
er meint:
error C2065: 'PKBDLLHOOKSTRUCT': nichtdeklarierter Bezeichner
error C2065: 'WH_KEYBOARD_LL': nichtdeklarierter Bezeichner
error C2065: 'LLKHF_ALTDOWN': nichtdeklarierter Bezeichner
-
Irgendwie kommen wir uns verarscht vor wenn du nicht in der MSDN nachsiehst
Seis drum, hast du die MSDN des 2005er offline:
ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.WIN32COM.v10.en/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/lowlevelkeyboardproc.htmMfG SideWinder
-
Was ist gegen LockWorkStation einzuwenden?
-
SideWinder schrieb:
Irgendwie kommen wir uns verarscht vor wenn du nicht in der MSDN nachsiehst
Ich *habe* nachgesehen, okay? Du hast keinen Grund mich gleich so dumm anzumachen.
http://bloody-blades.de/huh.jpg
Bei KBDLLHOOKSTRUCT steht auch, dass man windows.h includieden soll. - hab ich getan.
Und es kommen trotzdem die Fehlermeldungen.
Du kannst entweder weiter klugscheissen oder mir helfen, da ich es einfach nicht verstehe, was ich falsch mache.
(btw: < Visual Studio .Net 2003)
-
Du musst vor inkludieren der Headerdatei per Präprozessor _WIN32_WINNT mit einem Wert größer oder gleich 0x400 definieren. Da diese Funktionen aus der ehemaligen NT-Reihe stammten, wären Programme, die diese Funktion nutzen nicht unter Windows 9x lauffähig.
Aus diesem Grund wird der Zugriff auf diese Funktionen headerseitig verhindert wenn man nicht explizit angibt, dass man in seinem Programm die Inkompatibilität mit alten Windows-Versionen in Kauf nimmt.Also schafft ein
#define _WIN32_WINNT 0x400
vor Inkludieren des windows.h-Headers Abhilfe.
So sieht das Ganze in der Headerdatei winuser.h aus:
#if (_WIN32_WINNT >= 0x0400) #define WH_KEYBOARD_LL 13 #define WH_MOUSE_LL 14 #endif // (_WIN32_WINNT >= 0x0400)
Und hier ist die Erklärung von Microsoft zu dem Thema: Link
-
wow, merci, ich bin so dumm *g*
Ich hatte mir die winuser.h sogar angeschaut und habe die if Abfrage gesehen mit _WIN32_WINNT unter anderem bei PKBDLLHOOKSTRUCT, aber ich bin nicht auf die verdammte Idee gekommen, es selbst zu definieren *d'oh*
-
Ich frage noch mal:
Luckie schrieb:
Was ist gegen LockWorkStation einzuwenden?