Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2015, 09:19   #1
sergei92
Пользователь
 
Регистрация: 17.07.2015
Сообщений: 51
По умолчанию Блокировка клавиш Win+D

Подскажите пожалуйста как в c++builder 6 запретить нажатие клавиши Win+D тоесть чтобы скомпилированную форму нельзя было свернуть
sergei92 вне форума Ответить с цитированием
Старый 17.07.2015, 11:41   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Попробуй поставить на нее горячую клавишу. Функция RegisterHotKey().
Или придется ставить хук функцией SetWindowsHookEx()
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.07.2015, 16:04   #3
sergei92
Пользователь
 
Регистрация: 17.07.2015
Сообщений: 51
По умолчанию

Stilet если можно, то пожалуйста продемонстрируйте примером использование "хук" для WIN+D.За ранее большое спасибо.
sergei92 вне форума Ответить с цитированием
Старый 17.07.2015, 20:04   #4
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Через RegisterHotKey() в Windows 7 не работает:

Код:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
        RegisterHotKey(Handle,0,MOD_WIN,'D');
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,
      bool &Handled)
{
        if (Msg.message == WM_HOTKEY){
                if (Msg.wParam == 0) ShowMessage("WIN+D");
        }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
        UnregisterHotKey(Handle,0);
}
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 18.07.2015, 08:42   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Примера у меня нет. Я хуками не увлекаюсь. Однако вот тут: http://delphiworld.narod.ru/base/glo...oard_hook.html
Вполне примерно описано.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.07.2015, 17:54   #6
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

SetWindowsHookEx работает отлично:
Код:
HHOOK mainKeyboardHook = 0;
bool leftWinState = false;
bool rightWinState = false;

LRESULT CALLBACK MainKeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
        if ( code == HC_ACTION ){
                tagKBDLLHOOKSTRUCT* kbhs = (tagKBDLLHOOKSTRUCT*)lParam;

                // save left win state
                if( kbhs->vkCode == VK_LWIN ){
                        leftWinState = (wParam==WM_KEYDOWN)?true:false;
                }

                // save right win state
                if( kbhs->vkCode == VK_RWIN ){
                        rightWinState = (wParam==WM_KEYDOWN)?true:false;
                }

                if( kbhs->vkCode == 'D'&&( leftWinState || rightWinState) ) return 1;
        }

        return CallNextHookEx(mainKeyboardHook, code, wParam, lParam);
}

void __fastcall TForm1::Button1Click(TObject *Sender){
        // set hook
        if(!mainKeyboardHook) mainKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)MainKeyboardProc,  GetModuleHandle(NULL),0);
        if(!mainKeyboardHook) MessageBox(0,"Не смог установить KeyboardHook","Ошибка",0);
}

void __fastcall TForm1::Button2Click(TObject *Sender)
{
        // unhook
        if(mainKeyboardHook){
                UnhookWindowsHookEx(mainKeyboardHook);
                mainKeyboardHook=0;
        }
}
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 18.07.2015, 18:15   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ой! Я все опять перепутал!!! Опять на Делфи дал по привычке ссыль.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.07.2015, 19:10   #8
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Это же WinAPI. Тут и так все понятно.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Модуль драйвера клавиатуры, cтирающий предыдущий символ при нажатии клавиш "win" antojka Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 05.01.2013 22:19
Блокировка клавиш Vladya Помощь студентам 5 19.04.2010 20:44
Блокировка нажатия WIN KEY jarrus Общие вопросы C/C++ 7 28.03.2010 20:05
Блокировка клавиш в определенном окне Holis Win Api 11 12.04.2008 06:40
пути в реестре, где находятся программы автозагрузки для win'95 win'98 win' me win 2000 Prisian Win Api 1 11.09.2007 20:07