Проблема с хуком мыши

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by -CEREBRUM-, 12 Jan 2010.

  1. -CEREBRUM-

    -CEREBRUM- New Member

    Joined:
    20 Nov 2009
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Ребята, помогите хуки осилить!
    Задача - приложение висит в фоновом режиме и чего-то делает при нажатии мышиних кнопок (например, выводит сообщение.) порылся в сети, почитал, слепил такой вот код:
    Code:
    #include <windows.h> 
    #pragma hdrstop
    #pragma argsused 
    HHOOK HookHandle;   
     //-----------вывод ошибки-----------------------------  
    void ErrorMessage(void) 
    {LPVOID lpMsgBuf;     
     FormatMessage //формат сообщения об ошибке
    (FORMAT_MESSAGE_ALLOCATE_BUFFER |
     FORMAT_MESSAGE_FROM_SYSTEM |
     FORMAT_MESSAGE_IGNORE_INSERTS,  		
     NULL,  	
     GetLastError(),
     0,
     (LPTSTR)&lpMsgBuf,
     0,
     NULL);
     MessageBox(NULL, (LPCTSTR)lpMsgBuf, TEXT("Error"), MB_OK | MB_ICONERROR);     
    LocalFree(lpMsgBuf);
    }    
    //------процедура фильтр хука------------------------------  
    
    LRESULT CALLBACK FilterFunc(int Code, WORD WParam, long LParam)  
    {if (Code == HC_ACTION)                
         {switch (WParam)                      
             {case WM_LBUTTONDOWN : MessageBox(0,"Нажата левая клавиша","Сообщение", MB_OK); break;                      
              case WM_RBUTTONDOWN : MessageBox(0,"Нажата правая клавиша","Сообщение", MB_OK); break;}; 
          };    
    return CallNextHookEx(0, Code, WParam, LParam);     
    }  
    
    //---------------------------------------------------------------------------
    
    WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {HookHandle = SetWindowsHookEx(WH_JOURNALRECORD, reinterpret_cast<HOOKPROC>(FilterFunc), hInstance, NULL); //Ставим хук
    if (HookHandle == NULL) ErrorMessage(); //Если ошибка - выводим сообщение
    return 0;
    }
    Вычитал, что если использовать WH_JOURNALRECORD - то dll создавать не надо.
    В итоге ошибок не выдает, но и рабтать - не работает! Подскажите, в чем ошибся?
     
  2. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,291
    Reputations:
    327
    и волки сыты и овцы целы и пастуху вечная память))