Перехват Hot Key без активации окна программы
От: FokusNick  
Дата: 28.08.05 10:49
Оценка:
Господа, я столкнулся с такой неприятной проблемкой...
При установки горячей клавиши следующим способом:

wHotkey = (WORD)SendDlgItemMessage(IDC_HOT_KEY,HKM_GETHOTKEY,0,0);
SendMessage(WM_SETHOTKEY,wHotkey,0);


Прога при нажатии на эту HotKey сначала активирует свое окно, если оно неактивно или восстанавливает, если свернуто.
У меня прога вообще сидит в трее с ShowWindow(SW_HIDE) при сворачивании.

Подскажите, как избежать активации окна, и сразу обработать нажатие HotKey без использования хуко, желательно.
Спасибо.


28.08.05 19:30: Перенесено модератором из 'C/C++' — Павел Кузнецов
THE REVENGE IS OUT THERE
Re: Перехват Hot Key без активации окна программы
От: Аноним  
Дата: 29.08.05 11:38
Оценка:
RegisterHotKey должен помочь.
Re[2]: Перехват Hot Key без активации окна программы
От: FokusNick  
Дата: 30.08.05 06:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>RegisterHotKey должен помочь.


Но при использовании RegisterHotKey необходимо указывать как параметр

fsModifiers
[in] Specifies keys that must be pressed in combination with the key specified by the nVirtKey parameter in order to generate a WM_HOTKEY message. The fsModifiers parameter can be a combination of the following values: Value Description
MOD_ALT Either ALT key must be held down.
MOD_CONTROL Either CTRL key must be held down.
MOD_KEYUP Both key up events and key down events generate a WM_HOTKEY message.
MOD_SHIFT Either SHIFT key must be held down.
MOD_WIN Either WINDOWS key was held down. These keys are labeled with the Microsoft Windows logo.

а я не знаю, какие клавиши указал пользователь, как выкрутиться?
THE REVENGE IS OUT THERE
Re[3]: Перехват Hot Key без активации окна программы
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 30.08.05 07:30
Оценка:
Здравствуйте, FokusNick, Вы писали:

FN>а я не знаю, какие клавиши указал пользователь, как выкрутиться?


у тебя же есть числовое значение хоткея, дальше — http://gzip.rsdn.ru/?article/mfc/QnAhotkeys.xml
Автор(ы): Алексей Кирюшкин
Дата: 28.10.2004
Как использовать в своей программе "горячие клавиши"? Какой обработчик вызывать и что вписывать в карту сообщений?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Перехват Hot Key без активации окна программы
От: FokusNick  
Дата: 30.08.05 17:50
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>у тебя же есть числовое значение хоткея, дальше — http://gzip.rsdn.ru/?article/mfc/QnAhotkeys.xml
Автор(ы): Алексей Кирюшкин
Дата: 28.10.2004
Как использовать в своей программе "горячие клавиши"? Какой обработчик вызывать и что вписывать в карту сообщений?


Спасибо всем огромное. Разобрался.
Решение таково:
На нажатие кнопки, например с названием "Set HotKey":

    wHotkey =(WORD) SendDlgItemMessage(IDC_HOT_KEY,HKM_GETHOTKEY,0,0);  //получаем HotKey от конрола
    
    m_nIDHotKey = GlobalAddAtom("HotCDOpen");                           //во избежание конфликтов
    TRACE("HotCDOpen = %d\n", m_nIDHotKey);
    RegisterHotKey(m_hWnd,m_nIDHotKey,HIBYTE(wHotkey),LOBYTE(wHotkey)); //Регистрируем клавиши


Далее добавляем обработчик сообщения WM_HOTKEY:


BEGIN_MESSAGE_MAP(CHotCDOpenDlg, CDialog)
...
    //}}AFX_MSG_MAP
    ON_MESSAGE(WM_HOTKEY, OnHotKey)
...
END_MESSAGE_MAP()


И обрабатываем сообщение:



LRESULT CHotCDOpenDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
    TRACE(_T("CHotCDOpenDlg::OnHotKey\n"));
    if (wParam==m_nIDHotKey) 
    {
        CHotCDOpenDlg::OnBnClickedOpenBtn();  
    }
    
    return 0;
}
THE REVENGE IS OUT THERE
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.