Skocz do zawartości
Gość ecikmen

Hook -ilosc Klikniec Builder C++ 6.0

Rekomendowane odpowiedzi

Gość ecikmen

Musze zrobic program ktory zlicza liczne klikniec prawym i lewym przyciskiem myszki.Ale problem tkwi w tym iz mimo ze zalozylem globalnego hooka to dalej poza forma nie zlicza ilosci klikniec?Tylko w okienku

Wie ktos gdzie popelniam blad?

tu linkt do calego projektu http://www.odzi.kgb.pl/j.zip

 

A i w folderze dynamicdll po skompilowaniu trzena preniesc MouseHook.dll i MouseHook.lib do katalogu callingapp i topiero wowczas odpalic proga callingapp.exe.

 

 

#include <vcl.h>

#pragma hdrstop

#include <windows.h>

#include <fstream.h>

#include "dynamicfunction.h"

 

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

 

#pragma package(smart_init)

// Global variables

int x=0;

int y=0;

int temp=0;

LRESULT CALLBACK MouseProc(int code, WPARAM wParam, LPARAM lParam);

HOOKPROC AdressMouseProc = {(FARPROC)MouseProc} ;

HHOOK getHook();

void writeHook(HHOOK);

bool IsInRect=false;

HHOOK HookHandle;

HINSTANCE DllInstance;

int l();

int r();

 

 

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

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)

{

DllInstance=hinst;

return 1;

}

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

bool InstallMouseHook(HINSTANCE hs)

{

if(hs){

if(!AdressMouseProc)

MessageBox(NULL, "Could not set the mouse hook.", "Hook FAILURE", MB_OK);

else{

DllInstance=hs;

// ShowMessage("To jest komunikat z biblioteki DLL\n");

HookHandle=SetWindowsHookEx(WH_MOUSE,(FARPROC)AdressMouseProc,DllInstance,0);

// writeHook(HookHandle);

}

 

}

else

MessageBox(NULL, "The HINSTANCE is null", "What", MB_OK);

} //

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

bool RemoveMouseHook()

{

if(UnhookWindowsHookEx(HookHandle)==0)

{

return false;

}

else return true;

}

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

LRESULT CALLBACK MouseProc(int ncode, WPARAM wParam, LPARAM lParam)

{ //

// if (!HookHandle) // Another process started, fill in the values

//HookHandle = getHook();

//ShowMessage("To jest komunikat z biblioteki DLL\n");

if (ncode<0)

{

return CallNextHookEx(HookHandle,ncode,wParam,lParam);

}

LPMOUSEHOOKSTRUCT mouseCoords; // This is how you access the coordinates of the click

char num[100];

if (wParam == WM_LBUTTONDOWN)

{ sprintf(num, "Captured RIGHT mouse button");

x++;

 

} // End the if

else if (wParam == WM_RBUTTONUP)

{ sprintf(num, "Captured RIGHT mouse button");

y++;

 

} // End the if

// End the if

 

return CallNextHookEx(HookHandle,ncode,wParam,lParam);

}

 

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

void writeHook(HHOOK hhK)

{ // Have to save the values of all variables. When another process is started ALL variables are null

ofstream outfile("C:\\mouse.cfg", ios::out | ios::trunc | ios::binary | ios::beg);

if (outfile)

{

outfile.write((char *)&hhK, sizeof(HHOOK));

outfile.close();

} // End the if

else

MessageBox(NULL, "Could not write file for Mouse hook.", "Failure Write Failure", MB_OK);

} // End the writeHook method

 

//============================================================================

 

HHOOK getHook()

{ // New process started so I need to get the old values

HHOOK tempHook = NULL;

ifstream infile("C:\\mouse.cfg", ios::beg | ios::binary | ios::in);

if (infile)

{

infile.read((char *)&tempHook, sizeof(HHOOK));

infile.close();

} // End the if

else

MessageBox(NULL, "Could not read file for Mouse hook.", "File Read Failure", MB_OK);

 

return tempHook;

} // End the getHook function

int l(){

temp=x;

x=0;

return temp;

}

int r(){

temp=y;

y=0;

return temp;

}

Edytowane przez ecikmen

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

nie chce mi się patrzeć w kod.. ale powinieneś zamiast zwykłej pętli komunikatów z przechwytywaniem przycisku łapać klawisze globalnie... Bo w pętli komunikatów to on złapie tylko kliknięcia na własnej formie... inaczej windows by w ogólnie nie mógł działać :D

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość ecikmen

nie chce mi się patrzeć w kod.. ale powinieneś zamiast zwykłej pętli komunikatów z przechwytywaniem przycisku łapać klawisze globalnie... Bo w pętli komunikatów to on złapie tylko kliknięcia na własnej formie... inaczej windows by w ogólnie nie mógł działać :D

ale to jest globalnie zrobione.. tylko nie dziala..

wskarz miejsce gdzie co pozmieniac jak mozesz

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...