Page 1 of 1

Перехват события мыши и клавиатуры вне окна приложения

Posted: Mon Sep 05, 2011 11:33 am
by SmileGobo
Пишу программку для работы с экраном, у нее должен быть диалог настроек, но восновном она сидит в трее и ждет нажатия горячих клавиш .
Вот попытался поймать события мыши, что то не пошло:

Code: Select all

#include <wx/app.h>
#include "AppEventListener.h"
class scree_backgroundApp : public wxApp
{
    private:
    AppEventListener* evt_listener;
    public:
        virtual bool OnInit();
};
DECLARE_APP(scree_backgroundApp)

#include "taskbaricon.h"

IMPLEMENT_APP(scree_backgroundApp);

bool scree_backgroundApp::OnInit()
{

    evt_listener=new AppEventListener();
    MyTaskBarIcon* tb_icon=new MyTaskBarIcon();
    tb_icon->SetIcon(wxICON(aaaa));
    return true;
}

Code: Select all

#include <wx/event.h>
#include <wx/msgdlg.h>

class AppEventListener:wxEvtHandler{
    public:
        AppEventListener();
        ~AppEventListener();
        void OnMouseDClick(wxMouseEvent& event);
    DECLARE_EVENT_TABLE()
};


BEGIN_EVENT_TABLE(AppEventListener,wxEvtHandler)
    EVT_LEFT_DCLICK(AppEventListener::OnMouseDClick)
END_EVENT_TABLE()

AppEventListener::AppEventListener():wxEvtHandler(){}
AppEventListener::~AppEventListener(){}
void AppEventListener::OnMouseDClick(wxMouseEvent& event){
    wxMessageBox(_T("TADA!!!"));
}
как ловить события подскажите куда копать?

Re: Перехват события мыши и клавиатуры вне окна приложения

Posted: Mon Sep 05, 2011 12:49 pm
by borr_1
http://wiki.wxwidgets.org/Catching_key_events_globally
SmileGobo wrote:о восновном она сидит в трее и ждет нажатия горячих клавиш .
Вот попытался поймать события мыши, что то не пошло:
Разрыв мозга какой-то.

Re: Перехват события мыши и клавиатуры вне окна приложения

Posted: Mon Sep 05, 2011 1:09 pm
by SmileGobo
borr_1 wrote:Разрыв мозга какой-то.
Простите старался максимально безопасно сформулировать для чужих мозгов =)
За наводку спасибо!

Re: Перехват события мыши и клавиатуры вне окна приложения

Posted: Mon Sep 05, 2011 8:11 pm
by SmileGobo
вобщем покурил я тот мануал, несколько не то. Срабатывает при открытом диалоге или фрейме, а нужно ловить события мыши и клвы всегда.

Суть такова программа сидит в трее и вдруг мне понадобилоьсь распознать какие-нибудь образы на экране (например открылось окно ввода пароля и программа по виду формы подскажет мне пароль и логин) я нажимаю сочетание горячих клавиш - программа преходит в режим выделения области распознования, курсором выделяю область на экране, прога распознает область.
Необходимо ловить события клавиатуры и мыши независимо от включенных фреймов или диалого

Re: Перехват события мыши и клавиатуры вне окна приложения

Posted: Tue Sep 06, 2011 4:52 am
by borr_1
Поиск по форуму рулит
http://forums.wxwidgets.org/viewtopic.p ... t+globally

Если тебе нужно ловить все нажатия клавиш даже при НЕ активном окне, то в винде кроме как SetWindowsHookEx решений походу нет.

Правка опа видимо тебе больше wxWindow::RegisterHotKey подойдет тебе ж что-то конкретное перехватывать а не все подряд...

Re: Перехват события мыши и клавиатуры вне окна приложения

Posted: Tue Sep 06, 2011 5:28 am
by SmileGobo
а как же быть с событиями мыши?

Re: Перехват события мыши и клавиатуры вне окна приложения

Posted: Thu Sep 08, 2011 8:02 pm
by SmileGobo
В общем придумал я как ловить события мыши, по таймеру поробую напрямую опрашивать устройство ввода. Но возникла проблема не могу скомпилировать программу с вот таким вот кодом

Code: Select all

RAWINPUTDEVICE Rid[1];

    Rid[0].usUsagePage = 0xFFBC;
    Rid[0].usUsage = 0x88;
    Rid[0].dwFlags = 0;
Ругается говорит, что не знает тип RAWINPUTDEVICE. Нагуглил что нужно макрос _WIN32_WINNT объявить, но у меня он объявлен в файле windef.h

Кстати а нельзя обратиться как то к окн рабочего стола и на него повесить свой обработчик событий?