Gość ecikmen Opublikowano 2 Maja 2006 Zgłoś Opublikowano 2 Maja 2006 (edytowane) 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 3 Maja 2006 przez ecikmen Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 3 Maja 2006 Zgłoś Opublikowano 3 Maja 2006 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 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Gość ecikmen Opublikowano 3 Maja 2006 Zgłoś Opublikowano 3 Maja 2006 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ć :Dale to jest globalnie zrobione.. tylko nie dziala.. wskarz miejsce gdzie co pozmieniac jak mozesz Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Errorx Opublikowano 14 Czerwca 2006 Zgłoś Opublikowano 14 Czerwca 2006 Skaonczyles ten program? Bo wlasnie czegos takiego szukam Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...