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

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
SmileGobo
Earned some good credits
Earned some good credits
Posts: 111
Joined: Wed Jul 30, 2008 8:01 am
Location: Russia/MO
Contact:

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

Post by SmileGobo » Mon Sep 05, 2011 11:33 am

Пишу программку для работы с экраном, у нее должен быть диалог настроек, но восновном она сидит в трее и ждет нажатия горячих клавиш .
Вот попытался поймать события мыши, что то не пошло:

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!!!"));
}
как ловить события подскажите куда копать?
win xp sp2; CodeBlocks/mingw/wxWidgets 2.8.9/wxFormBuilder
web-программирование:PHP,js/Ajax

borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

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

Post by borr_1 » Mon Sep 05, 2011 12:49 pm

http://wiki.wxwidgets.org/Catching_key_events_globally
SmileGobo wrote:о восновном она сидит в трее и ждет нажатия горячих клавиш .
Вот попытался поймать события мыши, что то не пошло:
Разрыв мозга какой-то.
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse

SmileGobo
Earned some good credits
Earned some good credits
Posts: 111
Joined: Wed Jul 30, 2008 8:01 am
Location: Russia/MO
Contact:

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

Post by SmileGobo » Mon Sep 05, 2011 1:09 pm

borr_1 wrote:Разрыв мозга какой-то.
Простите старался максимально безопасно сформулировать для чужих мозгов =)
За наводку спасибо!
win xp sp2; CodeBlocks/mingw/wxWidgets 2.8.9/wxFormBuilder
web-программирование:PHP,js/Ajax

SmileGobo
Earned some good credits
Earned some good credits
Posts: 111
Joined: Wed Jul 30, 2008 8:01 am
Location: Russia/MO
Contact:

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

Post by SmileGobo » Mon Sep 05, 2011 8:11 pm

вобщем покурил я тот мануал, несколько не то. Срабатывает при открытом диалоге или фрейме, а нужно ловить события мыши и клвы всегда.

Суть такова программа сидит в трее и вдруг мне понадобилоьсь распознать какие-нибудь образы на экране (например открылось окно ввода пароля и программа по виду формы подскажет мне пароль и логин) я нажимаю сочетание горячих клавиш - программа преходит в режим выделения области распознования, курсором выделяю область на экране, прога распознает область.
Необходимо ловить события клавиатуры и мыши независимо от включенных фреймов или диалого
win xp sp2; CodeBlocks/mingw/wxWidgets 2.8.9/wxFormBuilder
web-программирование:PHP,js/Ajax

borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

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

Post by borr_1 » Tue Sep 06, 2011 4:52 am

Поиск по форуму рулит
http://forums.wxwidgets.org/viewtopic.p ... t+globally

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

Правка опа видимо тебе больше wxWindow::RegisterHotKey подойдет тебе ж что-то конкретное перехватывать а не все подряд...
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse

SmileGobo
Earned some good credits
Earned some good credits
Posts: 111
Joined: Wed Jul 30, 2008 8:01 am
Location: Russia/MO
Contact:

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

Post by SmileGobo » Tue Sep 06, 2011 5:28 am

а как же быть с событиями мыши?
win xp sp2; CodeBlocks/mingw/wxWidgets 2.8.9/wxFormBuilder
web-программирование:PHP,js/Ajax

SmileGobo
Earned some good credits
Earned some good credits
Posts: 111
Joined: Wed Jul 30, 2008 8:01 am
Location: Russia/MO
Contact:

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

Post by SmileGobo » Thu Sep 08, 2011 8:02 pm

В общем придумал я как ловить события мыши, по таймеру поробую напрямую опрашивать устройство ввода. Но возникла проблема не могу скомпилировать программу с вот таким вот кодом

Code: Select all

RAWINPUTDEVICE Rid[1];

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

Кстати а нельзя обратиться как то к окн рабочего стола и на него повесить свой обработчик событий?
win xp sp2; CodeBlocks/mingw/wxWidgets 2.8.9/wxFormBuilder
web-программирование:PHP,js/Ajax

Post Reply