Gazunio Napisano Styczeń 29, 2010 Zgłoś Share Napisano Styczeń 29, 2010 Witam. Mam problem z obsługą globalnych hotkeysów. Chodzi mi o to, by działały one, gdy włączona jest gra z DirectX, więc takie w WinAPI odpadają. Ja edytując kod keyloggera utworzyłem hotkeysy: //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unitaa1.h" #include <stdio.h> //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; HHOOK g_hLogHook = NULL; HWND g_hLastFocus = NULL; const int KeyPressMask = 0x80000000; //--------------------------------------------------------------------------- HOOKPROC ConnectHook(int iCode, WPARAM wParam, LPARAM lParam) { if(iCode < 0) return (HOOKPROC)CallNextHookEx(g_hLogHook, iCode, wParam, lParam); EVENTMSG *pEvt = (EVENTMSG *)lParam; if(pEvt->message == WM_KEYDOWN) { int vKey = LOBYTE(pEvt->paramL); char ch; char str[10]; int iShift = GetKeyState(VK_SHIFT); int iAlt = GetKeyState(VK_MENU); int iControl = GetKeyState(VK_CONTROL); bool bShift = (iShift & KeyPressMask) == KeyPressMask; bool bAlt = (iAlt & KeyPressMask) == KeyPressMask;; bool bControl = (iControl & KeyPressMask) == KeyPressMask; if(bShift && bAlt && bControl && vKey == 81) { Application->Restore(); ShowWindow(Application->Handle, SW_SHOW); } } return (HOOKPROC)CallNextHookEx (g_hLogHook, iCode, wParam, lParam); } //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { if(g_hLogHook == NULL) { g_hLogHook = SetWindowsHookEx(WH_JOURNALRECORD, (HOOKPROC)ConnectHook, HInstance,0); ShowMessage("Hak podłączony"); } else { UnhookWindowsHookEx(g_hLogHook); g_hLogHook = NULL; ShowMessage("Hak nie został podłączony"); } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose) { if(g_hLogHook != NULL) { UnhookWindowsHookEx(g_hLogHook); g_hLogHook = NULL; } } //--------------------------------------------------------------------------- Ten kod działa na systemie Windows XP, ale na Viscie już nie - bo jest to hak systemowy. Czy da się to jakoś obejść, by hotkeysy działały pod Directx, na systemach XP, Vista i 7. Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.