Hook na klawiature

Odpowiedz Nowy wątek
2008-07-22 20:31

Rejestracja: 12 lat temu

Ostatnio: 9 lat temu

0

Witam, mam problem z hookami w C++, zawsze zakladalem je w delphi teraz musialem sie przezucic na C++, probowalem przetlumaczyc z delphi na c++ ale nic z tego, w koncu poszukalem na googlach jakiegos kursu no i znalazlem przyklad, skopiowalem linijka po linijce do Buildera i nie mozna uruchomic, wyskakuja bledy, co jest nie tak, kod wyglada nastepujaco:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HWND hwnd;
HHOOK g_MyHook;
LRESULT CALLBACK AltF4Proc (int code, WPARAM wParam, LPARAM lParam)
{
    if (code < 0) return CallNextHookEx (0, code, wParam, lParam);

    if (wParam == VK_F4 && (lParam & 536870912))
    {
        MessageBox (hwnd, "Nie zamkniesz mnie tak łatwo!", NULL, MB_ICONEXCLAMATION);
        return 1;    
    }

    return CallNextHookEx (0, code, wParam, lParam);
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::start(TObject *Sender)
{
 g_MyHook = SetWindowsHookEx(WH_KEYBOARD, &AltF4Proc, NULL, GetThreadId (GetCurrentThread()));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::koniec(TObject *Sender, TCloseAction &Action)
{
 UnhookWindowsHookEx(g_MyHook);
}
//---------------------------------------------------------------------------

Prosze o pomoc.

Pozostało 580 znaków

2008-07-22 22:20

Rejestracja: 13 lat temu

Ostatnio: 7 lat temu

0
//---------------------------------------------------------------------------
#define STRICT
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HHOOK g_MyHook;
LRESULT CALLBACK AltF4Proc (int code, WPARAM wParam, LPARAM lParam)
{
       if (code < 0 ) return CallNextHookEx (g_MyHook, code, wParam, lParam);

        if (wParam == VK_F4 &&(lParam & 536870912))
        {
         MessageBox (NULL, "Nie zamkniesz mnie tak łatwo!", NULL, MB_ICONEXCLAMATION);
         return 1;
        }

    return CallNextHookEx (g_MyHook, code, wParam, lParam);
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
 g_MyHook = SetWindowsHookEx(WH_KEYBOARD,AltF4Proc,NULL,GetCurrentThreadId());
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
 UnhookWindowsHookEx(g_MyHook);
}
//---------------------------------------------------------------------------

Pozostało 580 znaków

2008-07-22 22:23

Rejestracja: 12 lat temu

Ostatnio: 9 lat temu

0

W takiej postaci faktycznie dziala:

//---------------------------------------------------------------------------
#define STRICT
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HHOOK g_MyHook;
LRESULT CALLBACK AltF4Proc (int code, WPARAM wParam, LPARAM lParam)
{
      //  if (code < 0) return CallNextHookEx (0, code, wParam, lParam);
        if (wParam == VK_ESCAPE)
        {
                MessageBox (NULL, "Nie zamkniesz mnie tak łatwo!", NULL, MB_ICONEXCLAMATION);
               // return 1;
        }

    return CallNextHookEx (g_MyHook, code, wParam, lParam);
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
 g_MyHook = SetWindowsHookEx(WH_KEYBOARD,AltF4Proc, HInstance,GetCurrentThreadId());
}
//---------------------------------------------------------------------------

void __fastcall TForm1::koniec(TObject *Sender)
{
UnhookWindowsHookEx(g_MyHook);
}
//---------------------------------------------------------------------------

Tylko mam maly problem bo dopiero teraz widze ze to nie jest hook globalny, w jaki sposob to przerobic zeby lapal za kazdym razem kiedy wcisne ESC. Prosze o pomoc

Pozostało 580 znaków

2008-07-22 22:28

Rejestracja: 13 lat temu

Ostatnio: 7 lat temu

0

Ten nie jest globalny
Globalny powinien zostać umieszczony w bibliotece .dll .


Pozostało 580 znaków

2008-07-22 22:37

Rejestracja: 12 lat temu

Ostatnio: 9 lat temu

0

a nie da sie tego zrobic w programie, bo bibliotek dll to nie wiem jak sie robi ;]

Pozostało 580 znaków

2008-07-22 22:47

Rejestracja: 13 lat temu

Ostatnio: 7 lat temu

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0