Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Поймать момент смены курсора

69K
05 апреля 2011 года
xdessko
4 / / 05.04.2011
Подскажите пожалуйста. Столкнулся с , на первый взгляд, банальной проблемой .

Есть моё приложение CDialog.
Как возможно узнать моему приложению, что курсор сменил свой вид, когда пользователь двигает им над окном чужого приложения (например когда в чужом окне пользователь переместил курсор с кнопки в CEdit)?
11
05 апреля 2011 года
oxotnik333
2.9K / / 03.08.2007
ИМХО, только хук на движение курсора ставить, запоминать текущий, и сравнивать с предыдущим...
69K
05 апреля 2011 года
xdessko
4 / / 05.04.2011
А что такое хук, извените? )) Я просто ни разу не общался на подобных форумах и слабо представляю что под этим словом имеется ввиду.

Эта операция мне нужна чтобы потом сделать ::GetCursorPos(&cursor); для определение координат места где он сменил свой вид
69K
05 апреля 2011 года
xdessko
4 / / 05.04.2011


The specified CGI application encountered an error and the server terminated the process.

жаль
и спасибо

11
05 апреля 2011 года
oxotnik333
2.9K / / 03.08.2007
Тебе сюда МСДН перепечатать? И перевести на русский? Или за тебя все сделать?
278
05 апреля 2011 года
Alexander92
1.1K / / 04.08.2008
Эх... "MSDN SetWindowsHookEx" - гугли на здоровье.
69K
07 апреля 2011 года
xdessko
4 / / 05.04.2011
Да, помогли по самое не горюй. Толку от ваших ответов никакого. Я сюда и зашел чтобы меня не посылали на мсдн и гугл, а помогли хоть примером.
Лан проехал.
Задача поменялась. Нужно в определнной области чужой экранной формы определить что курсор поменяет свой вид при попадании на CEdit (причем не факт что там будет именно CEdit) и нажать правую кнопку мыши на нем. Никаких хуков не надо вовсе.
Решил таким образом:
Код:
int x1,x2,y1,y2;
x1 = cursor.x - iFishX; x2 = cursor.x + iFishX;
y1 = cursor.y - iFishY; y2 = cursor.y + iFishY;
POINT pt;DWORD   dwThreadID,dwCurrentThreadID;HWND hCurWnd;
for(iy=y1;iy<=y2;iy++)
    for(ix=x1;ix<=x2;ix++)
    {
        ::SetCursorPos(ix,iy);
        ::GetCursorPos(&pt);
        hCurWnd = ::WindowFromPoint(pt);
        if(hCurWnd != NULL)
        {
            dwThreadID          = ::GetWindowThreadProcessId(hCurWnd, NULL);
            dwCurrentThreadID   = ::GetCurrentThreadId();
            if(dwCurrentThreadID != dwThreadID)
            {
               if(::AttachThreadInput(dwCurrentThreadID, dwThreadID, TRUE))
               {
                hc = ::GetCursor();
                if(hc!=hcur)
                {
                    mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
                    Sleep(iSleep+getRandom(-10, 10));
                     mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
                     Sleep(iSleep+getRandom(-10, 10));
                  ::AttachThreadInput(dwCurrentThreadID,dwThreadID,FALSE);
                     goto that_all;
                }
                :AttachThreadInput(dwCurrentThreadID, dwThreadID, FALSE);
               }
            }
        }
    }

Срабатывает 100%. Может кому пригодится. Удачи имба профи :o

[COLOR="gray"]ps: цикл что снаружи что если бы внутри по времени работает одинаково[/COLOR]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог