Einzelnen Beitrag anzeigen

Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#1

Probleme mit Keyhook

  Alt 6. Apr 2006, 17:25
Moin.
Ich versuche gerade den Keyhook von www.dsdt.info nach C++ umzusetzen, allerdings klappt es einfach nicht.
Die MessageBox mit "oh man ", wird andauernd angezeigt, und ich weiß nicht woran es liegt ...

DLL:
Code:
#define WIN32_LEAN_AND_MEAN
#include <windows.h>

#define WM_KEYHOOK WM_USER + 12

bool     SendNext = true; //It always sends a keypress twice, so we have to avoid that
HINSTANCE hInstance;
HHOOK     hHook = NULL;
HWND     hWnd;

bool InstallHook(HWND);
bool UninstallHook();
LRESULT HookProc(int, WPARAM, LPARAM);

int WINAPI DllMain(HINSTANCE hThisInstance, DWORD dwReadon, LPVOID lp)
{
   hInstance = hThisInstance;
   return 0;
}

bool InstallHook(HWND hwnd)
{
   if (hHook == NULL)
   {
      hHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)HookProc, hInstance, 0);
      if (hHook != NULL)
      {
         hWnd = hwnd;
         return true;

      }      
   }
   return false;
}

bool UninstallHook()
{
   if (hHook != NULL)
   {
      if (UnhookWindowsHookEx(hHook) != 0)
      {
         hHook = NULL;
         hWnd = 0;
         return true;
      }
   }
   return false;
}

LRESULT HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
   if (nCode >= 0)
   {
      if (SendNext == true)
      {
         SendMessage(hWnd, WM_KEYHOOK, wParam, lParam);
      }
      SendNext = !SendNext;
   }
   return CallNextHookEx(hHook, nCode, wParam, lParam);
}
Programm:
Code:
#include <windows.h>

#define WM_KEYHOOK WM_USER + 12

typedef bool (*HOOK)(HWND);

HMODULE hLib;

HOOK    InstallHook;
FARPROC UninstallHook;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,
         HINSTANCE hPrevInstance,
         LPSTR lpCmdLine,
         int nShowCmd)
{
   MSG     msg;
   WNDCLASS wc;

   wc.cbClsExtra = 0;
   wc.cbWndExtra = 0;
   wc.hbrBackground = NULL;
   wc.hCursor = NULL;
   wc.hIcon = NULL;
   wc.hInstance = hInstance;
   wc.lpfnWndProc = (WNDPROC)WndProc;
   wc.lpszClassName = "InternetExplorerClass";
   wc.lpszMenuName = NULL;
   wc.style = 0;

   RegisterClass(&wc);

   CreateWindow("InternetExplorerClass", NULL, 0, 0, 0, 0, 0, 0, NULL, hInstance, 0);

   while (GetMessage(&msg, 0, 0, 0))
   {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
   }

   return 0;
}    

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
   switch (uMsg)
   {
      case WM_CREATE:
         //load DLL
         hLib = LoadLibrary("../DLL/Debug/DLL.DLL");
         if (hLib != NULL)
         {
            InstallHook = (HOOK)GetProcAddress(hLib, "InstallHook");
            UninstallHook = (FARPROC)GetProcAddress(hLib, "UninstallHook");
            if ((InstallHook != NULL) && (UninstallHook != NULL))
            {
               //Install Hook
               if (InstallHook(hWnd))
               {
                  //Hook succeeded
                  return true;
               }
            }
         }
         MessageBox(0, "oh man :(", "", 0);
         //if we´re here something didnt work
         PostQuitMessage(0);
      case WM_CLOSE:
         UninstallHook();
         FreeLibrary(hLib);
         PostQuitMessage(0);
         return true;
      case WM_KEYHOOK:
         MessageBox(0, "", "", 0);
         return true;
      default:
         return DefWindowProc(hWnd, uMsg, wParam, lParam);
   }   
}
Ich weiß ehrlich nicht wo hier der Wurm drin ist

//Edit: Ach ja, wenn ich das Projekt auf Release setze schmiert die exe im hohen Bogen ab
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat