Обработка ALT+SHIFT

Тема в разделе "WASM.BEGINNERS", создана пользователем mupsy, 2 мар 2009.

  1. mupsy

    mupsy New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2008
    Сообщения:
    55
    Пишу программу которая меняет символы с английского на русский,если пишешь и забыл сменить раскладку клавиатуры...Ну что то типо punto switchera или как то так называется=).Все это делаю через глобальные хуки,ставя хук на WH_GETMESSAGE вот далбше работаю с буфером через OpenClipboard() и так далее=).Возникли трудности что когда я инсталю хук,перестает менятся раскладка клавиатуры...Как это можно исправить?Или мне прийдется написать в своей библиотеке свой обработчик SHIFT+ALT?Пробывал написать обработчик,определял через GetKeyState() нажаты ли клавиши,но проблема в том что когда повторно нажимаешь ALT+SHIFT кнопки считаются не нажатыми...Если кто дочитал до конца помогите пожалуйста...
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.317
    хм... грубо говоря... модель... после перехвата необходимо вызвать оригинал функции из функции перехватчика, чтобы отработались оконные сообщения... я правда делал подобное сплайсингом GetMessage и PeekMessage, но суть наверное такая же... ты это делаешь?

    а программно раскладку клавиатуры можно было переключать с помощью ActivateKeyboardLayout, если ничего не путаю...
     
  3. mupsy

    mupsy New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2008
    Сообщения:
    55
    Ты имеешь ввиду вызвать CallNextHookEX?Я его вызываю...Блин у меня ваще при перехвате WM_GETMESSAGE и обработки WM_CHAR почему то перестает менятся раскладка клавиатуры...Даже если я при обработке WM_CHAR вызываю обычный MessageBox()...Может это не в программе проблема?
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.317
    вообще попробуй в своем обработчике, когда приходит WM_CHAR, смотреть 29ый байт lParam... попробуй нажать альт+шифт... посмотри, приходит ли в этом байте 1, или нет...

    а вообще выложи код своего обработчика для WM_GETMESSAGE...
     
  5. mupsy

    mupsy New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2008
    Сообщения:
    55
    DWORD KeyBoardProc(int code,WPARAM wParam,LPARAM lParam)
    {
    if(code>=0)
    {
    MSG *msg=(MSG*)lParam;
    if(msg->message==WM_CHAR)
    {
    MessageBoxA(0,0,0,0);
    }
    }
    else
    return CallNextHookEx(hHook,code,wParam,lParam);
    }

    ну вот вобщем такой у меня обработкчик стоит...
     
  6. mupsy

    mupsy New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2008
    Сообщения:
    55
    О все сделал...оказывается один раз CallNextHook вызвать забыл=)))Все равно Rel спасибо...