FreeBasic
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

регистрируем горячую клавишу

Перейти вниз

регистрируем горячую клавишу Empty регистрируем горячую клавишу

Сообщение  electrik Сб Мар 13, 2010 1:12 pm

короче, как-то мне нужно было зарегистрировать горячую клавишу в windows. я этому научился быстро, но встала проблема. функция registerHotkey, принимает комбинации флагов, отличающиеся от тех, которые мы получаем из поля hotkey. порывшись в инете, почитав некоторых исходников, я для своей программы написал такую функцию. правда без комментариев, думаю поймете.
Код:

 function HotkeyProcessing(byval hDlg as HWND,byval hotkey as uinteger, _
byval id as uinteger) as integer
function = 0
if hotkey <> 0 then
wVirtualKeyCode = LOBYTE(LOWORD(hotkey))
wModifiers = HIBYTE(LOWORD(hotkey))
if wModifiers = 0 then
MessageBox(0,"Комбинации клавиш без модификаторов (Control, Alt, Shift) запрещены!",WarningMess,MB_ICONWARNING)
okSettings = 0
return 1
end if
if wModifiers = 8 then
MessageBox(0,"Клавиши управления, и расширенные клавиши запрещены!",WarningMess,MB_ICONWARNING)
OkSettings = 0
return 1
end if

wModifiers=-4 * (wModifiers=1) -1 * (wModifiers=4) -2 * (wModifiers=2) _
-3 * (wModifiers=6) -6 * (wModifiers =3) -5 * (wModifiers =5) ' проверяем, и меняем местами некоторые флаги
if RegisterHotkey(hDlg,id,wModifiers,wVirtualKeyCode) = 0 then
MessageBox(0,"Немогу зарегистрировать горячую клавишу",WarningMess,MB_ICONERROR)
okSettings = 0
return 1
end if
else
UnregisterHotkey(hDlg,id)
end if
okSettings = 1
end function

клавиши модификаторы
#define MOD_ALT 1
#define MOD_CONTROL 2
#define MOD_SHIFT 4
для того, чтоб у нас все работало с полем горячей клавиши,мы меняем местами alt и shift

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

cSettings.HotkeySpeak = SendMessage(hSpeakHotkey, HKM_GETHOTKEY, 0, 0) ' читаем значение из поля горячей клавиши
cSettings.HotkeyShowHide = SendMessage(hShowHideHotkey, HKM_GETHOTKEY, 0, 0) ' и еще одну клавишу
 if not cSettings.HotkeySpeak = rSettings.HotkeySpeak then ' ну это проверка, изменились настройки или нет
if HotkeyProcessing(hDlg,cSettings.HotkeySpeak,id_hspeak) then exit sub ' если проблема при регистрации, выходим
end if
if not cSettings.HotkeyShowHide = rSettings.HotkeyShowHide then
if HotkeyProcessing(hDlg,cSettings.HotkeyShowHide,ID_HSHOWHIDE) then exit sub
end if
rSettings = cSettings ' сохраняем настройки

может понадобиться и обратное, прочитать из настроек значение горячей клавиши, зарегистрировать клавишу, а потом установить это значение в поле горячей клавиши, пишем так:
Код:

HotkeyProcessing(hDlg,cSettings.HotkeySpeak,id_hspeak) ' регистрируем клавишу
SendMessage(hSpeakHotkey, HKM_SETHOTKEY, cSettings.HotkeySpeak, 0) ' устанавливаем значение из настроек, в поле горячей клавиши
HotkeyProcessing(hDlg,cSettings.HotkeyShowHide,ID_HSHOWHIDE) ' регистрируем клавишу
SendMessage(hShowHideHotkey, HKM_SETHOTKEY, cSettings.HotKeyShowHide, 0) ' устанавливаем

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения