Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Расширение System Clock 
:(
    Опции темы
TGrey
Дата 17.6.2010, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 1.12.2007

Репутация: 1
Всего: 1



Здравствуйте, что-то пригорело мне увеличить ширину системных часов в трее, добрался до них, пытался двигать - двигаются, но остальное не сдвигается относительно них. Потом пробовал двигать сам трей, тоже двигается, но не то, что мне надо. Почитал в инете, нашел что нужно отлавливать сообщения WM_USER+100 которое шлется часам, для того, чтобы узнать их размер. Попытался сам слать его, но часам до него нет дела, значит нужно возвращать результатом их размер? Сунул глобальный хук в систему на сообщение WM_USER+100, а оно почему-то не обрабатывается, не видит оно его, в Спайхх все сообщения проходят, а ДЛЛ 0 внимания.
Можете подсказать в чем проблема и может, кто-то уже занимался подобной ерундой.
Спасибо.

Код


#pragma data_seg(".sh")
HHOOK hook = 0;
#pragma data_seg()

#pragma comment(linker, "/section:.sh, rws")


HINSTANCE hin;

int APIENTRY DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved){
    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH :
            hin = hInstance ;
            break ;
    }  
    return TRUE ;
}

extern "C" __declspec(dllexport) bool TurnON(HWND h)
{
    hm = h;
    //cout<<"Hook ON"<<endl;
    MessageBox(NULL, "Hook ON", "ON", 0);
    hook = SetWindowsHookEx(WH_GETMESSAGE, HookProc,hin, NULL);
    return true;
}

LRESULT CALLBACK HookProc( int nCode, WPARAM wParam,LPARAM lParam)
{
    MSG * st = (MSG*)lParam;
    if( nCode == HC_ACTION )
    {
                if( st->message == 0x0464 )
        {
            MessageBox(NULL, "clock", "ON", 0);
            //st->lParam= 0;
            //st->wParam = 0;
        }
    }
    else
    {
            //MessageBox(NULL, "BAD", "ON", 0);
        return CallNextHookEx(hook, nCode, wParam, lParam);
    }
    return CallNextHookEx(hook, nCode, wParam, lParam);
}

PM MAIL   Вверх
TGrey
Дата 17.6.2010, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 1.12.2007

Репутация: 1
Всего: 1



Пока сидел, решил побаловаться, с ПУСКом, заделал свою кнопку и пытался вызвать оконную процедуру ПУСКа при сообщении от кнопки мыши, почти работает, но недостаток по прежнему в том, что Shell_TrayWnd сообщения никак не воспринимаются хуком.
Я просмотрел и увидел, что на часы и на его парентов стоит одна и таже процедура окна, я так понял, что ее надо заменять на свою, а потом вызывать стандартную, но вопрос остается, как принимать хоть какие-то сообщения, если они вообще не воспринимаются от этих компонентов?
PM MAIL   Вверх
GremlinProg
Дата 18.6.2010, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



код не разбирал, но увидел работу с WH_GETMESSAGE,
не думаю что такие сообщения часто укладываются в очередь, обычно вызывается простой SendMessage,
так что наверное стоит заглянуть и в WH_CALLWNDPROC


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
TGrey
Дата 19.6.2010, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 1.12.2007

Репутация: 1
Всего: 1



Пробовал, дело в том, что у меня почему-то от ШеллТрея(если не ошибаюсь) вообще никакие сообщения не идут. Я сдвигаю к примеру часы или панель с иконками куда-то под экран- пытался ловить сообщения  о кликах и т.д. Так ничего и не словилось, словилось только тогда, когда клацаю по кнопке со стролочкой, которая расскрывает список спрятаных иконок, тогда идет сообщение о клике мышой, а иначе - глухо.

Как смогу еще раз проверю, может я пробовал с WH_GETMESSAGE. Но всеже если у кого есть еще идеи, буду рад.
PM MAIL   Вверх
TGrey
Дата 20.6.2010, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 1.12.2007

Репутация: 1
Всего: 1



В общем вот что получилось, если хукаю по КоллВндПрок, то при клике по иконкам приложений крашится Експлорер, при клике по ШеллТрею - ничего.
Если хукаю по ГетМесседж, то при кликах в Ехплорере и при кликах в области часов(но не на часах) и по кнопке выдвинуть спрятанные иконки и по квадратику для выбора языка, сообщения проходят, а при клике по ШеллТрею - 0 внимания. Не хочет оно сообщения ловить.


------------------
Моя ошибка, выключил в Спайхх нужные сообщения в фильтре и не видел, что хукаю не то, что надо.
Код

    hook = SetWindowsHookEx(WH_GETMESSAGE, HookProc,hin, 0);
....
        else if( st->message == WM_NCLBUTTONDOWN )
....

Работает, ловит, то что мне надо.


Извиняюсь отдалился от темы, с ПУСКом, то работает, а насчет часов вопрос остается открытым. Сообщение WM_USER+100 по прежнему не ловятся от него.

Это сообщение отредактировал(а) TGrey - 20.6.2010, 07:51
PM MAIL   Вверх
TGrey
Дата 25.6.2010, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 1.12.2007

Репутация: 1
Всего: 1



Теперь на счет WM_USER+100, в другой теме было решено, что я использовал не верную структуру для хука WH_CALLWNDPROC, подставив нужную структуру, сообщение хукается нормально, но размер, что-то не горит изменятся=)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0648 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.